Before css что это
Перейти к содержимому

Before css что это

  • автор:

Псевдоэлемент :before

Псевдоэлемент :before применяется для отображения желаемого контента до содержимого элемента, к которому он добавляется. Работает совместно со свойством content.

Для :before характерны следующие особенности.

  • При добавлении :before к блочному элементу, значение свойства display может быть только: block , inline , none , list-item . Все остальные значения будут трактоваться как block .
  • При добавлении :before к встроенному элементу, display ограничен значениями inline и none . Все остальные будут восприниматься как inline .
  • :before наследует стиль от элемента, к которому он добавляется.

Синтаксис

Значения

HTML5 CSS2.1 IE Cr Op Sa Fx

В данном примере вместо стандартных маркеров списка с помощью псевдоэлемента :before выводится символ ¶. Результат примера продемонстрирован на рис. 1.

Использование псевдоэлемента :before в списках

Рис. 1. Использование псевдоэлемента :before в списках

Браузеры

Opera 9.2 учитывает все пробелы, как если бы они были заключены в тег .

Браузер Firefox до версии 2.0 включительно нестабильно работает с позиционированными элементами, а также не применяет :before к тегу .

Firefox до версии 3.5 не допускает применение к :before свойств position , float , list-style-type и некоторых значений display .

Псевдоэлементы ::after и ::before

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

В примере 1 показано использование псевдоэлемента ::after для добавления текста в конце абзаца.

Пример 1. Применение ::after

Результат примера показан на рис. 1.

Добавление текста к абзацу с помощью ::after

Рис. 1. Добавление текста к абзацу с помощью ::after

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

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

Пример 2. Использование ::before

Результат данного примера показан на рис. 2.

Изменение вида маркеров с помощью ::before

Рис. 2. Изменение вида маркеров с помощью ::before

В данном примере псевдоэлемент ::before устанавливается для селектора li и определяет маркеры списка. Добавление желаемых символов происходит путём задания значения свойства content .

Блок с цитатой

::before и ::after прекрасно подходят для оформления цитат, в частности, вывода увеличенных кавычек, которые показывают пользователям, что перед ними цитата (рис. 3).

Вид цитаты с кавычками

Рис. 3. Вид цитаты с кавычками

Для отображения кавычки перед текстом мы используем ::before , а после текста — ::after . К ним же добавляем и желаемое оформление кавычек, вроде изменения цвета и размера (пример 3).

Пример 3. Кавычки в цитате

Хлебные крошки

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

Хлебные крошки

Рис. 4. Хлебные крошки

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

Пример 4. Хлебные крошки

См. также

  • content
  • quotes
  • relative и absolute
  • Аккордеон меню
  • Анимация ссылок при наведении
  • Атрибуты ссылок
  • Декоративные заголовки
  • Добавление тени
  • Доступность
  • Игра с картинками
  • Использование в вёрстке
  • Не только текст
  • Очистка float
  • Подробнее о позиционировании
  • Псевдоэлемент ::after
  • Псевдоэлемент ::before
  • Псевдоэлементы
  • Работа с кавычками
  • Работа с типографикой
  • Синтаксис CSS
  • Спойлер
  • Текст в HTML
  • Что это такое?

Как использовать CSS ::before и ::after для создания пользовательских анимаций и переходов

Как сделать плавный анимированный переход на сайте без использования специальных библиотек? Урок использования псевдоэлементов CSS для создания эффектов: от анимированной кнопки до карточки профиля. Подходит новичкам.

Чтобы применить на практике методы из статьи, нужно:

  • Базовое понимание HTML.
  • Базовое понимание CSS.
  • Редактор кода и браузер.

Что такое псевдоэлементы

Псевдоэлементы — это селекторы CSS , которые используют для вставки содержимого, которого нет в исходном коде, их используют для стилизации определённой части выбранного элемента. Начинаются они с двойного двоеточия: ::before , ::after , ::placeholder , ::first-letter . В этой статье речь пойдёт только про использование ::before и ::after .

Псевдоэлемент ::before вставляет содержимое перед элементом.

h1::before

Псевдоэлемент ::after вставляет содержимое после элемента.

h1::after

В чём разница между псевдоэлементом и псевдоклассом?

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

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

Синтаксически псевдокласс начинается с двоеточия, а псевдоэлемент — с двойного двоеточия.

Как создать анимацию при помощи псевдоэлементов

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

  • transform
    • translate
    • rotate
    • scale
    • skew

    Если вы и так знаете о них достаточно, переходите сразу к инструкции.

    Transform и Transition

    В этом проекте мы используем свойства transform и transition , так что нужно понимать, что они делают и для чего нужны.

    Transform изначально позволяет двигать, поворачивать, масштабировать и наклонять элемент.

    .box-1 < transform: translate(100px, 100px); >.box-2 < transform: rotate(60deg); >.box-3 < transform: scale(2); >.box-4

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

    Позиционирование с помощью relative и absolute

    Существует несколько свойство CSS, которые помогают контролировать поток документа и положение элемента в документе. В этой статье нам будут интересны только relative и absolute .

    Значение relative

    Relative позволяет контролировать позицию элемента относительно себя в потоке документа. Например, можно перемещать объект, используя его изначальное положение в качестве точки отсчёта:

    .box-2

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

    Значение absolute

    Когда мы задаём элементу значение absolute, CSS удаляет элемент из обычного потока документа, перекрывая другие элементы. Элемент со значением absolute располагается относительно блока со значением позиционирования relative — родительского контейнера.

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

    .parent-container < position: relative; >.box-1 < position: absolute; left: 20px; top: 20px; >.box-2

    Контроль Controlling the stacking order of elements using z-index

    Свойство z-index позволяет накладывать элементы один на другой и менять порядок наложения. Если элемент находится выше по порядку наложения, он появится раньше элемента с низким значением:

    .box-1 < z-index: 1; >.box-2 < z-index: 2; >.box-3 < z-index: 3; >.box-4

    Z-index работает только с элементами, которые были позиционированы с помощью свойства position . Если у двух элементов одинаковый z-index , сверху будет тот, который стоит последним в разметке HTML.

    Создаём анимацию с помощью псевдоэлементов

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

    Создаём тег привязки, который позже применим к кнопке.

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

    Код должен готовить сам за себя — убрали дефолтное подчёркивание, добавили двухпиксельную рамку и перекрасили кнопку в цвет текста. Ещё добавили отступы, чтобы отделить текст от рамки, и скруглили края кнопки при помощи радиуса границы. Добавили длительность перехода — 1 секунду. То есть любое изменение кнопки будет длиться в течение секунда, плавно. Наконец, установили значение relative , потому что внутри кнопки расположим псевдоэлемент. Кнопка станет родительским контейнером, относительно которого будет меняться положение элемента со значением absolute . Вот что получится:

    Пора создать в кнопке псевдоэлемент.

    .btn::before

    Мы создали псевдоэлемент с пустым свойством content , то есть внутри ничего нет. Позиционирование у него со значением absolute , что удаляет элемент из обычного потока документов так, что он перекрывает кнопку, и устанавливает координаты top и left равными нулю. Так пустой псевдоэлемент прикрепляется к кнопке именно в этих местах.

    После устанавливаем ширину и высоту пустого элемента равными 100 % родительского элемента — кнопки.

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

    Как видим, псевдоэлемент перекрывает кнопку — из-за значения absolute свойства position .

    Решим эту задачу, используя z-index , чтобы изменить контекст наложения. Расположим псевдоэлемент за кнопкой при помощи отрицательного значения z-index . Затем используем translate , чтобы передвинуть псевдоэлемент влево на -100%.

    .btn::before < /*. previous code */ z-index: -1; transform: translateX(-100%); >

    Вот что получается:

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

    .btn:hover::before

    По сути, когда на кнопку наводят курсор, псевдоэлемент возвращается к позиции absolute . Вот результат:

    .btn:hover

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

    Последний шаг: применим overflow: hidden к кнопке, чтобы скрыть любой элемент, выходящий за пределы контейнера. Свойство скроет псевдоэлемент, мы увидим его, когда он вернётся в начальную позицию.

    Итак, мы создали анимированную кнопку с помощью псевдоэлемента. Полный код тут.

    Создаём продвинутую анимацию для профиля с помощью множества псевдоэлементов

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

     

    John Doe

    Ceo / Founder

    Мы создали простую карточку div с данными пользователя: именем и должностью.

    Переходим к CSS и изменяем стиль карточки.

    .profile-card < width: 300px; height: 400px; border-radius: 8px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); display: grid; place-items: center; position: relative; background: url("/image.jpg") no-repeat center center/cover; >

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

    Переходим к созданию псевдоэлементов. Это непросто. Нужно использовать четыре псевдоэлемента, но у элемента может быть только один псевдоэлемент ::before и один псевдоэлемент ::after . Чтобы обойти это ограничение, используем саму карточку, чтобы сделать два псевдоэлемента, а потом блок info div внутри карточки, чтобы сделать ещё два. Начнём с info div .

    .info::before

    Поскольку у блока info div нет фиксированной ширины и высоты, псевдоэлемент принимает ширину и высоту родительской карточки.

    Затем мы наклоняем его на 30 градусов и сдвигаем на 100%. Блок сдвигается вправо. Отрицательный индекс гарантирует, что он останется за текстом. Делаем блок полупрозрачным.

    Переходим к следующему псевдоэлементу:

    .info::after

    Сделали примерно то же, что и раньше, только изменили направление наклона на противоположное и добавили тень блока, чтобы имитировать 3D.

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

    .profile-card:hover .info::before < transform: skew(30deg) translateX(50%); >.profile-card:hover .info::after

    Вот что получится:

    Теперь делаем псевдоэлементы для самой карточки.

    .profile-card::before

    Всё уже понятно из кода. Повторяем всё то же, что уже делали, просто передвигаем псевдоэлемент ::before вправо на 85 процентов. Затем создаём последний псевдоэлемент и наклоняем его в другую сторону.

    .profile-card::after

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

    .profile-card:hover:before < transform: skew(30deg) translateX(30%); >.profile-card:hover:after

    Карточка почти готова. Установим свойство overflow как hidden , чтобы спрятать всё, что выходит за края.

    .profile-card < /*. previous code. */ overflow: hidden; >

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

    .info h2, .info p < color: #fff; opacity: 0; transition: all 0.6s; >.profile-card:hover .info h2, .profile-card:hover .info p

    Пока всё. Как видим, псевдоэлементы ::before и ::after помогают разработать анимацию.

    Псевдоэлемент ::before

    Псевдоэлемент ::before применяется для отображения контента до содержимого элемента, к которому он добавляется. Работает совместно со свойством content.

    По умолчанию ::before создаёт строчный элемент.

    Синтаксис

    Селектор::before
    Описание Пример
    Указывает тип значения.
    A && B Значения должны выводиться в указанном порядке. &&
    A | B Указывает, что надо выбрать только одно значение из предложенных (A или B). normal | small-caps
    A || B Каждое значение может использоваться самостоятельно или совместно с другими в произвольном порядке. width || count
    [ ] Группирует значения. [ crop || cross ]
    * Повторять ноль или больше раз. [,]*
    + Повторять один или больше раз. +
    ? Указанный тип, слово или группа не является обязательным. inset?
    Повторять не менее A, но не более B раз.
    # Повторять один или больше раз через запятую. #

    Пример

    В данном примере вместо стандартных маркеров списка с помощью псевдоэлемента ::before выводится символ ¶. Результат примера продемонстрирован на рис. 1.

    Использование псевдоэлемента ::before в списках

    Рис. 1. Использование псевдоэлемента ::before в списках

    Примечание

    В CSS3 псевдоэлементы стали обозначаться двумя двоеточиями, чтобы синтаксис отличался от псевдоклассов. В CSS2 они обозначаются одним двоеточием. Браузеры, как правило, понимают оба синтаксиса.

    Спецификация

    Спецификация Статус
    CSS Transitions Рабочий проект
    CSS Animations Рабочий проект
    Selectors Level 3 Рекомендация
    CSS Level 2 (Revision 1) Рекомендация

    Спецификация

    Каждая спецификация проходит несколько стадий одобрения.

    • Recommendation ( Рекомендация ) — спецификация одобрена W3C и рекомендована как стандарт.
    • Candidate Recommendation ( Возможная рекомендация ) — группа, отвечающая за стандарт, удовлетворена, как он соответствует своим целям, но требуется помощь сообщества разработчиков по реализации стандарта.
    • Proposed Recommendation ( Предлагаемая рекомендация ) — на этом этапе документ представлен на рассмотрение Консультативного совета W3C для окончательного утверждения.
    • Working Draft ( Рабочий проект ) — более зрелая версия черновика после обсуждения и внесения поправок для рассмотрения сообществом.
    • Editor’s draft ( Редакторский черновик ) — черновая версия стандарта после внесения правок редакторами проекта.
    • Draft ( Черновик спецификации ) — первая черновая версия стандарта.

    Браузеры

    :before 8 12 1 4 4 1
    ::before 9 12 5 7 4 1.5
    :before 1 1 4 1
    ::before 1 1 7 1

    В таблице браузеров применяются следующие обозначения.

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

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

    См. также

    • content
    • relative и absolute
    • Декоративные заголовки
    • Добавление текста к шкале
    • Добавление тени
    • Использование в вёрстке
    • Комплексные селекторы
    • Не только текст
    • Подробнее о позиционировании
    • Псевдоэлемент ::after
    • Псевдоэлементы
    • Псевдоэлементы ::after и ::before
    • Спойлер
    • Что это такое?

    Рецепты

    • Как изменить вид маркера списка?
    • Как изменить стиль чисел в списке?
    • Как изменить цвет маркеров в списке?
    • Как размыть фоновую картинку?
    • Как сделать нумерацию русскими буквами?

    Практика

    • Символ в качестве маркера
    • Цвет маркеров

    Справочник CSS

    • !important
    • ::after
    • ::backdrop
    • ::before
    • ::first-letter
    • ::first-line
    • ::marker
    • ::placeholder
    • ::selection
    • :active
    • :blank
    • :buffering
    • :checked
    • :default
    • :dir
    • :disabled
    • :empty
    • :enabled
    • :first-child
    • :first-of-type
    • :focus
    • :focus-within
    • :fullscreen
    • :hover
    • :in-range
    • :indeterminate
    • :invalid
    • :is()
    • :lang()
    • :last-child
    • :last-of-type
    • :link
    • :muted
    • :not()
    • :nth-child()
    • :nth-last-child()
    • :nth-last-of-type()
    • :nth-of-type()
    • :only-child
    • :only-of-type
    • :optional
    • :out-of-range
    • :paused
    • :placeholder-shown
    • :playing
    • :read-only
    • :read-write
    • :required
    • :root
    • :seeking
    • :stalled
    • :target
    • :valid
    • :visited
    • :volume-locked
    • @charset
    • @document
    • @font-face
    • @import
    • @keyframes
    • @media
    • @page
    • @supports
    • @viewport
    • accent-color
    • align-content
    • align-items
    • align-self
    • all
    • animation
    • animation-delay
    • animation-direction
    • animation-duration
    • animation-fill-mode
    • animation-iteration-count
    • animation-name
    • animation-play-state
    • animation-timing-function
    • aspect-ratio
    • backdrop-filter
    • backface-visibility
    • background
    • background-attachment
    • background-blend-mode
    • background-clip
    • background-color
    • background-image
    • background-origin
    • background-position
    • background-position-x
    • background-position-y
    • background-repeat
    • background-size
    • block-size
    • border
    • border-block
    • border-block-color
    • border-block-end
    • border-block-end-color
    • border-block-end-style
    • border-block-end-width
    • border-block-start
    • border-block-start-color
    • border-block-start-style
    • border-block-start-width
    • border-block-style
    • border-block-width
    • border-bottom
    • border-bottom-color
    • border-bottom-left-radius
    • border-bottom-right-radius
    • border-bottom-style
    • border-bottom-width
    • border-collapse
    • border-color
    • border-image
    • border-left
    • border-left-color
    • border-left-style
    • border-left-width
    • border-radius
    • border-right
    • border-right-color
    • border-right-style
    • border-right-width
    • border-spacing
    • border-style
    • border-top
    • border-top-color
    • border-top-left-radius
    • border-top-right-radius
    • border-top-style
    • border-top-width
    • border-width
    • bottom
    • box-decoration-break
    • box-shadow
    • box-sizing
    • caption-side
    • caret-color
    • clear
    • clip
    • color
    • column-count
    • column-fill
    • column-gap
    • column-rule
    • column-rule-color
    • column-rule-style
    • column-rule-width
    • column-span
    • column-width
    • columns
    • content
    • counter-increment
    • counter-reset
    • cursor
    • direction
    • display
    • empty-cells
    • filter
    • flex
    • flex-basis
    • flex-direction
    • flex-flow
    • flex-grow
    • flex-shrink
    • flex-wrap
    • float
    • font
    • font-family
    • font-kerning
    • font-size
    • font-stretch
    • font-style
    • font-variant
    • font-weight
    • gap
    • height
    • hyphenate-character
    • hyphenate-limit-chars
    • hyphens
    • image-rendering
    • justify-content
    • left
    • letter-spacing
    • line-clamp
    • line-height
    • list-style
    • list-style-image
    • list-style-position
    • list-style-type
    • margin
    • margin-bottom
    • margin-left
    • margin-right
    • margin-top
    • marks
    • max-height
    • max-width
    • min-block-size
    • min-height
    • min-width
    • mix-blend-mode
    • object-fit
    • opacity
    • order
    • orphans
    • outline
    • outline-color
    • outline-offset
    • outline-style
    • outline-width
    • overflow
    • overflow-x
    • overflow-y
    • padding
    • padding-block
    • padding-block-end
    • padding-block-start
    • padding-bottom
    • padding-inline
    • padding-inline-end
    • padding-inline-start
    • padding-left
    • padding-right
    • padding-top
    • page-break-after
    • page-break-before
    • page-break-inside
    • perspective
    • perspective-origin
    • place-content
    • pointer-events
    • position
    • quotes
    • resize
    • right
    • row-gap
    • scroll-behavior
    • tab-size
    • table-layout
    • text-align
    • text-align-last
    • text-decoration
    • text-decoration-color
    • text-decoration-line
    • text-decoration-skip-ink
    • text-decoration-style
    • text-emphasis
    • text-emphasis-color
    • text-emphasis-position
    • text-emphasis-style
    • text-fill-color
    • text-indent
    • text-orientation
    • text-overflow
    • text-shadow
    • text-stroke
    • text-stroke-color
    • text-stroke-width
    • text-transform
    • top
    • transform
    • transform-origin
    • transform-style
    • transition
    • transition-delay
    • transition-duration
    • transition-property
    • transition-timing-function
    • unicode-bidi
    • user-select
    • vertical-align
    • visibility
    • white-space
    • widows
    • width
    • word-break
    • word-spacing
    • word-wrap
    • writing-mode
    • z-index
    • zoom

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *