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

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

/* foobar */

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

// foobar

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

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



답변

이전 버전과의 호환성

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

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

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

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

예를 들면 :

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

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

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

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

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


답변

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

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

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

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

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

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

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

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

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

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

/**
 * Footer and sitemap styles.
 */

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

// Footer and sitemap styles.

텍스트에 묻혔습니다.


답변

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

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