CSS가 한 줄 주석을 허용하지 않는 이유는 무엇입니까? [닫은]


14

CSS는 이와 같은 여러 줄 주석 만 지원한다는 것을 알고 있습니다.

/* foobar */

한 줄 주석이 지원되지 않는 이유는 무엇입니까?

// foobar

그것들은 프로그래밍에서 공통적이며 각 규칙이 자체 줄에있는 CSS와 같은 언어에 특히 유용합니다.

이 결정에 특별한 역사적 이유가 없다면, 브라우저가이를 지원하지 못하게 된 이유는 무엇입니까?


3
나쁜 결정입니다. 한 줄 주석을 허용해야합니다.
Tulains Córdova

1
@Goose : sass-lang.com을 보셨습니까 ?
케빈 클라인


1
@ TulainsCórdova 나는 대답을 보증하지 않았 으며이 토론이 이미 진행되었다고 지적했습니다.
Eric King

2
그 질문은 여기의 답변보다 더 기술적 인 답변을 얻었습니다. "CSS는 개행을 다른 모든 공백과 같이 처리하며 종료 구분 기호 없이는 주석의 끝을 결정할 수 없습니다."
Goose

답변:


9

이전 버전과의 호환성

CSS 구문에 한 줄 주석을 도입하면 현재 token을 사용하는 파일의 의미가 변경 될 수 있습니다 //. 브라우저 벤더는 매우 잠재적으로 기존 페이지를 깰 수있는 변화를 소개하기를 꺼려.

CSS는 매우 정확한 "오류 허용"구문 분석 규칙으로 정의됩니다. 이는 구문 상 불법적 인 것을 작성하더라도 구문 분석 방법에 대한 정확한 규칙이 있음을 의미합니다. //선언 내에서 잘못된 일련의 문자 (예 :)가 감지되면 현재 선언이 삭제되고 다음 세미콜론까지의 모든 항목을 건너 뜁니다.

CSS는 이전 브라우저를 손상시키지 않고 새로운 구문을 도입 할 수 있도록 이와 같이 설계되었습니다. 오래된 브라우저는 지원되지 않는 구문을 포함하는 선언을 건너 뛰고 계속 진행합니다.

그러나이 논리는 "단위"가 처리되거나 생략되는 것으로 선언이라고 가정합니다. 한 줄 주석이 도입 된 경우 구문 분석 //은 다음 세미콜론이 아닌 다음 줄 바꿈 까지 건너 뛰어야 한다는 의미입니다. 이 규칙은 구문 분석되는 규칙과 건너 뛴 규칙을 변경합니다. 이로 인해 기존 CSS 파일의 의미가 놀라운 방식으로 변경 될 수 있습니다.

예를 들면 :

P { font: 12px//16px; }
... hundreds of additional lines of CSS...

여기서 실수로 슬래시를 두 배로 늘 렸습니다. 결과적으로 글꼴 선언이 무시되지만 나머지는 모두 정상적으로 작동합니다. //주석에 대한 지원 이 도입되면 갑자기 닫는 괄호가 주석 처리되어 스타일 시트의 나머지 부분이 모두 손상 될 수 있습니다.

이제 실수를 한 후 내 잘못이라고 말할 수 있지만 인터넷의 알 수없는 페이지 수가 깨지거나 모호한 이유로 이상하게 렌더링 될 수는 없습니다.

이전 버전과의 호환성을 손상시키는 그러한 변경은 매우 신중하게 고려해야하며, 한 줄 주석은 위험을 감당할 수 없을 것입니다. 유일한 이점은 몇 가지 키 입력을 절약 할 수 있기 때문입니다.

따라서 CSS에 단일 행 주석이 있어야하는 경우 CSS가 처음부터 도입되었을 것입니다. 그러나 CSS는 매우 간단한 언어로 시작했으며 두 개의 서로 다른 주석 구문을 갖는 것은 당시에는 불필요하게 복잡해 보였습니다. (ANSI C조차도 한 줄 주석이 없었습니다.)


아, // CSS의 토큰입니까? 말하라.
Michael Blackburn

현재 //문법의 어느 곳에서도 허용되지 않는 두 개의 "delim 토큰"으로 구문 분석됩니다. 자세한 내용은 w3.org/TR/css-syntax-3/#tokenization 을 참조하십시오.
JacquesB

MainMa는 +1로 시작한 이유는 +1 /**/이지만 변경되지 않은 이유도 다루기 때문에이를 수락합니다.
Goose

8

또 다른 구문 요소를 지원하는 것은 쉽지 않습니다. 추가 주석 스타일을 처리 할 수있는 도구가 많이 있습니다. 실제로, 대부분의 토크 나이저 / 파서가 단순히 개행을 무시하고 아마도 그것들을로 대체한다는 것을 알고 놀랄 일이 아닙니다 ;.

언어에 필수적인 것, 즉 개발자의 삶을 훨씬 편하게 해주려면 그렇게 할 수 있습니다. 예를 들어, 있지 않는 모든 종류의 비참 CSS에서 코멘트를하고, 그것은 가치가 의견을 구분하는 특정 구문 요소를 추가 할 수있는 노력이 될 것이다. //반면에 스타일 댓글? ... 나는 요점을 보지 못합니다. 참고 /* Hello, World! */: 한 줄짜리 주석.

실제로 //C 스타일 또는 유사한 언어로 익숙해 져 있기 때문에 아마도 스타일 주석을 기대할 수 있습니다. 그러나 CSS는 C ++에서 상속받지 않으므로 비슷한 구문 기능을 기대하는 것은 다소 이상합니다.

마찬가지로, 파이썬 프로그래머는 CSS에도 #스타일 주석 이 있어야한다고 주장합니다 . 이제 두 스타일을 모두 지원해야합니까? 그러면 Haskell 세계의 한 남자가 포함 --하고 요청할 것을 요청하며 {- -}CSS 코드를 더 이상 인식하지 못하는 이유를 스스로에게 묻게됩니다.

가장 작은 이점은 //한 줄 주석 끝에 3자를 더 입력 할 필요가 없다는 것입니다 (실제로 문자 수를 시작하면 CSS는 Python 스타일 주석을 사용해야합니다). 그러나 괜찮은 텍스트 편집기를 사용하는 경우 어쨌든 바로 가기를 눌러 간단히 텍스트에 주석을 달거나 주석을 해제합니다.

그것들은 [...] 각 규칙이 자체 줄에있는 CSS와 같은 언어에 특히 유용합니다.

내가 설명했듯이, 텍스트 편집기의 작은 하위 집합을 사용하는 작은 하위 집합의 프로그래머에게는 약간 유용합니다. 각 규칙에 대한 각 규칙에 대한 귀하의 의견에 관해서는 (저는 귀하의 의견에 동의하지 않습니다), 이것은 또 다른 요점에 대해 생각하게했습니다 : 의견이 실제로 어떻게 사용되는지.

생각할 수있는 CSS 주석의 사용법은 다음과 같습니다.

  • 파일 헤더로 (저작권 정보, 허영심 등)
  • 스타일 그룹의 구분자로.
  • 해킹에 대한 설명으로.
  • 특정 스타일 또는 속성에 대한 세부 정보

처음 세 가지 경우에는 여러 줄 스타일의 주석을 사용하게됩니다. 이것은 파일 헤더와 해킹에 대한 설명에서 분명합니다 (대부분의 해킹에는 적어도 문장과 스택 오버플로 또는 블로그 기사에 대한 하이퍼 링크가 필요합니다). 구분 기호는 다음과 같습니다.

/**
 * Footer and sitemap styles.
 */

C 스타일 주석은 다음보다 훨씬 더 잘 보입니다.

// Footer and sitemap styles.

텍스트에 묻혔습니다.


JavaScript는 한 줄 //주석 도 지원합니다 .
Tulains Córdova

나는 //많은 언어에서 매우 일반적 이라고 주장하고 그 뒤에있는 개념은 구문 이상이며 기능도 다릅니다. 즉, 이것은 아직 가장 깊이있는 답변입니다.
Goose

나는 그것이 작은 하위 집합이라고 생각하지 않습니다. raw로 CSS를 작성하는 사람이라면 누구나 //로 주석을 추가하는 것이 더 쉽다는 것을 알게 될 것입니다. 그러나 이전 버전과의 호환성 지점은 혼란스러워합니다.
O'Rooney

-5

문제는 주석이있는 대부분의 언어 (예 : C #, Java)가 컴파일 된 언어이며, 컴파일러는 내용을 소비자 (CPU)에게 제공하기 전에 모든 주석을 제거합니다. CSS는 컴파일되지 않습니다. 일반적으로 디자이너가 개발 한대로 파일이 변경되지 않고 전송되므로 주석을 제거 할 기회가 없습니다. // 스타일 주석은 구문 정확성을 유지하기 위해 // 기호와 줄 바꿈을 모두 필요로합니다.

예, 축소 기가 존재하며, 자바 스크립트는 이러한 유형의 주석을 허용합니다. Javascript는 eval ()도 허용하므로 모델로 사용하고 싶지 않다고 생각합니다.


3
이 대답은 전혀 의미가 없습니다. "댓글을 제거 할 기회가 없습니다"-물론, 다른 언어와 마찬가지로 파서가 주석을 제거합니다. 그렇지 않으면 CSS는 어떻게 /* */주석을 가질 수 있습니까?
JacquesB

나는 디자이너와 소비자 사이의 제 3 자 중개자를 의미했다. 컴파일러는 컴파일 된 언어로 된이 중개자입니다. "파서"는 콘텐츠의 최종 소비자 인 브라우저의 하위 시스템입니다.
Michael Blackburn

그렇다면 파서가 //주석을 제거 할 수있을 때 주석을 제거 할 수 없는 이유는 /* */무엇입니까?
JacquesB

1
그것은 가능하지만 // 그리고 줄 바꿈을 찾아야하며 줄 바꿈은 구문 적으로가 아니라 의미 론적 내용입니다. 설계된 CSS는 모든 공백을 동일하게 취급합니다. // 지원하기 위해 이제 "특수한"공백이 있으며, 그 "특수"공백은 하나의 문자 (\ n) 일 수 있고 두 개 (\ r \ n) 일 수 있습니다.
Michael Blackburn

3
@MichaelBlackburn : DSSSL (S-expression 구문을 사용하는 CSS의 전신) 인 DSSSL에도 한 줄 주석이 있습니다. 명령형 언어와 선언적 언어는 아무 관련이 없습니다.
JacquesB
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.