Чому CSS не дозволяє однорядкові коментарі? [зачинено]


14

Я розумію, що CSS підтримує лише такі рядкові коментарі, як такі

/* foobar */

Чому немає підтримки для однорядкових коментарів.

// foobar

Вони настільки ж поширені в програмуванні і здаються особливо корисними для такої мови, як CSS, де кожне правило знаходиться у власному рядку.

Якщо не було конкретної історичної причини для цього рішення, що заважало браузерам рухатися до його підтримки?


3
Це погане рішення. Вони повинні допускати коментарі в одному рядку.
Тулен Кордова

1
@Goose: ви подивилися на sass-lang.com ?
Кевін Клайн


1
@ TulainsCórdova Я не схвалював відповідей, лише зазначив, що це обговорення вже було.
Ерік Кінг

2
Це питання отримало відповідь, більш технічну, ніж відповіді тут. "CSS розглядає нові рядки, як і всі інші пробіли, і не зможе визначити кінець коментаря без розмежувача, що закінчується."
Гусак

Відповіді:


9

Зворотна сумісність

Введення однорядкових коментарів до синтаксису CSS може змінити значення файлів, які в даний час використовують маркер //. Продавці браузерів дуже неохоче вносять зміни, які потенційно можуть порушити існуючі сторінки.

CSS визначається дуже точними правилами розбору "стійких до помилок", а це означає, що навіть якщо ви пишете щось синтаксично незаконне, існують точні правила того, як повинен проходити аналіз. Якщо //всередині декларації виявлено незаконну послідовність символів (подібних ), поточна декларація відкидається, і все, до наступної крапки з комою, буде пропущено.

CSS розроблений так, щоб дозволити вводити новий синтаксис, не порушуючи старі браузери. Старі браузери просто пропускають декларацію, яка містить непідтримуваний синтаксис, і продовжують після.

Але ця логіка передбачає, що "одиниця" буде оброблена або пропущена - це декларація. Якщо були введені однорядкові коментарі, це означатиме, що синтаксичний розбір після //повинен пропускатись до наступного рядка, а не до наступної крапки з комою, яка змінює правила розбору та пропускає. Це може дивовижно змінити значення існуючих файлів CSS.

Приклад:

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

Тут я помилково подвоїв косу рису. Наслідок - декларація шрифту ігнорується, але все інше працює добре. Якби //була введена підтримка для-коментарів , раптом думка про закриття буде прокоментована, що потенційно може порушити всю решту стилю.

Тепер ви можете сказати, що це моя вина, оскільки я допустив помилку, але це не змінюється тим, що невідома кількість сторінок в Інтернеті може розірватися або здаватися дивним чином з незрозумілих причин.

Будь-яку таку зміну, яка порушує зворотну сумісність, слід розглядати дуже уважно, і однорядкові коментарі, ймовірно, недостатньо вагомі для ризику, оскільки єдина користь - це заощадить вам кілька натискань клавіш.

Отже, якщо CSS повинен мати коментарі в окремому рядку, він, мабуть, був введений з самого початку. Але CSS розпочався як дуже проста мова і мати два різні синтаксиси коментарів було б розцінено як непотрібне на той час складність. (Навіть до ANSI C не було однорядкових коментарів.)


О, // це маркер у CSS? Розкажи.
Майкл Блекберн

В даний час //буде розбиратися на два "тонкі маркери", в свою чергу, ніде в граматиці заборонено. Докладніше див. W3.org/TR/css-syntax-3/#tokeization .
ЖакБ

+1 для MainMa, чому він почав /**/, але прийняв цей, оскільки він також вирішує, чому він не змінився.
Гусак

8

Підтримка ще одного елемента синтаксису не така проста: є безліч інструментів, які повинні мати можливість впоратися з додатковим стилем коментарів. Власне, я не здивувався б, побачивши, що більшість токенізаторів / аналізаторів просто ігнорують нові рядки, ймовірно, замінюючи їх на ;.

Якщо це буде важливо для мови, тобто значно полегшує життя розробників , це можна зробити. Наприклад, відсутність будь-яких коментарів у CSS буде достатнім, і варто докласти зусиль, щоб додати конкретні синтаксичні елементи, що обмежують коментарі. //- коментарі стилю з іншого боку? ... Я не бачу сенсу. Дивіться /* Hello, World! */,: однорядковий коментар.

Насправді ви, напевно, очікуєте //коментарів у стилі, тому що ви звикли до них на C ++ або подібних мовах. Однак CSS не успадковує від C ++, тому очікувати подібних синтаксичних функцій досить дивно.

Аналогічно, програміст Python стверджує, що CSS також повинен мати #коментарі у стилі; тому зараз, чи потрібно підтримувати обидва стилі? Тоді хлопець із світу Haskell попросить включити --і {- -}також, і ви запитаєте себе, чому ви більше не розпізнаєте CSS-код.

Невелика перевага //полягає в тому, що вам не доведеться вводити ще трьох символів наприкінці однорядкового коментаря (насправді, якщо ми почнемо рахувати символи, CSS повинен використовувати коментарі в стилі Python). Однак якщо ви користуєтесь гідним текстовим редактором, ви коментуєте / розмежуєте текст, просто натискаючи ярлик.

Вони [...] здаються особливо корисними для такої мови, як CSS, де кожне правило знаходиться у власному рядку.

Як я пояснив, вони лише незначно корисні для невеликої підмножини програмістів, використовуючи невелику підмножину текстових редакторів. Що стосується Вашого зауваження щодо кожного правила в його окремому рядку (до речі, я не згоден з Вашим зауваженням), це змусило мене задуматися про інший момент: як фактично використовуються коментарі.

Ось використання коментарів CSS, про які я можу придумати:

  • Як заголовок файлу (інформація про авторські права, суєтні речі тощо)
  • Як роздільник групи стилів.
  • Як пояснення злому.
  • Як деталь про певний стиль чи властивість.

У перших трьох випадках у будь-якому випадку ви використовуватимете коментарі у багаторядковому стилі. Це очевидно для заголовка файлу та пояснення хаку (більшість хаків вимагає принаймні пропозиції та гіперпосилання на StackOverflow або статтю блогу); що стосується роздільників:

/**
 * Footer and sitemap styles.
 */

Коментар у стилі C набагато помітніше, ніж:

// Footer and sitemap styles.

похований у тексті.


JavaScript також підтримує однорядкові //коментарі.
Tulains Córdova

Я б заперечував, що //дуже часто зустрічається у багатьох мовах, і концепція, що стоїть за ним, - це більше, ніж синтаксис, він також функціонує по-різному. Однак, це найбільш глибока відповідь поки.
Гусь

Я взагалі не думаю, що це невелика підмножина. Майже про те, хто пише CSS в сирому вигляді, легше буде додавати коментарі //. Але зворотна точка сумісності робить його суперечливим.
О'Руні

-5

Проблема полягає в тому, що більшість мов із коментарями (наприклад, C #, Java) є компільованими мовами, і компілятор викреслює ВСІ коментарі, перш ніж подавати вміст споживачеві (ЦП). CSS не компілюється; як правило, файл надсилається в незмінному вигляді, коли розробник його розробив, тому немає можливості викреслити коментарі. Коментований // // стиль вимагає як символу //, так і рядка рядка, щоб зберегти синтаксичну правильність.

Так, міні-фієри існують, і так, JavaScript дозволяє цей тип коментарів. Javascript також дозволяє eval (), тому я не думаю, що ми хочемо сприймати це як модель.


3
Ця відповідь взагалі не має жодного сенсу. "Немає можливості викреслити коментар" - звичайно, є, коментар викреслений аналізатором точно так само, як і в будь-якій іншій мові. Інакше як CSS міг мати /* */коментарі?
ЖакБ

Я мав на увазі сторонніх посередників між дизайнером та споживачем. Компілятор - це цей посередник у зібраних мовах. "Парсер", на який ви посилаєтесь, - це підсистема браузера, кінцевого споживача вмісту.
Майкл Блекберн

То чому не //можемо розібрати коментарі, коли він може викреслити /* */?
ЖакБ

1
Він міг би, але тоді він повинен шукати як //, так і стрічковий канал, а канали рядків мають переважно семантичний зміст, а не синтаксичний. CSS як розроблений, трактує всі пробіли однаково. Для підтримки // у вас є "спеціальний" пробіл, а також, що "спеціальний" пробіл може бути одним символом (\ n), а може бути двома (\ r \ n).
Майкл Блекберн

3
@MichaelBlackburn: DSSSL (який є попередником CSS, використовуючи синтаксис S-виразів), також має однорядкові коментарі. Це не має нічого спільного з імперативом проти декларативних мов.
ЖакБ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.