Благодаря Хольцшлаг в твиттере , я узнал , что был проект редактора из CSS переменных .
Позвольте мне сначала сказать, что я думаю, что это здорово, что W3C берет это на себя. Я думаю, что переменные в CSS в конечном итоге будут хорошей вещью. Это позволит легко использовать цвета и другие свойства CSS. Это сделает большое количество избыточности уйти. Это уменьшит размер CSS-файлов и, следовательно, уменьшит количество ошибок.
При этом у меня есть серьезная претензия к реализации — одним словом «данные».
Смотрите, вот как CSS-переменные должны работать в соответствии с проектом.
Я создаю свойство в корне с именем «data-header-color».
:root { data-header-color: #06c; }
Затем, чтобы обратиться к этому цвету в другом месте, я использую конструкцию, которая выглядит как функция с именем «data ()», чтобы получить его следующим образом:
h1 { background-color: data(header-color); }
Насколько я могу судить, единственное объяснение в проекте, почему это так, это то, что он пытается соответствовать спецификации HTML для «данных» :
Присвоение имен здесь основано на форме пользовательских атрибутов данных в HTML5. Однако, как здесь определено, синтаксис для использования переменных отличается от синтаксиса для определения переменных (то есть data-foo для определения, data (foo) для использования). Некоторые считают, что синтаксис должен совпадать, используя функциональный синтаксис в обоих случаях. Другие предложили использовать префиксный символ вместо функционального синтаксиса (например, $ foo) как для свойства, так и для использования.
Ну, по крайней мере, они знают, что некоторые могут возразить против этого формата. Итак, позвольте мне добавить свой голос. Я возражаю . Переменные — довольно стандартная конструкция, люди знают, как они работают. Заставьте их работать как переменные в других языках. У меня есть несколько причин здесь:
- Два разных синтаксиса для создания и потребления кажется сбивающим с толку
- Похоже, вы вызываете функцию, но это не так. Вы ссылаетесь на переменную. Это сбивает с толку.
- CSS и HTML не имеют много совпадений в синтаксисе, почему добавление некоторых хорошо?
Я предпочитаю, чтобы я мог просто использовать простые старые слова в качестве переменной, а затем использовать их как простые старые слова. При этом я буду в порядке с префиксным символом, например, $, если речь идет о какой-то проблеме синтаксического анализа.
Это моя главная проблема с черновиком, но у меня есть еще одна проблема с поведением недопустимых переменных. Например, если вы установите поле на #FFFFFF. В основном, если у вас есть этот код:
p { background-color: red; } p { background-color: "Behold I am not a valid color at ALL!!!!" }
Тогда p выходит красным, но если у вас есть этот код:
:root { data-not-a-color: "Behold I am not a valid color at ALL!!!!" } p { background-color: red; } p { background-color: data(not-a-color); }
Р выходит прозрачным.
Такое изменение поведения может быть довольно запутанным. Объяснение имеет некоторый смысл:
Недопустимая концепция времени вычисляемого значения существует, потому что переменные не могут «рано завершиться», как другие синтаксические ошибки, поэтому к тому времени, когда пользовательский агент понимает, что значение свойства недопустимо, оно уже выбрасывает другие каскадные значения. Я думаю, что «attr ()» также должен полагаться на него, так как его поведение почти идентично переменным.
Но я полагаю, что это то, что производители браузеров могут обрабатывать, контролируя поведение «отбрасывания других каскадных значений». Они могут удерживать каскадные значения, пока не будут выполнены вычислительные переменные. Но, может быть, я что-то здесь упускаю. Но также стоит подумать, не облегчит ли это недействительный CSS. Я сомневаюсь в этом, но пока браузер не реализует их, будет трудно определить, так ли это.
Так или иначе. Хорошая новость заключается в том, что это черновик редактора, а не рекомендация. Это означает, что сейчас самое время начать анализировать эту спецификацию и комментировать ее. Так что ты думаешь?
Помимо черновиков W3C
Важно отметить, что «Рабочий проект» является довольно ранней стадией процесса рекомендаций W3C.
W3C выполняет эти шаги при представлении технического отчета в Рекомендацию.
- Публикация первого общественного рабочего проекта.
- Объявление о последнем звонке.
- Призыв к реализации.
- Призыв к рассмотрению предлагаемой рекомендации.
- Публикация в качестве рекомендации.
Я считаю, что в данный момент мы находимся между шагами 1 и 2. Также актуально:
Цель: публикация первого общественного рабочего проекта является сигналом для сообщества, чтобы начать рассмотрение документа.
Чтобы было ясно, мы должны комментировать на этом этапе.