Jump to content

Вот так новость от W3C HTML WG!


SelenIT
 Share

Recommended Posts

Насчет именованных констант (и кто назвал их переменными?) согласен со Светланой, они нужны (пары "цвет — фон" или "размер — соответствующий отступ", что часто встречается при прижатии футера, удобно редактировать в одном месте). Насчет генерации контента скорее соглашусь с Great Rash — вещь спорная (особенно без единообразия в обработке такого контента — напр., нумерации заголовков или кавычек вокруг цитат — при копировании из браузеров в буфер и т.п.). Имхо, генерация как таковая была бы уместнее в разметке (какой-нибудь атрибут типа counted, особенно пригодился бы для заголовков в новой модели секционирования из HTML5), а в CSS хватило бы привязки для оформления результата генерации. Но вот генерация оформительских блоков (не участвующих в DOM и практически не сказывающихся на ней, но позволяющих применять к себе оформительские эффекты независимо от основного блока) — это мега-здорово. Пожалуй, двух таких блоков на элемент (:before и :after) порой бывает маловато...

Link to comment
Share on other sites

Насчет генерации контента скорее соглашусь с Great Rash — вещь спорная (особенно без единообразия в обработке такого контента — напр., нумерации заголовков или кавычек вокруг цитат — при копировании из браузеров в буфер и т.п.).

Именно единообразия (а лучше — четкого описания в стандарте необходимого поведения) для полного счастья мне и не хватает.

Ну и :before:before, :before:after и т. д. тоже можно :)

Link to comment
Share on other sites

Я так и не понял чем переменные лучше. Представим код с переменными (синтаксис не знаю, поэтому напишу абстрактно):


@var {
red: 'color: red';
borderRed: 'border: red 1px solid';
backgroundBrown 'background: brown';
}

.red-border {
@var red;
@var borderRed;
}

.red-border-background {
@var red;
@var borderRed;
@var backgroundBrown;
}

.background-border {
@var borderRed;
@var backgroundBrown;
}

Где тут плюсы? Вместо раздувания HTML мы раздуем CSS. В чем смысл?

Link to comment
Share on other sites

Я так и не понял чем переменные лучше. Представим код с переменными (синтаксис не знаю, поэтому напишу абстрактно):


@var {
red: 'color: red';
borderRed: 'border: red 1px solid';
backgroundBrown 'background: brown';
}

.red-border {
@var red;
@var borderRed;
}

.red-border-background {
@var red;
@var borderRed;
@var backgroundBrown;
}

.background-border {
@var borderRed;
@var backgroundBrown;
}

Где тут плюсы? Вместо раздувания HTML мы раздуем CSS. В чем смысл?

Плюсы в том, что CSS нормально кешируется, а редактировать значение придется в одном месте в случае изменения.

Link to comment
Share on other sites

Great Rash, не, с переменными константами чуть иначе:


@variables {
ThemeColorLight: #fe8d12;
ThemeColorDark: #000033;
FooterHeight: 100px;
}

.content {
background-color: var(ThemeColorLight);
color: var(ThemeColorDark);
padding-bottom: var(FooterHeight);
}

.footer {
background-color: var(ThemeColorDark);
color: var(ThemeColorLight);
height: var(FooterHeight);
position: absolute;
bottom: 0;
}

Link to comment
Share on other sites

А HTML не кешируется чтоль? На счет замены в одном месте соглашусь, все же удобно.

Упрощенно: можно собрать стили для всего сайта в один файл, который ляжет у пользователя в кеш и не будет загружаться при каждом обновлении страницы/переходе. При этом переход на другую страницу сайта, естественно, вызовет загрузку HTML-кода этой страницы, как и простоте обновление. Стили подтянутся из кеша.

Link to comment
Share on other sites

Сдвиг по фазе у того, кто назвал константы @variables :). Наверное, влияние XSLT сказалось, хотя там роль переменных совсем другая, и с точки зрения ФП они действительно переменные. Но в CSS пока по факту единственное, где они действительно могут меняться — это для разных @media. Может, к релизу спеки какой-нибудь порядок наведут...

Кстати, что забавно, ценой небольшого вывиха пары извилин подобное практически осуществимо и на технологиях вчерашнего-сегодняшнего дня :)

P.S. Черновик спеки про переменные цитирую по этому изданию — ничего актуальнее, увы, не нашел.

Link to comment
Share on other sites

Пффф... как сказал s0rr0w WHATWG те еще отморозки. Чую наворотят они дел еще... Back to USSR 90's

Они не отморозки. Они просто не понимают, зачем они все это делают. Я уже вижу, что CSS3 будет в 5-10 раз сложнее для восприятия, чем предыдущая версия. А это значит, что для поддержки и разработки нужно будет тратить больше времени. Пока что я не увидел ничего такого, что было бы суперполезным и мегапрорывом.

Можно развить эту идею дальше:

<p class="redtext graybackground font18px verdana underlined">…

Это очень неплохая идея, я вам скажу. Особенно на больших проектах. Наследование играет очень злую шутку.

Насчет именованных констант (и кто назвал их переменными?) согласен со Светланой, они нужны

Еще один...


@variables {
ThemeColorLight: #fe8d12;
ThemeColorDark: #000033;
FooterHeight: 100px;
}

.content {
background-color: var(ThemeColorLight);
color: var(ThemeColorDark);
padding-bottom: var(FooterHeight);
}

@variables {
ThemeColorLight: #fff;
ThemeColorDark: #000;
}

.footer {
background-color: var(ThemeColorDark);
color: var(ThemeColorLight);
height: var(FooterHeight);
position: absolute;
bottom: 0;
}

Внимание, вопрос, чему должно быть равно значение .content background-color?

А почему именно это значение?

Не боюсь, даже где-то в глубине души хочу :)

А я не хочу. Зачем из CSS делать еще один язык программирования?

Link to comment
Share on other sites

Внимание, вопрос, чему должно быть равно значение .content background-color?

По той спеке, что я видел — скорее всего, либо ничему, дефолту (поскольку объявление должно идти раньше всех правил, т.е. в примере явная ошибка), либо, на худой конец, значению из первого блока (второй блок стоит не на месте и не должен на что-либо влиять, а значения переменных в DOM — readonly). Но правильная спека должна явно разруливать такие вопросы.

Зачем из CSS делать еще один язык программирования?

Для логики представления достаточно удобно, на такие вещи, как подгонка под размеры окна или смену ориентации айфона/айпада, его декларативный синтаксис ложится удобнее, чем увешивание объекта окна скриптовыми обработчиками (имхо). Да и менюшки выпадающие многоуровневые на нем вон уже сколько лет программи фигачат... :)

Link to comment
Share on other sites

Можно развить эту идею ещё дальше:


<font color="red" bgcolor="gray" size="5" face="verdana"><u>…

Если сверху <?xml version="1.0"?>, то все ок. :)

По той спеке, что я видел — скорее всего, либо ничему, дефолту (поскольку объявление должно идти раньше всех правил, т.е. в примере явная ошибка), либо, на худой конец, значению из первого блока (второй блок стоит не на месте и не должен на что-либо влиять, а значения переменных в DOM — readonly). Но правильная спека должна явно разруливать такие вопросы.

Выше или нет, это пофиг. Берем проект, который состоить из нескольких файлов, которые для определенных случаев подгружаются в разных порядках. И декларацию в одном месте не сделать по каким-либо причинам. Все, константы не будут работать. И ловить баги отсутствия переопределения или его присутствия - это будет еще то занятие. Проще вообще не использовать, чем использовать такой костыль.

Для логики представления достаточно удобно, на такие вещи, как подгонка под размеры окна или смену ориентации айфона/айпада, его декларативный синтаксис ложится удобнее, чем увешивание объекта окна скриптовыми обработчиками (имхо). Да и менюшки выпадающие многоуровневые на нем вон уже сколько лет программи фигачат... :)

Это и без переменных можно сделать. В чем профит?

Link to comment
Share on other sites

ловить баги отсутствия переопределения или его присутствия - это будет еще то занятие
Так и без переменных констант частенько приходится ловить баги шального переопределения стилей. Если кто-то любит трудности и создает себе причины, мешающие нормальному структурированию CSS и подгрузке базовых вещей (вроде того же reset-а, например) в самом начале — флаг в руки, физкульт-привет и счастливой отладки :). Эта проблема — проблема архитектуры конкретного проекта, а не констант или CSS вообще (хотя своих проблем у CSS и масса).
Это и без переменных можно сделать. В чем профит?
Профит в краткости записи и легкости модификаций. Но примеры были вообще к тому, что не так уж далек и нынешний CSS от программирования, как можно подумать.

Впрочем, переменные — не философский камень, чтоб так из-за них спорить. Будут (повсеместно, единообразно и надежно) — замечательно, не будут — переживем и без них. А в свете сабжа, похоже, скоро и всякие гриды, флексибоксы и "ASCII-арт для компоновки" тоже тихо уйдут, так и не став востребованными...

Link to comment
Share on other sites

Они не отморозки. Они просто не понимают, зачем они все это делают. Я уже вижу, что CSS3 будет в 5-10 раз сложнее для восприятия, чем предыдущая версия. А это значит, что для поддержки и разработки нужно будет тратить больше времени. Пока что я не увидел ничего такого, что было бы суперполезным и мегапрорывом.

Это очень неплохая идея, я вам скажу. Особенно на больших проектах. Наследование играет очень злую шутку.

Я знаю. Но именно такая запись выглядит абсурдно. От наследования уходим чуть более красивыми способами (но лишь чуть более красивыми). Хотя наследование — возможность, применяемая браузером, Отключить ее не получится все равно, тут просто на нее не полагаемся. Ну и уходим от селекторов вложенности, что тоже бывает полезно.

Еще один…

Внимание, вопрос, чему должно быть равно значение .content background-color?

А почему именно это значение?

А какая разница, если поведение стандартизировано и предсказуемо?

Большинство проблем происходит от неопределенности. Если все будут вести себя одинаково, то основная масса проблем будет решена продуманной архитектурой.

А я не хочу. Зачем из CSS делать еще один язык программирования?

Не язык программирования, а язык оформления. Просто более мощный чем то, что сейчас. Сколь-нибудь серьезную логику поведения все равно в нем не задашь, а базовую логику оформления — так это то, что надо.

Link to comment
Share on other sites

Так и без переменных констант частенько приходится ловить баги шального переопределения стилей.

Ну так зачем еще больше усугублять ситуацию?

Профит в краткости записи и легкости модификаций. Но примеры были вообще к тому, что не так уж далек и нынешний CSS от программирования, как можно подумать.

Краткость записи - это экономия на спичках. Легкость модификации можно сделать и записав просто

h1, .important, blockquote { color: red }

Итак, что выигрываем?

Впрочем, переменные — не философский камень, чтоб так из-за них спорить. Будут (повсеместно, единообразно и надежно) — замечательно, не будут — переживем и без них. А в свете сабжа, похоже, скоро и всякие гриды, флексибоксы и "ASCII-арт для компоновки" тоже тихо уйдут, так и не став востребованными...

Зачем создавать изначально мертвый механизм с сомнительной полезностью? В CSS есть разделы, работы над которыми хватит на ближайшие пару лет.

А какая разница, если поведение стандартизировано и предсказуемо?

Большинство проблем происходит от неопределенности. Если все будут вести себя одинаково, то основная масса проблем будет решена продуманной архитектурой.

Проблема не в интерпретации, проблема в логике построения. Переменная может переопределяться для всех стилей сразу, не важно в каком месте была декларация. А может и влиять только на те декларации, которые находятся до следующего переопределения. Управлять стиями через DOM станет головной болью. Сейчас не особо весело, но ситуация будет еще хуже.

Не язык программирования, а язык оформления. Просто более мощный чем то, что сейчас. Сколь-нибудь серьезную логику поведения все равно в нем не задашь, а базовую логику оформления — так это то, что надо.

Из него делают именно язык программирования. Потому что спецификацию пишут не кодеры, а программеры.

Link to comment
Share on other sites

Зачем создавать изначально мертвый механизм с сомнительной полезностью? В CSS есть разделы, работы над которыми хватит на ближайшие пару лет.

Одно другому мешать не должно.

Вообще, проблемой это начал считать совсем недавно, но когда оцениваешь полезность того или иного аспекта стандарта, смотришь с точки зрения применимости либо к крупным, либо к мелким проектам (в зависимости от того, над какими сейчас работаешь).

И вот для не слишком крупных и мелких проектов переменные меня бы несколько раз могли выручить, тогда как в крупных все не так радужно.

А разработчикам стандартов стоит учитывать применимость в задачах разного масштаба.

Так что для мелких проектов такую возможность я по-прежнему считаю полезной.

Link to comment
Share on other sites

Итак, что выигрываем?

Вариант с заменой в одном месте цвета заголовка и фона какой-нибудь плашки указанным способом не реализуется, единое регулирование размера и отступа под него — тоже. Да и вообще у такой группировки с разносом разных свойств одного блока по десятку мест читабельность еще та, экономим на одном за счет другого. Переменные могли бы легко решить эту проблему без большого усложнения, ничего на самом деле не усугубляя. Хотя и способов "отстрелить себе ногу" они тоже добавят — увы, оборотная сторона почти любого прогресса.

Управлять стиями через DOM станет головной болью.

По-моему хуже точно не будет. Весь нынешний бардак останется как есть, но добавится единообразная возможность обращаться к готовым переменным вместо нудного конструирования значений по частям (эти вечные "+'px'"), а также достаточно ясный механизм создания/обновления этих переменных (действие которых автоматом применится ко всему сайту). Т.е. опционально разнести разные виды работы со стилями в два более-менее независимых слоя. По-моему, может оказаться удобно (особенно там, где нужно поменять большую кучу свойств у кучи элементов сразу, а классов на все ситуации не заготовишь)...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy