Стиль класс: Стили и классы

Содержание

Style Класс (System.Windows) | Microsoft Learn

  • Ссылка

Определение

Пространство имен:
System.Windows
Сборка:
PresentationFramework.dll

Важно!

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

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

public ref class Style : System::Windows::Threading::DispatcherObject, System::Windows::Markup::IAddChild, System::Windows::Markup::INameScope
public ref class Style : System::Windows::Threading::DispatcherObject, System::Windows::Markup::IAddChild, System::Windows::Markup::INameScope, System::Windows::Markup::IQueryAmbient
[System.Windows.Localizability(System.Windows.LocalizationCategory.Ignore)]
[System.Windows.Markup.ContentProperty("Setters")]
[System.Windows.Markup.DictionaryKeyProperty("TargetType")]
public class Style : System.Windows.Threading.DispatcherObject, System.Windows.Markup.IAddChild, System.Windows.Markup.INameScope
[System.Windows.Localizability(System.Windows.LocalizationCategory.Ignore)]
[System.Windows.Markup.ContentProperty("Setters")]
[System.Windows.Markup.DictionaryKeyProperty("TargetType")]
public class Style : System.Windows.Threading.DispatcherObject, System.Windows.Markup.IAddChild, System.
Windows.Markup.INameScope, System.Windows.Markup.IQueryAmbient
[<System.Windows.Localizability(System.Windows.LocalizationCategory.Ignore)>]
[<System.Windows.Markup.ContentProperty("Setters")>]
[<System.Windows.Markup.DictionaryKeyProperty("TargetType")>]
type Style = class
    inherit DispatcherObject
    interface INameScope
    interface IAddChild
[<System.Windows.Localizability(System.Windows.LocalizationCategory.Ignore)>]
[<System.Windows.Markup.ContentProperty("Setters")>]
[<System.Windows.Markup.DictionaryKeyProperty("TargetType")>]
type Style = class
    inherit DispatcherObject
    interface INameScope
    interface IAddChild
    interface IQueryAmbient
[<System.Windows.Localizability(System.Windows.LocalizationCategory.Ignore)>]
[<System.Windows.Markup.ContentProperty("Setters")>]
[<System.Windows.Markup.DictionaryKeyProperty("TargetType")>]
type Style = class
    inherit DispatcherObject
    interface IAddChild
    interface INameScope
    interface IQueryAmbient
Public Class Style
Inherits DispatcherObject
Implements IAddChild, INameScope
Public Class Style
Inherits DispatcherObject
Implements IAddChild, INameScope, IQueryAmbient
Наследование

Object

DispatcherObject

Style

Атрибуты

LocalizabilityAttribute ContentPropertyAttribute DictionaryKeyPropertyAttribute

Реализации

IAddChild INameScope IQueryAmbient

Примеры

В следующем примере показано объявление стиля, которое влияет на Background свойство Controlобъекта .

<Style x:Key="Style1">
  <Setter Property="Control.Background" Value="Yellow"/>
</Style>

Чтобы применить приведенный выше стиль, сделайте следующее:

<Label Content="Yellow Background" />

Стили также можно применять ко всем элементам заданного типа с помощью TargetType свойства . Добавление целевого типа в стиль означает, что вам больше не нужно полностью определять свойство, которое вы задаете с помощью синтаксиса ClassName.PropertyName . В следующем примере определяется стиль, который будет применяться к каждому TextBlock элементу.

<Style TargetType="{x:Type TextBlock}">
  <Setter Property="FontFamily" Value="Segoe Black" />
  <Setter Property="HorizontalAlignment" Value="Center" />
  <Setter Property="FontSize" Value="12pt" />
  <Setter Property="Foreground" Value="#777777" />
</Style>

Примечание

Многие элементы управления WPF состоят из сочетания других элементов управления WPF, поэтому создание стиля, применяемого ко всем элементам управления типа, может иметь широкие последствия. Например, если вы создаете стиль, предназначенный для TextBlock элементов управления в Canvas, стиль применяется ко всем TextBlock элементам управления на холсте TextBlock , даже если является частью другого элемента управления, например ListBox.

Сведения о том, как расширить или наследовать от определенного стиля, см. на BasedOn странице .

Можно задать для любого элемента, производного Style от FrameworkElement или FrameworkContentElement. Стиль чаще всего объявляется как ресурс внутри Resources раздела. Так как стили — это ресурсы, они подчиняются тем же правилам области, которые применяются ко всем ресурсам, поэтому объявление стиля влияет на его применение. Например, если вы объявляете стиль в корневом элементе XAML-файла определения приложения, стиль можно использовать в любом месте приложения. Если вы создаете приложение навигации и объявляете стиль в одном из XAML-файлов приложения, стиль можно использовать только в этом XAML-файле. Дополнительные сведения о правилах определения области для ресурсов см.

в разделе Ресурсы XAML.

Объявление стиля состоит из Style объекта , содержащего коллекцию из одного или нескольких Setter объектов. Каждый из них Setter состоит из Property и Value. Свойство — это имя свойства элемента, к который должен применяться стиль. После объявления стиля как ресурса на него можно ссылаться так же, как и на любой другой ресурс.

Примечание

Если в коллекции задается несколько наборов с одним и тем же Property значением свойства, используется метод задания, объявленный последним. Аналогичным образом, если задать значение для того же свойства в стиле и непосредственно в элементе, значение, заданное в элементе, имеет приоритет напрямую.

Модель стилей и шаблонов Windows Presentation Foundation (WPF) позволяет обслуживать и совместно использовать внешний вид, а также разделение представления и логики. Модель стилей и шаблонов включает набор функций, позволяющих настраивать пользовательский интерфейс. Этот набор функций включает в себя класс , Style а также следующее:

  • Trigger

  • EventTrigger и Storyboard

  • ControlTemplate

  • DataTemplate

Более подробную информацию см. в разделе Стилизация и использование шаблонов.

Конструкторы

Style()

Инициализирует новый экземпляр класса Style.

Style(Type)

Инициализирует новый экземпляр класса Style для использования с заданным объектом Type.

Style(Type, Style)

Инициализирует новый экземпляр класса Style для использования с указанным Type, основанный на заданном Style.

Свойства

BasedOn

Возвращает или задает определенный стиль, являющийся основой текущего стиля.

Dispatcher

Возвращает объект Dispatcher, с которым связан этот объект DispatcherObject.

(Унаследовано от DispatcherObject)
IsSealed

Возвращает значение, указывающее, доступен ли стиль только для чтения.

Resources

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

Setters

Возвращает коллекцию объектов Setter и EventSetter.

TargetType

Возвращает или задает тип, для которого предназначен данный стиль.

Triggers

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

Методы

CheckAccess()

Определяет, имеет ли вызывающий поток доступ к этому DispatcherObject.

(Унаследовано от DispatcherObject)
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Возвращает хэш-код для модуля чтения данных Style.

GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
RegisterName(String, Object)

Регистрирует новую пару имя-объект в текущей области имен.

Seal()

Блокирует этот стиль и все фабрики и триггеры, чтобы их нельзя было изменить.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
UnregisterName(String)

Удаляет из области видимости имен сопоставление имя-объект.

VerifyAccess()

Обеспечивает наличие у вызывающего потока доступ к этому DispatcherObject.

(Унаследовано от DispatcherObject)

Явные реализации интерфейса

IAddChild.AddChild(Object)

Добавляет дочерний объект.

IAddChild.AddText(String)

Добавляет к объекту текстовое содержимое узла.

INameScope.FindName(String)

Возвращает объект с предоставленным идентифицирующим именем.

IQueryAmbient.IsAmbientPropertyAvailable(String)

Запрашивает, доступно ли заданное внешнее свойство в текущей области.

Применяется к

См.

также раздел
  • Атрибут x:Key
  • Расширение разметки x:Type
  • Общие сведения о образце стилей и шаблонов

Каскад и наследование — Изучение веб-разработки

  • Обзор: Building blocks
  • Далее

Цель этого урока — углубить ваше понимание некоторых основополагающих концепций CSS — каскадов, спецификаций и наследования, — которые контролируют то, как CSS применяется к HTML и как разрешаются конфликты.

Хотя изучение этого урока может показаться менее актуальным и немного более академичным, чем некоторые другие части курса, понимание этих вещей спасёт вас от головной боли в дальнейшем! Мы рекомендуем вам внимательно изучить этот раздел и убедиться, что вы понимаете концепции, перед тем, как двигаться дальше.

Необходимые условия:Базовая компьютерная грамотность, Установка базового ПО, базовые знания работы с файлами, основы HTML (Введение в HTML), и общее представление о том, как работает CSS (Введение в CSS. )
Цель:Изучить понятие о каскаде и специфичности, и как работает наследование CSS.

CSS (Cascading Style Sheets) означает Каскадные Таблицы Стилей и первое слово «каскадные» является невероятно важным для понимания: то, как ведёт себя каскад — ключевой момент в понимании CSS.

В какой-то момент, работая над проектом, вы обнаружите, что CSS, который, по-вашему, должен быть применён к элементу, не работает. Обычно проблема заключается в том, что вы создали два правила, которые могут потенциально применяться к одному и тому же элементу. Каскад и тесно связанная концепция специфичности — это механизмы, которые контролируют, какое именно правило применяется, когда имеется такой конфликт. Стиль вашего элемента может определять не то правило, на которое вы рассчитывали, поэтому вам необходимо понимать, как работают эти механизмы.

Также значимой является концепция наследования, которая заключается в том, что некоторые свойства CSS наследуют по умолчанию значения, установленные для родительского элемента текущего элемента, а некоторые не наследуют. Это также может стать причиной поведения, которое вы, возможно, не ожидаете.

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

Каскад

Каскад таблицы стилей, если говорить упрощённо, означает, что порядок следования правил в CSS имеет значение; когда применимы два правила, имеющие одинаковую специфичность, используется то, которое идёт в CSS последним.

В приведённом ниже примере у нас есть два правила, которые могут применяться к h2. В результате h2 окрасится синим цветом — эти правила имеют идентичный селектор и, следовательно, одинаковую специфичность, поэтому побеждает последний в порядке следования.

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

Специфичность определяет, как браузер решает, какое именно правило применяется в случае, когда несколько правил имеют разные селекторы, но, тем не менее, могут быть применены к одному и тому же элементу. Различные типы селекторов ( селекторы элементов h2{...}, селекторы классов, селекторы идентификаторов и т.д ) имеют разной степени влияние на элементы страницы. Чем более общее влияние оказывает селектор на элементы страницы тем меньше его специфичность, конкретность. По существу, это мера того, насколько специфическим будет отбор по селектору:

  • Селектор элементов ( например h2 ) менее специфичен — он выберет все элементы этого типа на странице — поэтому получит меньше баллов.
  • Селектор класса более специфичен — он выберет только те элементы на странице, которые имеют конкретное значение атрибута class — поэтому получит больше баллов, селектор класса применится после селектора элемента и поэтому перекроет его стили.

Например. Как указано ниже, у нас опять есть два правила, которые могут применяться к h2. h2 в результате будет окрашен красным цветом — селектор класса даёт своему правилу более высокую специфичность, поэтому он будет применён, несмотря на то, что правило для селектора элемента расположено ниже в таблице стилей.

Позже мы объясним, как сделать оценку специфичности, и прочие детали.

Наследование

Наследование также надо понимать в этом контексте — некоторые значения свойства CSS, установленные для родительских элементов наследуются их дочерними элементами, а некоторые нет.

Например, если вы установили значение color и font-family для элемента, то каждый элемент внутри него также будет иметь этот цвет и шрифт, если только вы не применили к ним напрямую стиль с другим цветом и шрифтом.

Некоторые свойства не наследуются — например, если вы установили для элемента width равным 50%, все его дочерние элементы не получат ширину в 50% от ширины своего родительского элемента. Если бы это было так, CSS было бы чрезвычайно трудно использовать!

Примечание: На страницах справочника CSS-свойств вы можете найти окно технической информации, обычно в конце раздела спецификации, в котором перечислены некоторые технические данные об этом свойстве, в том числе наследуется оно или нет. Например, здесь: color property Specifications section (en-US).

Эти три концепции вместе определяют, какая CSS применяется и к какому элементу; в следующих разделах мы увидим, как они взаимодействуют. Это может показаться сложным, но вы начнёте лучше понимать их по мере приобретения опыта работы с CSS, и вы всегда можете обратиться к справочной информации, если что-то забыли. Даже опытные разработчики не помнят всех деталей!

Видео ниже показывает, как вы можете использовать Firefox DevTools для проверки каскада стилей, спецификации, и т.д. на странице:

Итак, наследование. В примере ниже мы имеем <ul> с двумя уровнями неупорядоченных списков, вложенных в него. Мы установили для внешнего <ul> стиль границы, внутренние отступы и цвет шрифта.

Цвет шрифта применён к прямому потомку, но также и к непрямому потомку — к прямому потомку <li> и к элементам внутри первого вложенного списка. Далее мы добавили класс special ко второму вложенному списку и применили к нему другой цвет шрифта. Теперь это свойство наследуется всеми его потомками.

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

Какие свойства наследуются по умолчанию, а какие нет, чаще всего определяется здравым смыслом.

Контроль наследования

CSS предоставляет четыре специальных универсальных значения свойства для контроля наследования. Каждое свойство CSS принимает эти значения.

inherit

Устанавливает значение свойства, применённого к элементу, таким же, как у его родительского элемента. Фактически, это «включает наследование».

initial

Устанавливает значение свойства, применённого к выбранному элементу, равным initial value этого свойства (в соответствии с настройками браузера по умолчанию. Если в таблице стилей браузера отсутствует значение этого свойства, оно наследуется естественным образом.)

unset (en-US)

Возвращает свойству его естественное значение, что означает, что если свойство наследуется естественным образом, оно действует как inherit, иначе оно действует как initial.

Примечание: Существует также более новое значение revert, которое имеет ограниченную поддержку браузерами.

Примечание: Смотрите Origin of CSS declarations в [Page not yet written] для более подробной информации о каждом из них, и о том, как они работают.

Можно посмотреть список ссылок и изучить, как работают универсальные значения. Пример, следующий ниже, позволяет вам поиграть с CSS и увидеть, что происходит, когда вы вносите изменения. Подобные эксперименты с кодом — лучший способ освоить HTML и CSS.

Например:

  1. Второй элемент списка имеет класс my-class-1. Таким образом, цвет для следующего вложенного элемента a устанавливается по наследству. Как изменится цвет, если это правило будет удалено?
  2. Понятно ли, почему третий и четвёртый элементы a имеют именно такой цвет? Если нет, перечитайте описание значений, представленное выше.
  3. Какая из ссылок изменит цвет, если вы зададите новый цвет для элемента <a> — например: a { color: red; }?

Возврат всех исходных значений свойств

Стенографическое свойство CSS all можно использовать для того, чтобы присвоить одно из значений наследования к (почти) всем свойствам одновременно. Это одно из четырёх значений (inherit, initial, unset, или revert). Это удобный способ для отмены изменений, внесённых в стили, для того, чтобы вы могли вернуться к стартовой точке перед внесением новых изменений.

В примере ниже имеются два блока <blockquote>. Первый имеет стиль, который применён к самому элементу blockquote, второй имеет класс fix-this, который устанавливает значение all в unset.

Попробуйте установить для all ещё одно из доступных значений и исследуйте, в чём заключается разница.

Теперь мы понимаем, почему параграф, следующий по глубине в структуре HTML документа, имеет тот же цвет, что CSS применяет к body, а вводные уроки дали понимание того, как изменить применение CSS к чему-либо в любой точке документа — или назначить CSS элементу, или создать класс. Теперь рассмотрим подробнее то, как каскад определяет выбор CSS-правил, применяемых в случае влияния на стиль элемента нескольких объектов.

Вот три фактора, перечисленные в порядке возрастания важности. Следующий отменяет предыдущий.

  1. Порядок следования
  2. Специфичность
  3. Важность

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

Порядок следования

Мы уже видели, какое значение для каскада имеет порядок следования. Если у вас несколько правил, которые имеют одинаковую важность, то побеждает правило, которое идёт последним в CSS. Другими словами, правила, более близкие к самому элементу, переписывают более ранние, пока последнее не победит, оно и стилизует элемент.

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

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

Как мы видели ранее в этом уроке, селектор класса имеет больший вес, чем селектор элемента, поэтому свойства, определённые в классе, будут переопределять свойства, применённые непосредственно к элементу.

Здесь следует отметить, что, хотя мы думаем о селекторах и правилах, применяемых к объекту, который они выбирают, переписывается не всё правило, а только свойства, которые являются одинаковыми.

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

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

Степень специфичности, которой обладает селектор, измеряется с использованием четырёх различных значений (или компонентов), которые можно представить как тысячи, сотни, десятки и единицы — четыре однозначные цифры в четырёх столбцах:

  1. Тысячи: поставьте единицу в эту колонку, если объявление стиля находится внутри атрибута style (встроенные стили). Такие объявления не имеют селекторов, поэтому их специфичность всегда просто 1000.
  2. Сотни: поставьте единицу в эту колонку за каждый селектор ID, содержащийся в общем селекторе.
  3. Десятки: поставьте единицу в эту колонку за каждый селектор класса, селектор атрибута или псевдокласс, содержащийся в общем селекторе.
  4. Единицы: поставьте общее число единиц в эту колонку за каждый селектор элемента или псевдоэлемент, содержащийся в общем селекторе.

Примечание: Универсальный селектор (*), комбинаторы (+, >, ~, ») и псевдокласс отрицания (:not) не влияют на специфичность.

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

СелекторТысячиСотниДесяткиЕдиницыСпецифичность
h200010001
h2 + p::first-letter00030003
li > a[href*="en-US"] > .inline-warning00220022
#identifier01000100
Без селектора, с правилом внутри атрибута style элемента.10001000

Прежде чем мы продолжим, давайте посмотрим на пример в действии.

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

  • Первые два правила конкурируют за стилизацию цвета фона ссылки — второе выигрывает и делает фоновый цвет синим, потому что у него есть дополнительный селектор ID в цепочке: его специфичность 201 против 101.
  • Третье и четвёртое правило конкурируют за стилизацию цвета текста ссылки — второе выигрывает и делает текст белым, потому что, хотя у него на один селектор элемента меньше, отсутствующий селектор заменяется на селектор класса, который оценивается в десять вместо единицы. Таким образом, приоритетная специфичность составляет 113 против 104.
  • Правила 5–7 соревнуются за определение стиля границы ссылки при наведении курсора. Шестой селектор со специфичностью 23 явно проигрывает пятому со специфичностью 24 — у него в цепочке на один селектор элемента меньше. Седьмой селектор, однако, превосходит как пятый, так и шестой — он имеет то же количество подселекторов в цепочке, что и пятый, но один элемент заменён селектором класса. Таким образом, приоритетная специфичность 33 против 23 и 24.

Примечание: Это был условный пример для более простого усвоения. В действительности, каждый тип селектора имеет собственный уровень специфичности, который не может быть замещён селекторами с более низким уровнем специфичности. Например, миллион соединённых селекторов класса не способны переписать правила одного селектора id.

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

!important

Существует специальный элемент CSS, который вы можете использовать для отмены всех вышеперечисленных вычислений, однако вы должны быть очень осторожны с его использованием — !important. Он используется, чтобы сделать конкретное свойство и значение самыми специфичными, таким образом переопределяя нормальные правила каскада.

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

Давайте пройдёмся по этому примеру, чтобы увидеть, что происходит — попробуйте удалить некоторые свойства, чтобы увидеть, что получится, если вам трудно понять:

  1. Вы увидите, что применены значения color (en-US) и padding третьего правила, но background-color — нет. Почему? Действительно, все три безусловно должны применяться, потому что правила, более поздние в порядке следования, обычно переопределяют более ранние правила.
  2. Однако вышеприведённые правила выигрывают, потому что селекторы классов имеют более высокую специфичность, чем селекторы элементов.
  3. Оба элемента имеют class с названием better, но у второго также есть id с названием winning. Поскольку ID имеют ещё более высокую специфичность, чем классы (у вас может быть только один элемент с каждым уникальным ID на странице, но много элементов с одним и тем же классом — селекторы ID очень специфичны, на что они и нацелены), красный цвет фона и однопиксельная чёрная граница должны быть применены ко 2-му элементу, причём первый элемент получает серый фоновый цвет и отсутствие границы, как определено классом.
  4. 2-й элемент получил красный цвет фона и отсутствие границы. Почему? Из-за объявления !important во втором правиле — размещение которого после border: none означает, что это объявление перевесит значение границы в предыдущем правиле, даже если ID имеет более высокую специфичность.

Примечание: Единственный способ переопределить объявление !important – это включить другое объявление !important в правило с такой же специфичностью позже или в правило с более высокой специфичностью.

Полезно знать о существовании !important, чтобы вы понимали, что это такое, когда встретите в чужом коде. Тем не менее, мы настоятельно рекомендуем вам никогда не использовать его, если в этом нет острой необходимости. !important меняет обычный порядок работы каскада, поэтому он может серьёзно затруднить отладку проблем CSS, особенно в большой таблице стилей.

Одна из ситуаций, в которой вам, возможно, придётся это использовать, — это когда вы работаете с CMS, где вы не можете редактировать модули CSS ядра, и вы действительно хотите переопределить стиль, который нельзя переопределить другим способом. Но, вообще говоря, не стоит использовать этот элемент, если можно этого избежать.

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

Конфликтующие объявления будут применяться в следующем порядке, с учётом замены более ранних более поздними:

  1. Объявления в таблицах стилей клиентского приложения (например, стили браузера по умолчанию, используемые, когда не заданы другие стили).
  2. Обычные объявления в пользовательских таблицах стилей (индивидуальные стили устанавливаются пользователем).
  3. Обычные объявления в авторских таблицах стилей (это стили, установленные нами, веб-разработчиками).
  4. Важные объявления в авторских таблицах стилей.
  5. Важные объявления в пользовательских таблицах стилей.

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

Мы охватили много тем в этой статье. А вы смогли запомнить наиболее важную информацию? Можете пройти несколько дополнительных тестов для того чтобы убедиться в том, что вы усвоили эту информацию, прежде чем пойдёте дальше — смотрите Test your skills: the Cascade.

Если вы поняли большую часть этой статьи, отлично — вы начали знакомиться с фундаментальными механизмами CSS. Далее мы рассмотрим селекторы подробно.

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

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

  • Обзор: Building blocks
  • Далее
  1. Каскад и наследование
  2. Селекторы CSS
    • Селекторы типа, класса и ID
    • Селекторы атрибута
    • Псевдоклассы и псевдоэлементы
    • Комбинаторы
  3. Модель коробки (The box model)
  4. Фон и границы
  5. Обработка разных направлений текста
  6. Переполнение содержимого
  7. Значения и единицы измерения
  8. Изменение размеров в CSS
  9. Элементы изображений, форм и медиа-элементы
  10. Стилизация таблиц
  11. Отладка CSS
  12. Организация вашей CSS

Found a content problem with this page?

  • Edit the page on Github.
  • Report the content issue.
  • View the source on GitHub.

Want to get more involved? Learn

how to contribute.

This page was last modified on by MDN contributors.

Полное руководство, 4-е издание)

HTML и XHTML: Полное руководство, 4-е издание

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

8.3.1. Регулярные занятия

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

 <стиль>

 

Сначала обратите внимание на то, что определение класса — это просто вопрос добавления имени класса, разделенного точкой, в качестве суффикса к тегу имя в качестве селектора в правиле стиля. В отличие от XHTML-совместимого селектор, который является именем стандартного тега и должен быть в в нижнем регистре, имя класса может быть любой последовательностью букв, цифр, и дефисы, но должны начинаться с буквы.[53] Осторожно, регистр имеет значение, так что эта абстракция не то же самое, что Абстрактный. А классы, как и селекторы, могут быть включены с другими селекторами, разделенными запятыми, как в третьем пример. Единственным ограничением на классы является то, что они не могут быть вложенный: p.equation.centered не допускается, для пример.

[53]Из-за его поддержка таблиц стилей JavaScript, Netscape не может обрабатывать class имена, которые совпадают с ключевыми словами JavaScript. Класс «abstract», например, генерирует ошибку в Нетскейп.

Соответственно, первое правило в примере создает класс стили абзаца с именем «абстрактный», текст которого будет курсивом и с отступом от левого и правого полей на полсантиметра. Точно так же второй абзац style-class «уравнение» указывает браузеру центрировать текст и чтобы использовать шрифт Symbol для отображения текста. Последнее правило стиля создает стиль с текстом по центру и полями в полсантиметра, применение этого стиля ко всем заголовкам первого уровня, а также создание класс тега

с именем в центре этого стиля.

Чтобы использовать определенный класс тега, вы добавляете атрибут class к тегу, как в этом примере, как отображается в Internet Explorer на рис. 8-2:

 

Это абстрактный абзац. Видите, как сдвинуты поля?

Абзац с уравнением следует

а = б + 1

Текст этого абзаца должен располагаться по центру.

Рис. 8-2. Используйте классы, чтобы различать разные стили для одного и того же тега

Для каждого абзаца значение класса атрибут — это имя класса, который будет использоваться для этого тега.

8.3.2. Общие классы

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

 .italic {стиль шрифта: курсив} 

создает общий класс с именем курсив. Чтобы использовать его, просто включите его имя в атрибут класса. Так, например, используйте

или

для создания курсивного абзаца или заголовок.

Общие классы очень удобны и позволяют легко применять определенный стиль для широкого круга тегов. Netscape Navigator и Internet Explorer поддерживает общие классы CSS2.

8.3.3. ID Classes

Почти весь HTML теги принимают атрибут id, который назначает идентификатор элемента, уникального в документе. Этот идентификатор может быть целью URL-адреса, используемого автоматизированным документом инструменты обработки, а также может использоваться для указания правила стиля для элемент.

Чтобы создать класс стиля, который можно применять с id, используйте тот же синтаксис, что и для классы стилей, за исключением символа # перед имя класса вместо точки. Этот стиль создает такие классы:

 <стиль>

 

В вашем документе вы можете использовать

, чтобы создать синий заголовок, или добавить id=yellow почти для любого тега, чтобы сделать его желтым.

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

Использование классов, определенных таким образом, имеет существенный недостаток: значение атрибута id должно быть уникальным в пределах документа. Вы не можете легально повторно использовать class, хотя браузер может позволить вам обойтись без него.

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

8.3.4. Псевдоклассы

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

Существует семь псевдоклассов, три из которых явно связанный с тегом .

8.3.4.1. Псевдоклассы гиперссылок

популярный Браузеры, совместимые с CSS2, различают три специальных состояния для гиперссылок, созданных Тег : не посещаемый, посещаемый и посетил. Браузер может изменить внешний вид тега содержимого, чтобы указать его состояние, например, с подчеркиванием или цветом. С помощью псевдоклассов вы можете контролировать, как эти состояния получаются. отображается путем определения стилей для a:link (не посещено), a:active (посещено) и а: посетил.

Псевдокласс :link управляет внешним видом ссылки, которые не выбраны пользователем и еще не были посетил. Псевдокласс :active определяет появление ссылок, которые в данный момент выбраны пользователем и находятся обрабатывается браузером. : посетил псевдокласс определяет те ссылки, которые уже были посещены Пользователь.

Чтобы полностью определить все три состояния <а> тег, вы можете написать:

 a:ссылка {цвет: синий}
а: активный {цвет: красный; вес шрифта: полужирный}
a: посетили {цвет: зеленый} 

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

8.3.4.2. Псевдоклассы взаимодействия

CSS2 стоять определяет два новых псевдокласса, которые наряду с :active, относятся к действиям пользователя и советуют интерактивный агент, такой как браузер, как отображать затронутые элемент, когда пользователь взаимодействует с элементом. Другими словами, эти два псевдокласса являются динамическими: hover и фокус.

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

 a:hover {цвет: желтый} 

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

Точно так же псевдокласс :focus позволяет изменить стиль для элемента, когда он становится объектом внимания. Ан элемент может быть в фокусе, когда вы переходите к нему, щелкаете по нему или, в зависимости от браузера переместите на него курсор. Независимо от того, как фокус попал на элемент, правила стиля, связанные с Псевдокласс фокуса применяется только тогда, когда элемент имеет фокус.

8.3.4.3. Вложенные и языковые псевдоклассы

Новый CSS2: первый ребенок псевдокласс позволяет указать, как элемент может отображаться, когда он является первым дочерним элементом содержащего элемента. Например, следующее правило выбирает только те абзацы, которые являются первыми дитя дивизии; промежуточных элементов быть не может. Тогда и только тогда текстовое содержимое абзаца будет отображаться в курсив:

 div > p:first-child {font-style: italic} 

Соответственно, первый абзац в следующем фрагменте HTML будет отображаться курсивом в браузере, совместимом с CSS2, поскольку это первый дочерний элемент своего подразделения. И наоборот, второй абзац идет после заголовка уровня 2, который является первым дочерним элементом второго разделение. Итак, этот второй абзац в примере отображается в обычный текст, потому что это не первый дочерний элемент его подразделения:

 <дел>
  

Я могу быть выделен курсивом.

<дел>

Новый раздел

Я в простом тексте, потому что мой абзац является вторым потомком раздела.

Наконец, стандарт CSS2 определяет новый псевдокласс, который позволяет выберите элемент на основе его языка. Например, вы можете включить атрибут lang=fr в тег

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

 div:lang(it) {font-family: Roman} 

говорит, что текст в разделах документа, содержащих итальянский язык должен использовать семейство латинских шрифтов. Уместно, не ты думаешь? Обратите внимание, что вы указываете язык в скобках сразу после ключевого слова lang. Используйте тот же двухбуквенный код стандарта ISO для псевдокласса :lang, как и для атрибута lang. Раздел 3.6.1.2, «Атрибут lang»

8.3.4.4. Браузерная поддержка псевдоклассов

Ни один из популярных браузеров не поддерживает :lang, :first-child или :focus псевдоклассов пока нет. Все популярные браузеры поддерживают :link, :активный и :посещенный псевдоклассы для тега гиперссылки (). Несмотря на то, что :active также может использоваться для других элементы, ни один из браузеров пока не поддерживает приложения, выходящие за рамки тег <а>. :наведите псевдокласс отлично подходит для специальных эффектов на ссылки и другие элементов, но поддерживает его только Internet Explorer и только для гиперссылки.

8.3.5. Смешивание классов

Вы можете смешивать псевдоклассы с обычными классами, добавляя имя псевдокласса на имя класса селектора. Например, Вот несколько правил, определяющих простые, нормальные и причудливые якоря:

 a. plain:link, a.plain:active, a.plain:visited {цвет: синий}
a: ссылка {цвет: синий}
a: посетил {цвет: зеленый}
a: активный {цвет: красный}
a.fancy: ссылка {стиль шрифта: курсив}
a.fancy:посетил {стиль шрифта: обычный}
a.fancy:active {начертание шрифта: полужирный; размер шрифта: 150%} 

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

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

8.3.6. Наследование класса

Классы наследуют свойства стиля их общий базовый тег. Например, все свойства равнины Тег

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

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


8.2. Синтаксис стиля 8.4. Свойства стиля

Copyright © 2002 O’Reilly & Associates. Все права защищены.

Компонент React StyleClass

StyleClass декларативно управляет классами css во время анимации входа/выхода или просто для переключения классов элемента.

Переключить класс
Анимации

Содержимое

Импорт через модуль
импортировать { StyleClass } из 'primereact/styleclass';
Импорт через CDN
   
Приступая к работе

Требуемая опора nodeRef должна быть привязана к ссылке цели, которая является элементом DOM. StyleClass имеет два режима, toggleClassName , чтобы просто добавить-удалить класс и ввести/выйти из анимации.

ToggleClass