cssor.ru - Сайт о CSS и верстке сайтов, в помощь веб разаботчикам.

Псевдоэлементы и псевдоклассы, их использование

Теги:
Дата: 03.10.2008

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

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

:first-line - Используется для применения стилей к первой строке абзаца.

Пример:

p:first-line {
color:#999999;
}

Результат:

Псевдоэлемент :first-line

Первая строка абзаца (текста находящегося между тегами <p> </p>) стала серого цвета (#999999).

Стоит отметить что этот псевдоэлемент применяется ТОЛЬКО к первой строке абзаца независимо от ее ширины, даже если ширина строки меняется с разрешением экрана. Реальных применений у этого псевдоэлемента немного. Например у меня не было ситуации когда было бы целесообразно применение этого псевдоэлемента.

Не поддерживается IE ниже 7 версии.


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

Пример:

p:first-letter {
font-size:30px;
font-family: "Times New Roman";
font-weight: bold; 
float:left;
}

Результат:

Псевдоэлемент :first-letter

Как наверно уже догадались по рисунку, применяется для создания так называемой “Буквицы” в тексте.

Не поддерживается IE ниже 7 версии.


:before и :after - Используется для вставки содержимого до (:before) и после (:after) содержимого элемента.

Пример:

p:before {
content: "Спец текст >>";
color:#CCCCCC;
margin-left:-95px;
margin-right:10px;
}

Результат:

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

Тексту находящемуся между элементов <p> </p> мы присвоили псевдоэлемент ":before" и с помощью свойства "content" вставили текст "Спец текст >>", остальные свойства придали этому тексту цвет и позиционирование.

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


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

:first-child - Используется для задания стилей первому дочернему элементу какого либо родительского элемента. Фраза наверняка непонятна новичкам, поэтому смотрите пример:

HTML:

<div>
<p>Первый дочерний элемент</p>
<p>Второй дочерний элемент</p>
</div>

CSS:

div > p:first-child {
color: green;
}

Результат:

Псевдокласс :first-child

Этот CSS код означает: “В слое (div) присвоить тексту находящемуся в первом элементе <p> зеленый цвет ”.

Недостаток этого псевдокласса заключается в следующем… Если в данном примере перед первым элементом <p> вставить любой другой элемент (например <h1> </h1>), то стили для первого элемента не применятся. То есть первым элементом станет <h1> </h1>, а для <p> уже не удастся применить стили с помощью этого псевдокласса. Обойти это можно достаточно просто, элементы <p> </p> заключить в отдельный слой (div).

Применение тут может быть следующим… Думаю многие уже догадались, продолжаем тему “буквицы”. Ведь буквица в тексте обычно нужна только в первом абзаце.

p:first-child:first-letter {
font-size:20px;
font-family: "Times New Roman";
font-weight: bold; 
float:left;
color:green;
}

Таким образом мы определим “буквицу” только для первого абзаца в слое.

Буквица только для первого абзаца

Не поддерживается IE ниже 7 версии.


:link и :visited - Используются для указания стилей просмотренных (:visited) и не просмотренных (:link) ссылок. Два этих состояния являются взаимоисключающими и применяются только для элементов <a> с атрибутом “href”.

Пример:

a:link { color:green; }
a:visited { color:red; }

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

Не поддерживается IE ниже 7 версии.


:hover, :active и :focus - Псевдоклассы реагирующие на действия пользователя. :hover – применяется к элементу при наведении на него курсора мыши. :active - применяется к элементу при клике мышью по нему (по элементу). :focus - применяется к элементу при получении им (элементом) фокуса в результате определенных действий. Как по другому объяснить :focus не знаю ), смотрите пример ниже и все поймете.

Четкого определения к каким элементам можно применять эти псевдоклассы нет, но большинство браузеров поддерживают эти псевдоклассы только у элементов <a> </a>.

Пример:

a:hover { text-decoration:none; }
a:focus { color:green; }
a:active { color:red; }

При наведении курсора мыши на ссылку сработает свойство “text-decoration” со значением “none” (уберет подчеркивание), при получении фокуса ссылка станет зеленого цвета, а при клике мышкой на ссылку она приобретет красный цвет (только на момент клика).

:focus не поддерживается в Opera, Chrome и IE ниже 8 версии.
:active в IE его действие больше походит на действие :focus.


:lang - указывает на язык элемента.

html:lang(en) { quotes: '« ' ' »'; }
html:lang(ru) { quotes: '»' '«' '\2039' '\203A'; }

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


Заключение

Псевдоэлементы и псевдоклассы вещь очень необходимая в обиходе верстальщика, хотя некоторые из них (например :focus, :first-line) ставят под сомнение их использование, в основном это связанно из соображений кроссбраузерности. Можно найти кроссбраузерную альтернативу таким псевдоэлементам и псевдоклассам, хоть и потеряется та гибкость для которой они созданы. Но без некоторых из них (например :hover) вообще не обойтись. Я думаю в будующем псевдоэлементы и псевдоклассы станут более часто используемыми нежели сейчас.

03.12.2008

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

07.01.2009

Я верстальщик, и могу сказать что действительно хорош только псевдокласс :hover т.к остальные не работают в IE6 а 90% заказчиков требуют кроссбраузерность IE6/7, Opera, Mozilla. Знать об их существование будет не лишним но пользы от них ноль.

08.02.2009

огромный РЕСПЕКТ за эти страницы с такими фишками.

23.03.2009

Спасибки за труд)

29.04.2009

Все-таки хорошо, когда опытный человек занимается развитием новичков. Это очень интересная и полезная статья.

20.05.2009

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

29.05.2009

Спасибо, занятненько. Хотя, должен согласиться с Iverson - единственный наиболее полезный псевдокласс :hover
Остальное знать для общего развития, ибо большинство тупо по разному обрабатываются в ИЕшках. И заказчики на это очень часто крутят носом.

03.06.2009

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

03.06.2009

Pit
Главное практика... С терминами по ходу разберешься.

01.07.2009

div > p:first-child {
color: green;
}
увы не работает в Опере 9, в 10ке уже норм

08.07.2009

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

08.07.2009

Васильев
Думаю никак, я не знаю таких способов без скриптов.

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

Почему же никак?!


A {  	                              /* Стиль для всех ссылок меню*/
display: block;
background: url(img/blablabla);       /* адрес изображения в качестве "бэкграунда" */
}
A:hover{                             /* при наведении на ссылку появляется новое изображение */
background: url(img/new blabla); /* адрес нового изображения */
}
A.new, A:hover.new {     /* Класс присваивается ссылке для которой нужно зафикс. изображени. */
background: url(img/new blabla); /* Тоже изобр. что и у  A:hover */
}

Или же вообще убрать :hover, а для фиксации нового изобр. присваивать нужной ссылке класс .new.

24.08.2009

Dr.Kertz

А можно поподробнее про A.new, A:hover.new
пробовал, не получается, в идеале на каком-нибудь простом примере.

27.08.2009

Dr.Kertz(у)

Большое спасибо за отзыв, но я переоценил свои знания. Ситуация такова. Есть небольшой сайт в локальной сети, мой первый проект. Занимаюсь этим непрофессионально,скорее даже просто забава. Если нетрудно, сделай изменения в тхт файле. чтобы в навигации кнопки фиксировались.(ну и как-то пометить изменения).
http://www.onlinedisk.ru/file/205336/ -архив 3кб.

05.11.2009

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

16.12.2009

об этом действительно не знал.сенкс

24.12.2009

Спасибо, хорошо написано, прям специально для нубов типа меня!

08.01.2010

отлично,спасибо за инфо,как раз сайт разрабатываю

26.01.2010

не знал.сенкс

27.03.2010

радиоприемники электрические схемы все о философии история философии страны европа seropol5

24.05.2010

Я только пробую стать верстальщиком. Очень много полезного узнаю. Спасибо.

спасибо за последовательность объяснения такого трудного вопроса.

17.02.2011

отличный лист фанеры хвойная цена привлечет внимание особенно экономных

22.05.2011

Для вашего торжества ведущий праздника??? который сделает этот день самым радостным и запоминающимся

30.05.2011

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

30.05.2011

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

30.05.2011

Так поступает большинство добрых граждан в отношении своих правительств, и думаю, что это правильно.
Я решительно онлайн игры для девушек макияж
считаю возможным уничтожить бедность и особые привилегии.
А что за пустыней, случайно, не знаешь?
Мне не жалко.
Я направил ему длинный рапорт, наполненный соответствующей информацией.
И бездны ваши страшные игры онлайн бесплатно
поглубже наших будут, все это так.
А в оркестре дела шли из рук вон плохо.
Ну, потерять сознание это я еще понимаю.
А высота скирды получилась метров шесть.

05.08.2011

Благодаря вашей статье, у меня многое стало получаться

13.09.2011

интересная информация, спасибо

29.09.2011

Имеет sony ericsson c5000 китайский и функции, которые хотя и менее популярны, чем остальные, но очень облегчают пользование аппаратом. Среди них стоит отметить Bluetooth, благодаря наличию которого владелец коммуникатора всегда сможет подключиться к другому устройству, через беспроводную связь. К тому же, sony ericsson c5000 можно синхронизировать с ПК посредством USB.