Jump to content
  • 0

Идентификаторы и классы


PavelTkachev
 Share

Question

Иногда при использовании класса или идентификатора стили не применяются. Но если добавить к нему имя тега, то стили применяются

 

#Имя_идентификатора { Описание правил стиля } - не работает

 

E#Имя_идентификатора { Описание правил стиля } - работает

 

Пример показать не могу, периодически при вёрстке сталкиваюсь. Такое бывает, когда несколько стилей применяется к одному элементу. Это потому что у второй записи больший приоритет?

Link to comment
Share on other sites

16 answers to this question

Recommended Posts

  • 0

на сколько я понимаю, данная ситуация может возникнуть только с классами, т.к. id - уникален.

например тегам: <p> <div> и <table> вы задаете класс .test и даете какое-то общее описание:

.test {

width: 300px;

border: 1px solid #000;

}

но для <p> к примеру бордер не нужен, тогда как раз будет такая запись:

p.test {

border: none;

}

Link to comment
Share on other sites

  • 0

При неаккуратном обращении с каскадом всё может быть. Напр., если сгоряча повесить стиль на все ссылки единственного главного меню как #mainmenu a {...}, то чтобы потом выделить в нем единственную текущую ссылку, просто #currentlink будет мало — понадобится #mainmenu #currentlink или хотя бы a#currentlink (при условии, что он ниже по коду, чем #mainmenu a). Собственно, в этом и есть главное коварство каскада для новичков...

Link to comment
Share on other sites

  • 0

При неаккуратном обращении с каскадом всё может быть. Напр., если сгоряча повесить стиль на все ссылки единственного главного меню как #mainmenu a {...}, то чтобы потом выделить в нем единственную текущую ссылку, просто #currentlink будет мало — понадобится #mainmenu #currentlink или хотя бы a#currentlink (при условии, что он ниже по коду, чем #mainmenu a). Собственно, в этом и есть главное коварство каскада для новичков...

А почему сгоряча? Я так всегда и делаю и всегда такую проблему и имею. :unsure:

 

А как сделать иначе?

Link to comment
Share on other sites

  • 0

 

При неаккуратном обращении с каскадом всё может быть. Напр., если сгоряча повесить стиль на все ссылки единственного главного меню как #mainmenu a {...}, то чтобы потом выделить в нем единственную текущую ссылку, просто #currentlink будет мало — понадобится #mainmenu #currentlink или хотя бы a#currentlink (при условии, что он ниже по коду, чем #mainmenu a). Собственно, в этом и есть главное коварство каскада для новичков...

А почему сгоряча? Я так всегда и делаю и всегда такую проблему и имею. :unsure:

 

А как сделать иначе?

 

А зачем вы сразу же используете id для оформления? Почему бы вместо него не использовать класс?

Link to comment
Share on other sites

  • 0
А зачем вы сразу же используете id для оформления? Почему бы вместо него не использовать класс?

 

У меня есть два довода:

1. class - 5 символов; id - 2 символа. Значит во втором случае существует экономия трафика.

2. id - уникальный идентификатор, поэтому при рендеринг страницы должен происходить быстрее, а также JavaScript с ним быстрее работает, чем с классом.

 

То, что классы - это для верстальщиков, а идентификаторы - для программистов: для меня не аргумент.

Edited by PavelTkachev
Link to comment
Share on other sites

  • 0
экономия трафика

Экономия трафика — это gzip, всё остальное на его фоне — экономия на спичках (см. предпоследний раздел).

 

 

поэтому при рендеринг страницы должен происходить быстрее

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

 

 

а также JavaScript с ним быстрее работает, чем с классом

 

Только при «ванильном» обращении через document.getElementById, при этом в современных браузерах getElementByClassName и querySelector (на котором основан jQuery) тоже оптимизированы с хорошим запасом для любых разумных целей (если скрипту приходится циклом перебирать десятки тысяч айдишек, с этим скриптом явно что-то не так, а в менее искусственных случаях вы едва ли заметите разницу).

 

 

То, что классы - это для верстальщиков, а идентификаторы - для программистов: для меня не аргумент.

Нет ли здесь противоречия с предыдущим пунктом?

 

По итогу: использование ID вместо класса дает крайне мало ощутимых плюсов, но ощутимо запутывает/усложняет поддержку CSS. И оно вам надо? 

Link to comment
Share on other sites

  • 0
Лёх, это была шутка? Если нет, то объясни плз
 

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

вот когда у него в проекте начнут дублироваться блоки на странице, когда программер а цикле повесит на #id_count обработчик, когда "посыпется" верстка, тогда он сам поймет в чем его ошибка.

 

а пока что, на первых парах, пускай делает так как считает правильным!

Link to comment
Share on other sites

  • 0

 

Лёх, это была шутка? Если нет, то объясни плз
 

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

вот когда у него в проекте начнут дублироваться блоки на странице, когда программер а цикле повесит на #id_count обработчик, когда "посыпется" верстка, тогда он сам поймет в чем его ошибка.

 

а пока что, на первых парах, пускай делает так как считает правильным!

 

Ааа, понял)) А я уж было испугался)) А так я с тобой полностью согласен. Доказывать человеку, который не воспринимает другие мнения вообще, только время терять на пустоту. Плавали, знаем :)

Link to comment
Share on other sites

  • 0
Пиши #id, не слушай ни кого, все делаешь правильно!

 

Все и всегда всё делают правильно. Так как правильно - это в соответствии с каким-то правилом. Правила разные, а в остальном всё и всегда правильно.


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

 

 

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

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
Answer this question...

×   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