Антон В.
1807 сообщений
#15 лет назад
Цитата ("intelleks"):
Имхо: при вёрстке класс для множественных объектов (например, "заголовки" - их много), id - для уникальных (например, "навигационная колонка" - она одна).


Собственно, в этом и был мой вопрос - зачем забивать себе голову уникальностью/не_уникальностью объектов на странице, при этом теоретически усложняя жизнь программисту, если можно просто не париться и везде юзать классы?
Евгений О.
2989 сообщений
#15 лет назад
На яндексе была хорошая статья на эту тему. Адрес, к сожалению, не помню.
Смысл ее очень простой. Надо стремиться цеплять стили через класс, а id использовать для привязки к объекту в программном коде. Собственно нового там ничего нет, это повторение спецификации и рекомендаций по ее использованию.

Реально же лучший вариант по моему мнению - цепляем стили через класс и, если какой-то объект имеет собственные отличия от стиля класса, дописываем особенности через id.
Что-то вроде такого:
.myclass {
color: #000000;
background-color: #FFFFFF;
font-size:12px;
}
.myclass #id1{
color: #FF0000;
}
.myclass #id2{
font-size:20px;
}
Антон В.
1807 сообщений
#15 лет назад
elosoft, в целом красиво, но мне кажется, это слишком "локальный" вариант, то есть где-то очень даже прокатит, а где-то нет, будет ограничивать свободу мысли и действия программиста......и опять же, ничего не мешает юзать классы, и оставить в покое айдишники



.myclass {
color: #000000;
background-color: #FFFFFF;
font-size:12px;
}
.myclass .item1{
color: #FF0000;
}
.myclass .item2{
font-size:20px;
}





хотя согласен, что в некотором локальном случае это - самое красивое решение
Евгений О.
2989 сообщений
#15 лет назад
nehovaysyatopol, это все по обстоятельствам. через класс мы цепляем всех, кто этот класс использует. это не всегда допустимо или удобно. а через id цеплемся к конкретному тэгу.
Антон В.
1807 сообщений
#15 лет назад
elosoft, ну как я и сказал - в каком-то локальном случае это наилучший вариант, но не везде будет в тему
Евгений О.
2989 сообщений
#15 лет назад
nehovaysyatopol, так везде и не надо. надо указать свойства для группы объектов - лучше использовать класс, а для модификации только 1 - наверное лучше id. когда классы в css файле исчисляютя сотнями - это тоже не подарок.
Михаил В.
2195 сообщений
#15 лет назад
elosoft, статья о которой вы говорите и ее развитие происходит тут:
Цитата:
если какой-то объект имеет собственные отличия от стиля класса, дописываем особенности через id

Это ошибочный подход, который провоцирует рост мусора в css.
Евгений О.
2989 сообщений
#15 лет назад
Статья вот эта
Где-то там было еще на эту тему, только более общее.
Цитата ("Sir_Michael"):
Это ошибочный подход, который провоцирует рост мусора в css.

А почему вписывание id в css - это мусор, а вписывание еще одного класса в код и css - это не мусор?
Антон В.
1807 сообщений
#15 лет назад
Sir_Michael, интересная статья, спасибо за ссылку.....понравилась вот эта цитата:

"В развивающемся проекте (развивающийся = не тот, который сделали один раз и забыли) постоянно происходит переосмысление внешнего вида и функциональности и никогда нельзя быть увереным, что элемент, который казалось бы встречается на странице только один раз завтра не будет встречаться много."
Антон В.
1807 сообщений
#15 лет назад
Цитата ("elosoft"):
Статья вот эта
Где-то там было еще на эту тему, только более общее.
Цитата ("Sir_Michael"):
Это ошибочный подход, который провоцирует рост мусора в css.

А почему вписывание id в css - это мусор, а вписывание еще одного класса в код и css - это не мусор?


ну а зачем вообще айдишники там нужны? .....есть специфкации, стандарты, здравый смысл в конце-концов....давайте придумаем еще какой-нибудь третий способ идентификации элементов, и его тоже будем использовать, css-ка вообще тогда будет похожа на радугу-дугу....
Михаил В.
2195 сообщений
#15 лет назад
elosoft, собственно по вашей ссылке они и рассказывают про yacf который стал БЭМ.
Цитата:
А почему вписывание id в css - это мусор, а вписывание еще одного класса в код и css - это не мусор?

Перекрытие и специфичность (id имеет более высокий приоритет). Пример, сегодня прописали перекрытие цвета через id, а завтра внутри этого id подэлементу нужно задать другой цвет. Итог - css растет и становится нечитаемым.
Евгений О.
2989 сообщений
#15 лет назад
Цитата ("Sir_Michael"):
Пример, сегодня прописали перекрытие цвета через id, а завтра внутри этого id подэлементу нужно задать другой цвет.

Вот где ошибка. Id может использоваться для стилей, но не должен задаваться для стилей. Id задается для того, чтобы быстро и однозначно программно найти тэг на странице. И, если он уже задан, то его можно использовать и в стилях.
Михаил В.
2195 сообщений
#15 лет назад
elosoft,
Цитата:
если он уже задан, то его можно использовать и в стилях.

Как раз ошибка в этом. Смотрите на проблему шире. Над одним проектом необязательно работает только один верстальщик и необязательно только один программист.
Верстка должна быть всегда готова к тому, чтобы в работу включился абсолютно посторонний человек.
Евгений О.
2989 сообщений
#15 лет назад
Цитата ("Sir_Michael"):
Верстка должна быть всегда готова к тому, чтобы в работу включился абсолютно посторонний человек.

И в чем проблема? Ему все равно придется смотреть хотя бы по html-коду страницы где какие классы вписаны. Id он так же посмотреть не может? А потом задавайте осмысленные значения, например, id="form_login". Если кто-то увидив в css #form_login не догадается что речь идет о форме авторизации, то я думаю для него уже все равно будет где, что и как написано и используется.
Михаил В.
2195 сообщений
#15 лет назад
elosoft, опять все с самого начала. id="form_login" завтра может стать id="form_login1", потому что программисту так понадобилось. И он расстроится если поедет верстка.
Программиста не должны касаться проблемы верстальщика, а верстальщик не должен знать что значат какие-то id'шки программиста. И верстальщиков и программистов в одном проекте может быть несколько человек.
Евгений О.
2989 сообщений
#15 лет назад
Цитата ("Sir_Michael"):
id="form_login" завтра может стать id="form_login1", потому что программисту так понадобилось. И он расстроится если поедет верстка.

При таком подходе любое обсуждение бессмысленно. Сегодня программист поменял id который использовался в css, завтра верстальщик поменял class в css который был прописан в скриптах и т.д. и т.п. Вся эта ситуация никак не относится ни к программисту, ни к верстальщику, а чисто организационный вопрос. Это надо либо оговаривать в ТЗ на разработку (где какие id и class применять и как их именовать), либо программист и верстальщик должны работать вместе.
Михаил В.
2195 сообщений
#15 лет назад
Цитата:
Сегодня программист поменял id который использовался в css

Именно поэтому и не нужно использовать id в css
Цитата:
завтра верстальщик поменял class в css который был прописан в скриптах

И поэтому же программисту лучше работать с id, а не классами.

О чем и говорилось изначально, и о том же пишут технологи Яндекса.
Евгений О.
2989 сообщений
#15 лет назад
Цитата ("Sir_Michael"):
И поэтому же программисту лучше работать с id, а не классами.

Да собственно я тоже самое говорю .
Кстати в javascript даже нет функции доступа через класс.
Но реально это может быть связано с серьезными трудностими.
Пример: на странице есть 100 чекбоксов с разными id, name и одним классом. Со всеми надо что-то сделать, ну скажем скрыть/показать с анимацией используя jquery. Как в этом случае должен поступить программист?
Михаил В.
2195 сообщений
#15 лет назад
Задать id родителю. Но jquery отдельный разговор, вся библиотека построена на взаимодействии с селекторами.
Евгений О.
2989 сообщений
#15 лет назад
Цитата ("Sir_Michael"):
Задать id родителю. Но jquery отдельный разговор, вся библиотека построена на взаимодействии с селекторами.

А при чем тут родитель? В нем могут быть и чекбоксы которыми не нужно управлять. Вы предлагаете писать 100 условий?
И почему jquery отдельный вопрос? Это обычный javascript и работает как и все остальное. То, что он скрывает от вас часть обработки, ничего не меняет.