After before примеры css – Почему у меня не работает :after/:before на img если прописан путь к картинки? — Хабр Q&A

Содержание

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

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

В этой статье вы узнаете историю возникновения и использования псевдоэлементов after и before в CSS. Рассмотрим несколько примеров, где они активно используются.

Для вывода не семантического контента

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

<ul>
<li>+ сахар</li>
<li>+ молоко</li>
<li>+ мука</li>
</ul>

Разработчики спецификации CSS для упрощения кода, придумали псевдоэлементы, такие как after и before.

li {
   list-style-type: none; /* Убираем маркеры */
}

Появилась возможность, в начале каждого элемента <li> выводить повторяющийся контент content: «+ «, не прописывая его реально в HTML-файле, а только в файле стилей. Эта запись буквально говорит, поставь плюс в начале каждого элемента списка.

li:: before {
   content: "+ ";
}

А этот код аналогичным образом, ставит ? знак в конце каждого элемента списка.

li:: after {
   content: "? ";
}

В HTML-разметке, нет никаких знаков.

<ul>
<li>сахар</li>
<li>молоко</li>
<li>мука</li>
</ul>

На странице, мы увидим:

  • + сахар ?
  • + молоко ?
  • + мука ?

Верстальщики оценили открывающиеся перспективы с внедрением

псевдоэлементов before и after в CSS спецификации и начали активно применять в проектах, изобретая интересные приемы.

Таким образом первоначальная идея появления псевдоэлементов before и after – добавление контента в начале и в конце элемента, превратилась в широко используемый инструмент верстальшика.

Отмена действия float для последующего блока

Рассмотрим такой пример:

<article>
   <img src="http://via.placeholder.com/200x150" alt="картинка статьи">
   <p>Текст статьи</p>
</article>
   <footer>
     Подвал сайта
   </footer>

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

img {
float: left;
}

Напрашивается, под блок статьи, вставить фейковый блок, который бы отменил действие обтекания для подвала. Однако можно это не делать по настоящему, дабы не портить HTML-разметку, а прописать только в стилях.

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

Для тега footer в стилях – прописываем псевдоэлемент (воображаемый элемент) before (перед). Код ниже говорит – до блока footer, якобы выводится некий контент табличного вида , на который действие обтекания отменяется clear: both;

footer::before {
content: " ";
clear: both;
display: table;
}

Почему в коде, где применяются after и before, всегда присутствует пустой content: » «? Дело все в том, что разработчики CSS не предполагали, что находчивые верстальщики, будут использовать псевдоэлементы в декоративных или фейковых целях , поэтому пустой

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

Font Awesome – вставка иконок помощью псевдоклассов ::before и ::after

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

Шаг 1

Скачиваем с сайта https://fontawesome.ru/ иконочный шрифт и подключаем к своему сайту через файл CSS.

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

Шаг 2

Делаем HTML-разметку

<ul>
<li>Биткойн</li>
<li>Доллар</li>
<li>Евро</li>
<li>Рубль</li>
</ul>

Шаг 3

Делаем для наглядности CSS оформление

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

Шаг 4

На сайте fontawesome.ru выбираем нужные иконки.

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

Шаг 5

Копируем цифровой код в Unicode.

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

Шаг 6

Задаем стили для иконочного шрифта.

li:before {
font-family: fa;
padding-right: 5px;
}
.bitcoin:before {
content: "\f15a";
}
.dollar:before {
content: "\f155";
}
.euro:before {
content: "\f153";
}
.rub:before {
content: "\f158";
}

Готовый результат

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

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

Если, после прочтения данной статьи все ещё остаются вопросы, то рекомендую пройти этот «видеокурс».

  • Псевдоэлементы after и before. Примеры Создано 21.05.2018 11:26:30
  • Псевдоэлементы after и before. Примеры Михаил Русаков

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

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

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

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

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

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

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

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>::after</title>
  <style>
   .new::after {
    content: " - Новьё!"; /* Добавляем после текста абзаца */
    color: red; /* Красный цвет текста */
    font-style: italic; /* Курсивное начертание */
   }
  </style>
 </head>
 <body>
  <p>Ловля льва в пустыне с помощью метода золотого сечения.</p>
  <p>Метод ловли льва простым перебором.</p>
 </body>
</html>

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

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

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

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

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

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

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>::before</title>
  <style>
   ul {
    list-style: none; /* Прячем маркеры списка */
   }
   li::before {
    content: "✿"; /* Добавляем символ */
    padding-right: 7px; /* Расстояние от текста до маркеров */
    color: red; /* Красный цвет маркеров */
   }
  </style>
 </head>
 <body>
  <ul>
   <li>Чебурашка</li>
   <li>Крокодил Гена</li>
   <li>Шапокляк</li>
   <li>Крыса Лариса</li>
  </ul>
 </body>
</html>

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

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

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

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

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

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

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

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

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

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

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Цитата</title>
  <style>
   blockquote {
    background: #f9f0de; /* Цвет фона */
    border-left: 2px solid #0083ca; /* Линия слева */
    padding: 1em; /* Поля вокруг текста */
   }
   blockquote::before,
   blockquote::after {
    content: "“"; /* Левая кавычка */
    font-size: 40px; /* Размер текста кавычек */
    color: #c1172c; /* Цвет кавычек */
    line-height: 0; /* Текст не занимает место */
   }
   blockquote::after {
    content: "”"; /* Правая кавычка */
   }
  </style>
 </head>
 <body>
  <blockquote>Чаще всего выход там, где был вход.</blockquote>
 </body>
</html>

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

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

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

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

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

Разделитель добавляем через свойство content и селектор li + li::before, он выберет все элементы <li> кроме первого (пример 4).

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

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Хлебные крошки</title>
  <style>
   .breadcrumbs {
    margin: 0; /* Убираем отступы */
    padding: 10px; /* Поля вокруг текста */
    background: #b2d235; /* Цвет фона */
   }
   .breadcrumbs li {
    display: inline-block; /* Размещаем список по горизонтали */
   } 
   .breadcrumbs a { 
    color: #fff; /* Цвет ссылок */
    text-decoration: none; /* Убираем подчёркивание у ссылок */
   }
   .breadcrumbs li + li::before {
    content: '/'; /* Разделитель ссылок */
    padding: 0 7px; /* Расстояние вокруг разделителя */
   }
  </style>
 </head>
 <body>
  <ul>
   <li><a href="#">Главная</a></li>
   <li><a href="#">Картинки</a></li>
   <li><a href="#">Девушки</a></li>
  </ul>
 </body>
</html>

Автор и редакторы

Автор: Влад Мержевич

Последнее изменение: 17.02.2018

Редакторы: Влад Мержевич

Курс по вёрстке сайта на CSS Grid

Псевдоэлемент ::after | CSS | WebReference

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

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

Синтаксис ?

Селектор::after { content: "текст" }

Обозначения

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

Пример

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>after</title>
  <style>
    p.new::after {
      content: "Новьё!"; /* Добавляемый текст */ 
      color: #333; /* Цвет текста */ 
      background-color: #fc0; /* Цвет фона */ 
      font-size: 90%; /* Размер шрифта */ 
      padding: 2px; /* Поля вокруг текста */ 
    }
  </style>
 </head>
 <body>
  <h3>Истории</h3>
  <p>История о том, как необходимо было сделать могилу, 
     ее начали копать, а потом закапывать, и что из этого получилось.</p>
  <p>История о том, как возле столовой появились загадочные розовые
     следы с шестью пальцами, и почему это случилось.</p>
 </body>
</html>

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

Результат использования псевдоэлемента ::after

Рис. 1. Результат использования псевдоэлемента ::after

Примечание

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

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

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

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

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

Браузеры ?

 
:after8121441
::after9125741.5

Браузеры

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

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

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

×

Автор и редакторы

Автор: Влад Мержевич

Последнее изменение: 30.08.2017

Редакторы: Влад Мержевич

Курс по вёрстке сайта на CSS Grid

Псевдоэлемент ::before | CSS справочник

CSS селекторы

Значение и применение

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

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

/* синтаксис CSS 3 */
селектор::псевдоэлемент {  /* двойное двоеточие */
CSS свойство: значение;
}
/* синтаксис CSS 2 */ 
селектор:псевдоэлемент { /* одинарное двоеточие */
CSS свойство: значение;
}

Поддержка браузерами

CSS синтаксис:

::before {
content: " ";
блок объявлений;
}

Версия CSS

CSS2

Пример использования

Рассмотрим пример, в котором перед каждым блоком с изображением и перед каждым абзацем будет генерироваться (добавляться) определенная фраза:

<!DOCTYPE html>
<html>
<head>
	<meta charset = "UTF-8">
	<title>Пример использования псевдоэлемента ::before</title>
<style>
img { /* выбираем все изображения */
width: 100px;  /* задаем ширину элемента */
height: 100px;  /* задаем высоту элемента */
}
div.omg::before { /* выбираем все элементы <div> с классом omg и добавляем перед каждым содержимое */
content: "Внимание! Спасибо за внимание!"; /* содержимое, которое будет добавлено */
} 
p::before { /* выбираем все элементы <p> и добавляем перед каждым содержимое */
content: "Ответ: "; /* содержимое, которое будет добавлено */
} 
</style>
</head>
	<body>
		<div class = "omg">
			<img src = "nich.jpg" alt = "nich">
		</div>
		<div class = "omg">
			<img src = "nich.jpg" alt = "nich">
		</div>
		<p>Нет</p>
		<p>Да</p>
	</body>
</html>

В этом примере мы указали фиксированную ширину для всех изображений (ширина и высота 100 пикселей). Кроме того, мы выбрали все элементы <div> с классом omg и добавили перед ними определенную фразу. Перед абзацами (элементы <p>) также добавляется определенная фраза.


Обращаю Ваше внимание, что к таким элементам как <input> и <img> напрямую псевдоэлемент ::before применить нельзя. Один из выходов из этой ситуации – заключить элемент в блочный элемент <div>.


Результат нашего примера:

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

Изменение цвета маркера через использование CSS свойства content и псевдоэлемента :before:

<!DOCTYPE html>
<html>
<head>
	<meta charset = "UTF-8">
	<title>Изменение цвета маркера.</title>
<style> 
ul {
list-style : none; /* убираем маркеры у маркированного списка */
}
li:before {/* Псевдоэлемент :before добавляет содержимое, указанное в свойстве content перед каждым элементом <li> */
content : "•"; /* вставляем содержимое, которое выглядит как маркер */
padding-right : 10px; /* устанавливаем правый внутренний отступ элемента. */
color : red; /* устанавливаем цвет шрифта */
}
</style>
</head>
<body>
<ul>
	<li>Элемент списка</li>
	<li>Элемент списка</li>
	<li>Элемент списка</li>
</ul>
</body>
</html>
Изменение цвета маркера через использование CSS свойства content.

Пример использования счетчиков в CSS через использование CSS свойств content, counter-reset, counter-increment и псевдоэлемента :before:.

<!DOCTYPE html>
<html>
<head>
	<meta charset = "UTF-8">
	<title>Пример использования счетчиков в CSS.</title>
<style> 
body {
counter-reset : schetchik1; /* инициализируем счетчик №1 */
line-height : .3em; /* устанавливаем междустрочный интервал для всего документа */
}
h3 {
counter-reset : schetchik2; /* инициализируем счетчик №2 */
}
h3:before { /* Псевдоэлемент :before добавляет содержимое, указанное в свойстве content перед каждым элементом <h3> */
counter-increment : schetchik1; /* определяем инкремент для глав с шагом 1 (значение по умолчанию) */
content : "Глава № " counter(schetchik1) ". "; /* указываем, содержимое, которое будет добавлено перед каждым элементом <h3>. Значение counter определяет счетчик   */
}
h4 {
margin-left : 20px; /* устанавливаем величину отступа от левого края элемента */
}
h4:before {/* Псевдоэлемент :before добавляет содержимое, указанное в свойстве content перед каждым элементом <h4> */
counter-increment : schetchik2; /* определяем инкремент для статей с шагом 1 (значение по умолчанию) */
content : counter(schetchik1) "." counter(schetchik2) " "; /* указываем, содержимое, которое будет добавлено перед каждым элементом <h4>. Значение counter определяет счетчик   */
}
</style>
</head>
	<body>
		<h3>Название главы</h3>
		<h4>Статья</h4>
		<h4>Статья</h4>
		<h4>Статья</h4>
		<h3>Название главы</h3>
		<h4>Статья</h4>
		<h4>Статья</h4>
		<h4>Статья</h4>
		<h3>Название главы</h3>
		<h4>Статья</h4>
		<h4>Статья</h4>
		<h4>Статья</h4>
	</body>
</html>
Пример использования счетчиков в CSS (свойства counter-reset и counter-increment).

Пример добавления и изменения кавычек в тексте, используя CSS свойства content, quotes, а также псевдоэлементов :before и :after:

<!DOCTYPE html>
<html>
<head>
	<meta charset = "UTF-8">
	<title>Пример добавления кавычек к тексту в CSS</title>
<style> 
* {
quotes : "«" "»" "‹" "›"; /* используя универсальный селектор устанавливаем тип кавычек для первого и второго уровня вложенности (для всех элементов) */
}
p:before {content : open-quote;}  /* используя псевдоэлемент :before добавляем перед элементом <p> открывающиеся кавычки */
p:after {content : close-quote;}  /* используя псевдоэлемент :after добавляем после элемента <p> закрывающиеся кавычки */
</style>
</head>
	<body>
		<q>Обычная цитата<q>
		<q>Это <q>ЦИТАТА</q> внутри цитаты</q>
		<p>Параграф, к которому, используя псевдоклассы добавлены кавычки.</p>
	</body>
</html>
Пример добавления и изменения кавычек в тексте.CSS селекторы

Псевдоэлемент ::after | CSS справочник

CSS селекторы

Значение и применение

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

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

/* синтаксис CSS 3 */
селектор::псевдоэлемент {  /* двойное двоеточие */
CSS свойство: значение;
}
/* синтаксис CSS 2 */ 
селектор:псевдоэлемент { /* одинарное двоеточие */
CSS свойство: значение;
}

Поддержка браузерами

CSS синтаксис:

::after {
content : " ";
блок объявлений;
}

Версия CSS

CSS2

Пример использования

Рассмотрим пример, в котором после каждого блока с изображением и после каждого абзаца будет генерироваться (добавляться) определенная фраза:

<!DOCTYPE html>
<html>
<head>
	<meta charset = "UTF-8">
	<title>Пример использования псевдоэлемента ::after</title>
<style>
img { /* выбираем все изображения */
width: 100px;  /* задаем ширину элемента */
height: 100px;  /* задаем высоту элемента */
}
div.omg::after { /* выбираем все элементы <div> с классом omg и добавляем после каждого содержимое */
content: "Спасибо за внимание!"; /* содержимое, которое будет добавлено */
} 
p::after { /* выбираем все элементы <p> и добавляем после каждого содержимое */
content: " - Ваш ответ"; /* содержимое, которое будет добавлено */
} 
</style>
</head>
	<body>
		<div class = "omg">
			<img src = "nich.jpg" alt = "nich">
		</div>
		<div class = "omg">
			<img src = "nich.jpg" alt = "nich">
		</div>
		<p>Нет</p>
		<p>Да</p>
	</body>
</html>

В этом примере мы указали фиксированную ширину для всех изображений (ширина и высота 100 пикселей). Кроме того, мы выбрали все элементы <div> с классом omg и добавили после них определенную фразу. После абзацев (элементы <p>) также добавляется определенная фраза.


Обращаю Ваше внимание, что к таким элементам как <input> и <img> напрямую псевдоэлемент ::after применить нельзя. Один из выходов из этой ситуации – заключить элемент в блочный элемент <div>.


Результат нашего примера:

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

Выведем содержание, как значение атрибута элемента, использую псевдоэлемент :after и свойство content:

<!DOCTYPE html>
<html>
<head>
<title>Пример использования счетчиков в CSS.</title>
<style> 
a:after {/* Псевдоэлемент :after добавляет содержимое, указанное в свойстве content после каждого элемента <а> */
content : ""attr(title)""; /* между всеми тегами <a></a> автоматически будет проставляться значение атрибута title */
}
</style>
</head>
<body>
<a href = "http://basicweb.ru" title = "Basicweb.ru"></a>
</body>
</html>

Пример добавления и изменения кавычек в тексте, используя CSS свойства content, quotes, а также псевдоэлементов :before и :after:

<!DOCTYPE html>
<html>
<head>
<title>Пример добавления кавычек к тексту в CSS</title>
<style> 
* {
quotes : "«" "»" "‹" "›"; /* используя универсальный селектор устанавливаем тип кавычек для первого и второго уровня вложенности (для всех элементов) */
}
p:before {content : open-quote;}  /* используя псевдоэлемент :before добавляем перед элементом <p> открывающиеся кавычки */
p:after {content : close-quote;}  /* используя псевдоэлемент :after добавляем после элемента <p> закрывающиеся кавычки */
</style>
</head>
<body>
<q>Обычная цитата<q>
<q>Это <q>ЦИТАТА</q> внутри цитаты</q>
<p>Параграф, к которому, используя псевдоклассы добавлены кавычки.</p>
</body>
</html>
Пример добавления и изменения кавычек в тексте.CSS селекторы

Псевдоэлемент :after | htmlbook.ru

Internet Explorer Chrome Opera Safari Firefox Android iOS
8.0+ 1.0+ 4.0+ 9.2 1.0+ 1.0+ 3.5+ 1.0+ 1.0+

Краткая информация

Версии CSS

CSS 1 CSS 2 CSS 2.1 CSS 3

Описание

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

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

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

Синтаксис

элемент:after  { content: "текст"  }

Значения

Нет.

Пример

HTML5CSS2.1IECrOpSaFx

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>after</title>
  <style>
    p.new:after {
      content: "Новьё!"; /* Добавляемый текст */ 
      color: #333; /* Цвет текста */ 
      background-color: #fc0; /* Цвет фона */ 
      font-size: 90%; /* Размер шрифта */ 
      padding: 2px; /* Поля вокруг текста */ 
    }
  </style>
 </head>
 <body>
  <h3>Истории</h3>
  <p>История о том, как необходимо было сделать могилу, 
     ее начали копать, а потом закапывать, и что из этого получилось.</p>
  <p>История о том, как возле столовой появились загадочные розовые
     следы с шестью пальцами, и почему это случилось.</p>
 </body>
</html>

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

Рис. 1. Результат использования псевдоэлемента :after

Браузеры

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

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

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

Вся правда о псевдоэлементах :before и :after | XoZblog

Здравствуйте, уважаемые читатели XoZbloga! Рассмотрим сегодня псевдоэлементы, а именно разберемся с :before и :after. Что такое псевдоэлемент и как он отличается от псевдокласса? Как :before и :after реализованы в CSS? Вы наверняка видели их к примеру, в стилях уже готовых меню, но никогда не вдавались в подробности, для чего они нужны, а просто брали и использовали меню. Настало время расставить все по своим местам и научиться пользоваться псевдоэлементами самостоятельно.

Псевдоэлементы :before и :after по отношению к элементу

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

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

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

Более подробно о псевдоклассах поговорим в одной из следующих статей.

Немного теории о псевдоэлементах

Псевдоэлементы появились еще в рекомендации CSS1, однако :before и :after, речь о которых пойдет дальше были выпущены в CSS2.1. Что касается синтаксиса:

1

Селектор:Псевдоэлемент { Описание правил стиля }

Вначале идет имя селектора, после пишется двоеточие, а затем следует имя псевдоэлемента. Изначально для обозначение псевдокласса и псевдоэлемента применялось одно двоеточие, однако с приходом CSS3 для того, чтобы разделять где псевдокласс, а где псевдоэлемент для последнего ввели два двоеточия (::before и ::after). Однако если продолжать использовать одно, ошибкой это не будет (кроме ::selection — всегда с двумя двоеточиями).

Список всех псевдоэлементов:

Имя Описание
:before применяется для вставки контента перед элементом;
:after применяется для вставки контента после элемента;
::first-letter представляет собой первый символ первой строки текста внутри элемента;
::first-line представляет собой первую линию форматированного текста;
::selection представляет собой часть документа, которая была выделена мышкой.

Как это работает?

Как говорилось выше, псевдоэлементы :before и :after создают дополнительные элементы до или после содержимого основного элемента, так что когда мы используем эти псевдоэлементы, технически это равнозначно следующей разметке.

1
2
3
4
5

<p>  
<span>:before</span>  
    Здесь основной контент.  
<span>:after</span>  
</p>

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

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

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

Цитата с окантовкой кавычками (псевдоэлементы)

Окантуем текст цитаты кавычками. Разметка HTML следующая:

1
2
3

<blockquote>
     <p>……</p>
</blockquote>

А стили выглядят пока так:

1
2
3
4
5
6

blockquote:before {  
    content: open-quote;  
}  
blockquote:after {  
    content: close-quote;  
}

Стилизация кавычек

Несмотря на то, что поддельные элементы, созданные псевдоэлементами на самом деле ведут себя как «реальные», мы можем задать для них любые стили оформления. Такие как: цвет, фон, размер шрифта, выравнивание текста внутри элемента и так далее.

Если мы хотим указать ширину и высоту псевдоэлемента, мы должны использовать значение block для свойства display.

Псевдоэлементы - Стилизация

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
29
30
31
32
33
34

blockquote:before {  
    content: open-quote;  
    font-size: 24pt;  
    text-align: center;  
    line-height: 42px;  
    color: #fff;  
    background: #ddd;  
    float: left;  
    position: relative;  
    top: 30px;  
border-radius: 25px;  
 
    /** определяем как блочный элемент **/  
    display: block;  
    height: 25px;  
    width: 25px;  
}  
blockquote:after {  
    content: close-quote;  
    font-size: 24pt;  
    text-align: center;  
    line-height: 42px;  
    color: #fff;  
    background: #ddd;  
    float: right;  
    position: relative;  
    bottombottom: 40px;
border-radius: 25px;  
 
    /** определяем как блочный элемент **/  
    display: block;  
    height: 25px;  
    width: 25px;
}

С изображением

Мы также можем использовать изображение (а не только простой текст) в качестве контента псевдоэлемента.

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

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
29
30
31
32
33
34

blockquote:before {  
    content: » «;  
    font-size: 24pt;  
    text-align: center;  
    line-height: 42px;  
    color: #fff;  
    float: left;  
    position: relative;  
    top: 30px;  
    border-radius: 25px;  
 
    background: url(images/quotationmark.png) -3px -3px #ddd;  
 
    display: block;  
    height: 25px;  
    width: 25px;  
}  
blockquote:after {  
    content: » «;  
    font-size: 24pt;  
    text-align: center;  
    line-height: 42px;  
    color: #fff;  
    float: right;  
    position: relative;  
    bottombottom: 40px;  
    border-radius: 25px;  
 
    background: url(images/quotationmark.png) -1px -32px #ddd;  
 
    display: block;  
    height: 25px;  
    width: 25px;  
}

Однако, как Вы можете видеть на приведенном выше отрывке, мы все еще объявляем свойство content и на этот раз, в качестве значения пустая строка. Content является обязательным свойством, в противном случае псевдоэлемент не будет работать вообще.

Комбинируем с псевдоклассами

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

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

1
2
3

blockquote:hover:after, blockquote:hover:before {
      background-color: #555;
   }

Добавим Transition эффект

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

1
2
3
4

transition: all 350ms;  
-o-transition: all 350ms;  
-moz-transition: all 350ms;  
-webkit-transition: all 350ms;

Более подробно об эффекте transition в уроке — CSS слайдер изображений с эскизами

Вы можете посмотреть, что у нас получилось 🙂

Псевдоэлементы и псевдоклассы в одном правиле CSS
Просмотр демо страницы и скачивание исходников не доступно

Уважаемый читатель, XoZblog существует и развивается за счёт доходов от ненавязчивой рекламы. Если не затруднит, добавьте этот сайт в исключение AdBlock. Спасибо за понимание!

Чтобы оставаться в курсе свежих статей и уроков подписывайтесь на страницу ВКонтакте или подпишитесь на почтовую рассылку. Не забывайте оставлять комментарии к статьям и урокам. Спасибо!

Чтобы оставаться в курсе свежих статей и уроков подписывайтесь на еженедельную почтовую рассылку или на новостную ленту RSS. Спасибо!

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

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