В CSS какая разница между «.» и «#» при объявлении набора стилей?

220

В чем разница между #и .при объявлении набора стилей для элемента, и какая семантика вступает в игру при решении, какой из них использовать?

Sam152
источник

Ответы:

337

Да, они разные ...

#это селектор идентификатора , используемый для целевых одного конкретного элемента с уникальным идентификатором, но. это селектор класса, используемый для нацеливания нескольких элементов с определенным классом. Другими словами:

  • #foo {}будет стилизовать единственный элемент, объявленный с атрибутомid="foo"
  • .foo {}будет стилизовать все элементы с атрибутом class="foo"(вы также можете назначить несколько классов элементу, просто разделите их пробелами, например class="foo bar")

Типичное использование

Вообще говоря, вы используете # для стилизации того, что, как вы знаете, будет появляться только один раз, например, такие как макеты верхнего уровня, такие как боковые панели, области баннеров и т. Д.

Классы используются в тех случаях, когда стиль повторяется, например, если вы используете специальную форму заголовка для сообщений об ошибках, вы можете создать стиль, h1.error {}который будет применяться только к<h1 class="error">

специфичность

Другой аспект, в котором селекторы отличаются, заключается в их специфике - селектор идентификатора считается более конкретным, чем селектор класса. Это означает, что там, где стили конфликтуют с элементом, те, которые определены с более конкретным селектором, будут переопределять менее специфичные селекторы. Например, учитывая <div id="sidebar" class="box">любые правила для #sidebarс переопределением конфликтующих правил для.box

Узнайте больше о CSS селекторах

В разделе « Учебное пособие» приведены более полезные учебники по CSS-селекторам - они невероятно мощные, и если ваша концепция заключается просто в том, что «# используется для DIV-файлов», вам лучше узнать, как именно использовать CSS более эффективно.

РЕДАКТИРОВАТЬ: Похоже, что Selectutorial, возможно, пошел на большой веб-сайт в небе, поэтому вместо этого попробуйте эту ссылку архива .

Пол Диксон
источник
2
Я полагаю, что большинство браузеров, если вы (неверно) укажете несколько элементов с одинаковым идентификатором, применят правило с селектором идентификатора ко всем этим элементам.
Майлз
1
@Miles верен - я думаю, что более правильно сказать / # / предназначается для атрибута "ID", а /./ предназначается для "класса". Хотя ID должен быть уникальным, движок CSS не проверяет это и не заботится.
Рекс М
@Rex M - Полезно, если для одного элемента он не может иметь более одного идентификатора, независимо от того, уникален он или нет. Я попробовал это под Firefox и элементы с двумя идентификаторами игнорируются. Однако элементы могут иметь несколько классов.
Усаги
Является ли div.sidebar тем же, что и div #sidebar?
Али Гаджани
Ссылка на Учебное пособие плохая :(
Zeek2
28

#Означает , что он совпадает с idэлементом. Знак .обозначает имя класса:

<div id="myRedText">This will be red.</div>
<div class="blueText">this will be blue.</div>


#myRedText {
    color: red;
}
.blueText {
    color: blue;
}

Обратите внимание, что в документе HTML атрибут id должен быть уникальным , поэтому, если у вас есть более одного элемента, нуждающегося в определенном стиле, вы должны использовать имя класса.

nickf
источник
10

Точка ( .) обозначает имя класса, а hash ( #) обозначает элемент с определенным атрибутом id . Класс будет применяться к любому элементу, украшенному этим конкретным классом, в то время как стиль # будет применяться только к элементу с этим конкретным идентификатором.

Название класса:

<style>
   .class { ... }
</style>

<div class="class"></div>
<span class="class></span>
<a href="..." class="class">...</a>

Именованный элемент:

<style>
   #name { ... }
</style>

<div id="name"></div>
tvanfosson
источник
«названный элемент» вводит в заблуждение
Бобби Джек,
@Bobby - как вы это называете, когда даете элементу идентификатор - «идентифицируете» его?
tvanfosson
Я согласен с Бобби - элементы могут иметь как имя, так и идентификатор. Что вы называете такими элементами?
Джон Макколлум
8

Стоит также отметить , что в каскаде , идентификатор ( #) селектор является более конкретным , чем AB ( .селектор). Следовательно, правила в операторе id переопределяют правила в операторе класса.

Например, если оба следующих утверждения:

.headline {
  color:red;
  font-size: 3em;
}

#specials {
  color:blue;
  font-style: italic;
}

применяются к одному и тому же элементу HTML:

<h1 id="specials" class="headline">Today's Specials</h1>

цвет: синий правило будет переопределить цвет: красный правило.

Янс Картон
источник
6

Несколько быстрых расширений на том, что уже было сказано ...

idДолжен быть уникальным, но вы можете использовать один и тот же идентификатор , чтобы сделать различные стили более конкретны.

Например, учитывая этот фрагмент HTML:

<div id="sidebar">
    <h2>Heading</h2>
    <ul class="menu">
        ...
    </ul>
</div>
<div id="content">
    <h2>Heading</h2>
    ...
</div>
<div id="footer">
    <ul class="menu">
        ...
    </ul>
</div>

Вы можете применять разные стили с этими:

#sidebar h2
{ ... }

#sidebar .menu
{ ... }

#content h2
{ ... }

#footer .menu
{ ... }


Еще одна полезная вещь: вы можете иметь несколько классов в элементе, разделяя их пробелами ...

<ul class="main menu">...</ul>
<ul class="other menu">...</ul>

Что позволяет вам иметь общие стили .menuс конкретными стилями, используя .main.menuи.sub.menu

.menu
{ ... }

.main.menu
{ ... }

.other.menu
{ ... }
Питер Боутон
источник
4

.class предназначается для следующего элемента:

<div class="class"></div>

#class предназначается для следующего элемента:

<div id="class"></div>

Обратите внимание, что идентификатор ДОЛЖЕН быть уникальным во всем документе, в то время как любое количество элементов может совместно использовать класс.

Бобби Джек
источник
4

Как почти все уже заявили:

Точка ( .) указывает на класс , а хэш ( #) указывает на идентификатор .

Принципиальное отличие заключается в том, что вы можете многократно использовать класс на своей странице, тогда как идентификатор можно использовать один раз. Это, конечно, если вы придерживаетесь стандартов WC3.

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

Также полезно отметить, что свойства идентификатора заменят свойства класса.

Андерс
источник
2

# Является селектором идентификатора. Соответствует только элементам с совпадающим идентификатором. Следующее правило стиля будет соответствовать элементу, который имеет атрибут id со значением «green»:

#green {color: green}

Смотрите http://www.w3schools.com/css/css_syntax.asp для получения дополнительной информации

tehvan
источник
-2

Вот мой подход к объяснению правил .styleи они #styleявляются частью матрицы. что если они не в правильном порядке, они могут перекрывать друг друга или вызывать конфликты.

Вот состав.

матрица

#style 0,0,1,0 id

.style 0,1,0,0 class

если вы хотите переопределить эти два, вы можете использовать <style></style>witch с уровнем матрицы, или 1,0,0,0. запрос @media перезапишет все выше ... Я не уверен в этом, но я думаю, что селектор идентификаторов #может использоваться только один раз на странице.

Питер Группелаар
источник