Разница между использованием MULTIPLE атрибутов 'id' и 'class' в HTML и CSS
В соответствии с принципами CSS, когда мы хотим реализовать повторное использование стилей, мы должны использовать class
атрибут и когда мы знаем, что есть уникальный элемент во всей структуре DOM, мы должны использовать id
атрибут этого элемента, а затем укажите стиль.
Но в эту эпоху веб-приложений структура DOM может быть слишком сложной, и существует вероятность дублирования id
, Лучший пример будет #title
, Его название, которое может появиться в любом месте документа. Теперь лучшая часть, если я использую #title
или же .title
при определении стилей (при условии, что они появились более одного раза и имеют разного родителя), вывод, который генерирует CSS, одинаков. Этот jsfiddle поможет вам понять, что я имею в виду http://jsfiddle.net/dewbot/LGAQD/
У меня сложилось впечатление, что так же, как JS Renderer, CSS Parser останавливает итерацию, когда обнаруживает первый #title
но этого не происходит, он продолжает итерацию, пока не достигнет EOF, как class
, Так что возникает вопрос, почему мы должны использовать несколько class
и не id
?
4 ответа
Так что возникает вопрос, почему мы должны использовать несколько
class
и неid
?
Поскольку в спецификации HTML так сказано, нарушение правил часто приводит к нарушению кода.
Имеет ли смысл идентифицировать несколько элементов по одному и тому же идентификатору? Думаю, нет. Вот для чего нужны классы: классифицировать похожие элементы.
Теперь лучшая часть, если я использую
#title
или же.title
при определении стилей (при условии, что они появились более одного раза и имеют разного родителя), вывод, который генерирует CSS, одинаков.
Это естественное поведение, а не ошибка в любых браузерах, которые делают это как таковые. Тем не менее, это не тот тип поведения, на который вы должны полагаться, так как он имеет дело с несоответствующей разметкой, что обычно плохо.
У меня сложилось впечатление, что так же, как JS Renderer, CSS Parser останавливает итерацию, когда обнаруживает первый
#title
но этого не происходит, он продолжает итерацию, пока не достигнет EOF, какclass
,
Теперь это неправильно. Синтаксические анализаторы CSS выполняют сопоставление селекторов для каждого элемента: они не берут правило и просматривают DOM, применяя его к любым соответствующим элементам; вместо этого они берут каждый элемент и пытаются сопоставить его с максимально возможным количеством правил. Работая таким образом, синтаксический анализатор не знает, используется ли идентификатор в другом месте документа, и не заботится об этом. Это просто соответствует тому, что говорит элемент. Этот ответ охватывает его более подробно.
Пока элемент имеет определенный идентификатор, он должен совпадать с любыми селекторами идентификаторов, которые ищут этот конкретный идентификатор. Таким образом, ожидается, что парсеры будут сопоставлять любые и все элементы с данным идентификатором с одним селектором идентификатора, даже если в HTML неправильно иметь несколько элементов с одинаковым идентификатором. Другими словами, CSS не обеспечивает уникальность идентификаторов, которая требуется для HTML. Этот ответ объясняет.
С учетом всего вышесказанного, суть заключается в следующем: назначать идентификатор только одному элементу за раз и использовать классы для группировки нескольких похожих элементов. Не пытайтесь быть умным и нарушать правила.
Я думаю, что вы неправильно проанализировали CSS. Браузер не перебирает строку файла CSS за строкой и применяет стили к элементам в файле HTML, это наоборот. Браузер анализирует HTML и всякий раз, когда находит class
или же id
атрибут, он ищет его в файлах CSS. (Это очень упрощено, но помогает понять суть).
Просто потому, что браузер отображает его правильно, если у вас есть несколько id
s не означает, что вы должны это сделать. Стандарт четко говорит о том, что id
должен быть уникальным.
Вы сами на это ответили.
CSS применяет его ко всем id
с и class
Если это можно найти. Но JS/ jQuery будет реализовывать его первым найденным.
Итак, ваш вопрос становится:
Должен ли я применять то же самое id
много элементов для манипуляции JS? Ответ: Baaaaa.... D решение
Должен ли я применять то же самое id
Есть много элементов для CSS? Ответ: все еще плохо, решение! но будет реализовывать ваши правила
Вам также следует попытаться использовать правила CSS и JS, применяемые иерархически, таким образом, вы никогда не ошибетесь. Подобно, #Heading div#Title{css rules here}
или же $('#Heading div#Titles')...jQuery rules here
Следующая вещь - попытаться реализовать идентификаторы консервативным способом.
Затем попробуйте предоставить уникальный идентификатор для элемента на вашем веб-сайте / в приложении, а не на одной странице. Это избавит вас от многостраничных служебных скриптов, которые вы включаете в свои страницы.
например: заголовок в верхней части домашней страницы: #Home-Top-Heading
Надеюсь, поможет.
ваш код не пройдет проверку, если вы используете один и тот же идентификатор более чем на одном
CSS не волнует идентификаторы mutliple, javascript