Before псевдокласс: ::before (:before) — CSS | MDN

CSS3 | Псевдоэлементы

Последнее обновление: 21.04.2016

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

  • ::first-letter: позволяет выбрать первую букву из текста

  • ::first-line: стилизует первую строку текста

  • ::before: добавляет сообщение до определенного элемента

  • ::after: добавляет сообщение после определенного элемента

  • ::selection: выбирает выбранные пользователем элементы

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

Стилизуем текст, используя псевдоэлементы first-letter

и first-line:


<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Псевдоклассы в CSS3</title>
        <style>
            ::first-letter { color:red; font-size: 25px; }
            ::first-line { font-size: 20px; }
        </style>
    </head>
    <body>
        <p>Но он ничего не видал.  Над ним не было ничего уже, кроме неба, — высокого неба, не ясного, но все-таки неизмеримо высокого, с тихо ползущими по нем серыми облаками.</p>
    </body>
</html>

Используем псевдоэлементы before и after:


<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Псевдоклассы в CSS3</title>
        <style>
            .warning::before{ content: "Важно! "; font-weight: bold; }
            .warning::after { content: " Будьте осторожны!"; font-weight: bold;}
        </style>
    </head>
    <body>
        <p><span>Не пытайтесь засунуть язык в электрическую розетку.</span></p>
    </body>
</html>

Здесь псевдоэлеметы применяются к элементу с классом warning. Оба псевдоэлемента принимают свойство content, которое хранит вставляемый текст. И также для повышения внимания псевдоэлементы используют выделение текста жирным с помощью свойства font-weight: bold;.

Используем псевдоэлемент selection для стилизации выбранных элементов:


<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Псевдоэлементы в CSS3</title>
        <style>
			::selection {
				color: white;
				background-color: black;
			}
        </style>
    </head>
    <body>
        <p>Пседвоэлементы в CSS3 позволяют форматировать текст.</p>
    </body>
</html>

НазадСодержаниеВперед

: before или :: after?

Блог / Танцы с CSS / Почему не работает стиль :: before или :: after?

Замечательные псевдо-классы, которые позволяют добавить виртуальные контейнеры в начало или конец контейнера. Как они работают и почему могут «не сработать»?

Условия для работы after и before

Псевдоклассы применимы к любым парным контейнерам, т.е. тегам которые могут «обернуть» какой то контент, имеют открывающийся и закрывающийся теги. К примеру, с <img> они не работают, а со <span></span> — пожалуйста.

Вторым важным требованием для «срабатывания» является наличие CSS свойства content.

Т.е. вот так, мы не получим никакого эффекта:

.test::after { width: 100px; height: 50px; background: #f0f000; display: block; //content: » After «; }

1

2

3

4

5

6

7

.test::after {

  width: 100px;

  height: 50px;

  background: #f0f000;

  display: block;

  //content: » After «;

}

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

.test::after {  content: «»; }

.test::after {

 content: «»;

}

Одно двоеточие или два?

Работают одинаково как тот, так и другой вариант. Двойное двоеточие появилось в спецификации CSS3 как желание упорядочить псевдоклассы, но поддержка другого варианта осталась.

.test::before{ .. } .test:before { .. }

1

2

3

4

5

6

.test::before{

  ..

}

.test:before {

  ..

}

Где в DOM располагаются :after и :before?

Из-за того, что контейнеры отсутствуют в реальном HTML коде, возникает путаница : до чего (before) и после (after) чего?

Псевдо-контейнеры находятся внутри контейнера, к которому применяются, располагаясь до (before) или после (after) содержимого.

Вот небольшая иллюстрация:

HTML код примера

<div> <div>Content</div> </div>

<div>

  <div>Content</div>

</div>

CSS

// основной контейнер (большой серый) .test { width: 300px; height: 150px; background: #f0f0f0; } // его содержимое — темно серый прямоугольник .test .content { width: 100px; height: 50px; background: #d0d0d0; } // псевдо-класс after, желтый .test::after { width: 100px; height: 50px; background: #f0f000; display: block; content: » After «; } // псевдо-класс before, лиловый .test::before { width: 100px; height: 50px; background: #f000f0; display: block; content: » Before «; }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

// основной контейнер (большой серый)

. test {

  width: 300px;

  height: 150px;

  background: #f0f0f0;

}

// его содержимое — темно серый прямоугольник

.test .content {

width: 100px;

height: 50px;

background: #d0d0d0;

}

// псевдо-класс after, желтый

.test::after {

width: 100px;

height: 50px;

background: #f0f000;

display: block;

content: » After «;

}

// псевдо-класс before, лиловый

.test::before {

width: 100px;

height: 50px;

background: #f000f0;

display: block;

content: » Before «;

}

Если основной контейнер имеет относительное позиционирование, то задав псевдо-контейнерам абсолютное позиционирование, можно манипулировать их положением относительно основного.

Написать комментарий

Данная запись опубликована в 22.10.2017 00:12 и размещена в Танцы с CSS. Вы можете перейти в конец страницы и оставить ваш комментарий.

 

Комментарии к «Почему не работает стиль :: before или :: after?»

Понравилась статья? Есть вопросы? — пишите в комментариях.

UI практический опыт 02: Флажок с использованием псевдоклассов и псевдоэлементов

В отличие от обычных селекторов CSS (IE. id, class, type ), мы не слишком часто используем псевдоклассы и псевдоэлементы. Потому что для большинства фреймворков CSS, таких как Bootstrap, они их обложили, и кажется, что они нам вообще не нужны. Но рано или поздно HIE скажет нам, что внешний вид флажков/переключателей не тот, что им нужен, или полоса таблиц выглядит не очень хорошо. И тогда нам пришлось бы взглянуть на то, как их использовать (в основном :: после , : n-й дочерний (нечетный) ).

Синтаксис похож, поскольку оба они зависят от своих хостов. Я бы сказал, что это усилители, которые могут улучшить стиль CSS. Итак, что же это такое.

Псевдо-класс
  • РЕЗЮМЕ: Селектор, который выбирает элементы, которые в Специфическое состояние
  • Синтаксис: : 7:7
  • . , :hover , :disabled , :active

Псевдоэлементы

  • совершенно новый элемент (используйте content ) в разметке.
  • Синтаксис: ::псевдо-имя-элемента
  • Примеры: ::first-line , ::before ,

    06

  • UI 01: Реализация автозаполнения с использованием Javascript, Html, CSS
  • UI 02: Реализация флажка с использованием псевдоклассов и псевдоэлементов : Модальная реализация с использованием положения, z-index
  • UI 05: Карусельная реализация с использованием преобразования и перехода
  • UI 06: Реализация Masonry с использованием flex и grid
  • UI 07: Фотоколлаж с использованием перетаскивания
  • UI 08: Приклеить абзац, заголовок таблицы и компонент с помощью position: sticky
  • UI 09: Карта с веб-компонентами: ShadowDOM, пользовательские элементы и шаблон/слот

В этом разделе мы будем использовать псевдокласс и псевдоэлемента для реализации собственного флажка ✅! Вот как их отображает стиль пользовательского агента Chrome по умолчанию:

1. 1 первый шаг: нарисовать пустой флажок.

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

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

1.2 второй шаг : добавить проверенный стиль. В основном две вещи:

  • добавить background-color
  • добавить ✔ поверх флажка ( Псевдоэлемент ::after )
  • 900 Выглядит великолепно! О чем следует позаботиться:

    • используйте position:absolute , поэтому он будет размещен точно поверх основного элемента
    • Использование Vertical-Align с встроенными или Align-Items с Grid , чтобы сделать элементы в центре

    1,3 Последний шаг: Добавить стиль инвалидов, все еще две вещи:

    • SET 4. border-color , чтобы он выглядел отключенным
    • Set псевдокласс :hover чтобы он не мог взаимодействовать

    Да, мы только что сделали это, используя псевдоэлемент и псевдокласс!

    Итак, как сделать его кликабельным?

    • связывать события кликов
    • установить соответствующий класс CSS

    Где код?

    brianshen1990/KeepLearning

    Внесите свой вклад в разработку brianshen1990/KeepLearning, создав учетную запись на GitHub.

    github.com

    Что это за место? Национальный парк Тароко, Хуалянь, Тайвань

    Доступ к псевдоэлементам в драматургии | Отражение

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

    содержимое на страницу. Но в отличие от обычного элемента, псевдоэлементы не считаются отдельным узлом в объектной модели документа (DOM), и поэтому к ним нельзя получить доступ через querySelector или querySelectorAll .

    Из-за этих особенностей псевдоэлементы могут быть довольно сложными для автоматизированного тестирования, не имеют встроенной поддержки во многих библиотеках тестирования, включая популярную среду тестирования Microsoft Playwright. В этом В статье мы покажем вам, как можно обойти эти ограничения для тестирования псевдоэлементов в Playwright.

    Синтаксис

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

    Псевдоэлементы представлены двойным двоеточием (::), за которым следует имя псевдоэлемента:

     css-селектор :: псевдоэлемент {
      стоимость имущества;
    }
     

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

     
      <стиль>
        p:: первая буква {
          цвет: #0000ff;
        }
      
      <тело>
        

    Привет, мир

    Другие популярные псевдоэлементы включают:

    • ::before - Добавление содержимого перед выбранным элементом.
    • ::after - Добавление содержимого после выбранного элемента.
    • ::first-line - Стилизация первой строки элемента.
    • ::placeholder - Стилизация заполнителя элемента ввода.

    Обратите внимание, что псевдоэлементы очень похожи на псевдоклассы , например

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

    Чтобы еще больше запутать ситуацию, в Playwright есть конструкция с похожим названием, называемая псевдоселекторами .. Псевдоселекторы, такие как :has() и :text() , представляют собой методы доступа к элементам на странице способами, которые не используются. поддерживается в спецификации CSS. Другими словами, с помощью псевдоселекторов Playwright расширил спецификацию CSS, чтобы предложить дополнительные удобные методы для ссылки на элементы в DOM.

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

    Драматургическая поддержка псевдоэлементов

    Вот простой пример HTML с одним определенным псевдоэлементом:

     
      <стиль>
        р :: до {
          содержание: «Ура. »;
        }
      
      <тело>
        

    Привет, мир

    Если вы просмотрите этот пример в своем веб-браузере, вы увидите, что элемент

    содержит содержимое «Yay. ' добавлено к строка «Hello World»:

    Псевдоэлементы позволяют использовать CSS для отображения элементов, которых нет в DOM. Отсюда и название «Псевдо». Драматург делает не поддерживает доступ к этим псевдоэлементам с помощью чистых селекторов.

    Установите Playwright, используя pip:

     pip3 установить драматург
    драматург установить
     
     импорт ОС
    из playwright. sync_api импортировать sync_playwright
    текущий_путь = os.getcwd()
    с sync_playwright() как p:
        браузер = p.chromium.launch()
        контекст = браузер.new_context()
        страница = контекст.new_page()
        page.goto(f"файл://{текущий_путь}/test.html")
        ч = page.locator("p")
        печать (h.inner_text())
     

    После запуска этого кода вы увидите, что Playwright возвращает только содержимое исходного HTML-элемента.

    Доступ к псевдоэлементам в Playwright

    Драматург предоставляет метод page.evaluate() , который выполняет код javascript. Функция window.getComputedStyle() получает все стили, связанные с элементом или псевдоэлементом.

     
      <стиль>
        #p-текст:: перед {
          content: "Псевдоконтент CSS.";
        }
      
      <тело>
        

    HTML-контент

    Используя JavaScript, вы можете извлечь значение содержимого псевдоэлемента.

     window.getComputedStyle(document. getElementById("p-text"), "::before")["content"];
     

    Функция getComputedStyle() принимает два аргумента:

    • Элемент, для которого должен быть возвращен вычисленный стиль.
    • Строка, указывающая псевдоэлемент для сопоставления. Для реальных элементов это опущено (или равно нулю).
     импорт ОС
    из playwright.sync_api импортировать sync_playwright
    текущий_путь = os.getcwd()
    с sync_playwright() как p:
        браузер = p.chromium.launch()
        контекст = браузер.new_context()
        страница = контекст.new_page()
        page.goto(f"файл://{текущий_путь}/test.html")
        контент = page.evaluate("window.getComputedStyle(document.getElementById('p-text'), '::before')['content']")
        распечатать (содержание)
     

    Фрагмент выводит содержимое псевдоэлемента.

    Псевдоэлементы и переключатели

    ::before — распространенный псевдоэлемент для стилизации флажков и переключателей. Рассмотрим простую HTML-страницу ниже:

    .
     
      <тело>
        <форма>
           
           
        
      
    
     

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

     .fruit-radio::after {
      ширина: 15 пикселей;
      высота: 15 пикселей;
      радиус границы: 15px;
      верх: -2px;
      слева: -1px;
      содержание: "";
      положение: родственник;
      цвет фона: #d1d3d1;
      отображение: встроенный блок;
      видимость: видимая;
      граница: 2 пикселя сплошного белого цвета;
    }
    .fruit-радио: проверено:: после {
      ширина: 15 пикселей;
      высота: 15 пикселей;
      радиус границы: 15px;
      содержание: "";
      верх: -2px;
      слева: -1px;
      положение: родственник;
      цвет фона: #ffa500;
      отображение: встроенный блок;
      видимость: видимая;
      граница: 2 пикселя сплошного белого цвета;
    }
     

    CSS Кредит: Stackoverflow

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

    Метод page.click() в Playwright используется для нажатия на выбранные элементы. В некоторых случаях по умолчанию нажмите метод будет работать, как и ожидалось, и будет нажимать на ввод, содержащий псевдоэлемент:

     импорт ОС
    из playwright.sync_api импортировать sync_playwright
    текущий_путь = os.getcwd()
    с sync_playwright() как p:
        браузер = p.chromium.launch()
        контекст = браузер.new_context()
        страница = контекст.new_page()
        page.goto(f"файл://{текущий_путь}/test.html")
        page.click("ввод[id='яблоко']")
        content = page.evaluate("window.getComputedStyle(document.getElementById('apple'), '::after').getPropertyValue('background-color')")
        распечатать (содержание)
     

    Фрагмент выходов:

    В этом примере Драматург правильно щелкает элемент и извлекает ожидаемый цвет фона #ffa500 ( rgb(255, 165, 0) ). Если вы обнаружите, что клики по элементам, содержащим псевдоэлементы, работают некорректно, вероятно, виновником является то, что щелчок должен быть изменен со смещением, чтобы он щелкал по псевдоэлементу, который лежит вне границ фактического элемента. Для этого вам нужно определить аргумент options на странице . нажмите и пройти в позиции собственности. Так, например, если вам нужно щелкнуть на 10 пикселей левее верхнего левого угла main и на 5 пикселей выше верхнего левого угла можно передать значение { position: { x: -10, y: -5 }} .

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

     импорт ОС
    из playwright.sync_api импортировать sync_playwright
    текущий_путь = os.getcwd()
    с sync_playwright() как p:
        браузер = p.chromium.launch()
        контекст = браузер.new_context()
        страница = контекст.new_page()
        page.goto(f"файл://{текущий_путь}/test.html")
        content = page.evaluate("window.getComputedStyle(document.getElementById('apple'), '::after').getPropertyValue('')")
        распечатать (содержание)
     

    Новый сниппет выводит:

    rgb(209, 211, 209 эквивалентно #d1d3d1 , исходному цвету фона переключателя в неотмеченном состоянии.

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

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