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

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

Вот список всех псевдоклассов:

  • hover – Стиль элемента на который наведён курсор мыши.
  • active – Стиль для ссылки которая становится активной, но переход по ней еще не совершен.
  • visited – Стиль для недавно посещённой ссылки.
  • link – Стиль для нечасто посещаемой ссылки.
  • focus – Стиль элемента находящегося в фокусе.
  • first-child – Стиль первого дочернего элемента.
  • lang – Определяет язык, который используется в фрагменте документа.

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

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

a:hover { color:#ff0000}

где:

a – элемент (селектор), а проще тег к которому мы решили применить псевдокласс в нашем случае это ссылка.
:hover – после двоеточия собственно нужный нам псевдокласс.
{color:#ff0000} – ну и блок объявления стилей в фигурных скобках.

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

Так собственно мы подошли к первому, самому популярному, псевдоклассу hover.

Псевдокласс hover.

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

Ну а раз уж догадались просто покажу пример:

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<title>Псевдоклассы</title>
<style type=”text/css”>
.menu {
display: block;
width: 180px; 
background-color:#fff8dc;
color:#008; 
font-size: 16px; 
text-decoration: none;
padding: 3px;
}
.menu:hover {
display: block;
width: 180px; 
background-color:#b8860b;
color:#fff;
padding: 3px;
font-size: 16px;
text-decoration: none;
}
tr:hover {
background-color:#b8860b;
}
</style>
</head>
<body>
<p>Чем Вам не блок навигации по сайту?</p>
<a href=”#” class=”menu”>Главная</a>
<a href=”#” class=”menu”>Карта сайта</a>
<a href=”#” class=”menu”>Купить слона</a>
<a href=”#” class=”menu”>Продать слона</a>
<a href=”#” class=”menu”>Взять слона на прокат</a>
<hr>
<p>А вот ещё один распространенный трюк.. строки в таблице подсвечиваются при наведении на них курсором.</p>
<table border=”1″ bordercolor=”#ccc” width=”600″ cellpadding=”1″ cellspacing=”0″>
<tr>
<td>Иванов</td><td>+</td><td>&nbsp;</td><td>&nbsp;</td><td>+</td><td>&nbsp;</td><td>&nbsp;</td>
</tr>
<tr>
<td>Петров</td><td>&nbsp;</td><td>+</td><td>&nbsp;</td><td>&nbsp;</td><td>+</td><td>&nbsp;</td>
</tr>
<tr>
<td>Сидоров</td><td>&nbsp;</td><td>&nbsp;</td><td>+</td><td>&nbsp;</td><td>&nbsp;</td><td>+</td>
</tr>
</table>
</body>
</html>

Несколько слов к примеру выше..

Как Вы наверное заметили в качестве селектора псевдокласса может выступать не только какой либо элемент – тег, но и класс или идентификатор. Так в примере к классу .menu применён псевдокласс hover и синтаксис приобретает следующий вид:

.menu:hover { color:#ff0000;}

Не запутались в терминологии?

Простыми словами мы сказали браузеру что мол подсвечивай красным только те ссылки которые находится в навигационном блоке (выведены в класс.menu ), а остальное оставь как есть!

Псевдокласс hover может быть применён к любому элементу, выводимому на экран, так в нашем примере, для того чтобы организовать подсветку строк таблицы мы применили его к тегу <tr>. Однако следует отметить, что браузер Internet Explorer 6 и его более ранние версии поддерживает псевдокласс hover только для ссылок – тег <a>, так что, к примеру, строки таблицы, при наведении на них курсора, в браузерах IE6 и ниже подсвечиваться не будут!

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

Рассмотрим сразу три псевдокласса созданных для работы со ссылками.

  • active – Стиль активной ссылки.
  • visited – Стиль для недавно посещённой ссылки.
  • link – Стиль для нечасто посещаемой ссылки.

Сначала покажу пример:

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<title>Псевдоклассы и ссылки</title>
<style type=”text/css”>
a:link {color:#0000ff}
a:active {color:#ff0000}
a:visited {color:#008000}
</style>
</head>
<body> 
<a href=”#1″>Ссылка на первый якорь</a>
<a href=”#2″>Ссылка на второй якорь</a>
<a href=”#3″>Ссылка на третий якорь</a>
<hr>
<a name=”1″><h4>Первый якорь</h4></a>
<p>Псевдокласс link, в этом примере, указывает, что все не посещенные ссылки должны отображаться синим цветом.</p> 
<a name=”2″><h4>Второй якорь</h4></a>
<p>Попробуйте нажить и удерживать на одну из не посещенных ссылок, чтобы увидеть для работу псевдокласса active.</p>
<a name=”3″><h4>Третий якорь</h4></a>
<p>visited – псевдокласс который, в этом примере, говорит о том, что все посещенные ссылки должны отображаться зеленым цветом.</p> 
</body>
</html>

Теперь расскажу более подробно.

Псевдокласс active присваивает ссылке определённый стиль в тот момент когда эта ссылка активна, то есть в тот момент когда пользователь нажал на ссылку, но еще не отпустил кнопку мыши. Короче active – это стиль ссылки в момент клика по ней.

Браузеры некоторое время помнят, на какие ссылки нажимал пользователь в последнее время, так вот, псевдокласс visited указывает стиль ссылки которая недавно посещалась пользователем.

Псевдокласс link описывает стиль ссылки, которая ранее не посещалась пользователем. Надо отметить, что никакой ощутимой разницы между записью a {…} и a:link {…} нет, так что применение данного псевдокласса в этом случае ровным счетом ничего не меняет.

Все три вышеперечисленных псевдокласса предназначены для работы с ссылками, однако псевдокласс active может быть применён к любому элементу – работать будет везде, кроме браузера Internet Explorer 6 и ниже.

Псевдокласс focus.

Данный псевдокласс определяет стиль элемента, если тот находится в фокусе. Теперь собственно о том, что такое фокус?.. как в случае с оптикой и иллюзией, слово фокус в CSS обозначат, что некий объект, а точнее элемент, находится в центре внимания наблюдателя – пользователя. Такими элементами могут быть теги <a> <input> <select> и <textarea>.

Посмотрите на пример:

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<title>Псевдокласс focus</title>
<style type=”text/css”>
input:focus {color: red}
</style>
</head>
<body>
<form>
<input type=”text” value=”Введите текст в эту форму” size=”30″>
</form>
<p>Ввели? а теперь щелкните по пустому месту на экране чтобы форма потеряла фокус.</p>
</body>
</html>

В примере текст в текстовом поле <input> изначально чёрный, но как только элемент получает фокус – то есть тогда когда пользователь кликнет по данному полю и начнет набирать текст, он окрасится красным.

Вот и весь фокус-покус..

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

Думаю, в ходе обучения CSS Вы уже поняли, что все элементы можно определить как родительские или дочерние и что элемент родитель может содержать в себе несколько дочерних элементов, ну например:

<div>– блок родитель
<p></p> – первый дочерний элемент
<p></p> – второй дочерний элемент
</div>

Так вот псевдокласс first-child определят стиль первого дочернего элемента находящегося в родительском контейнере.

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<title>Псевдокласс first-child</title>
<style type=”text/css”>
div {
margin: 20px;
padding: 30px;
background-color: #c0e4ff;
border: 2px solid #008000
}
p {
color: #555;
background-color: #dcdcdc;
border: 2px solid #555
}
p:first-child {
color: #f00;
background-color: #c5ffa0;
border: 2px solid #008000
}
</style>
</head>
<body>
<div>
<p>первый дочерний параграф – он выделен псевдоклассом first-child</p> 
<p>второй дочерний параграф</p>
<p>третий дочерний параграф</p>
</div> 
<div>
<p>и здесь первый дочерний параграф выделен хотя блок родитель уже другой</p> 
<p>второй дочерний параграф</p>
</div>
</body>
</html>

Обратите внимание на тот факт, что если бы в блоке родителе перед дочерними параграфами стоял любой другой тег, заголовок <h1> к примеру, то псевдокласс first-child уже не действовал бы к первому параграфу.. так как хоть параграф то он и первый, но элемент в блоке родителе уже второй.

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

Язык текста.

Псевдокласс lang определяет язык текста того или иного элемента или документа в целом.

Если Вы помните из курса HTML, язык документа определяют атрибуты: charset – кодировка документа и content – язык документа для тега <meta>.

<meta http-equiv=”Content-Type” Content=”text/html; Charset=Windows-1251″>
<meta http-equiv=”Content-Language” Content=”ru”>

Так вот для того чтобы определить язык отдельно взятого текстового блока используют псевдокласс lang() – в круглых скобках которого собственно и указывается язык.

Язык может быть:

  • ru – Русский
  • en – Английский
  • de – Немецкий
  • fr – Французский
  • it – Итальянский

Всё вместе пишется так:

span:lang(en) {font-style: italic}

– здесь мы указали, что текст взятый в контейнер <span> английский и что он должен отображаться курсивом.

Пример:

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN” “http://www.w3.org/TR/html4/strict.dtd”>
<html>
<head>
<title>Псевдокласс lang</title>
<meta http-equiv=”Content-Type” Content=”text/html; Charset=Windows-1251″>
<meta http-equiv=”Content-Language” Content=”ru”>
<style type=”text/css”>
p:lang(ru) {color: #00f;} 
p:lang(en) {color: #f00;} 
</style>
</head>
<body>
<p lang=”ru”>Русский текст выделен синим</p>
<p lang=”en”>English text is chosen red</p>
</body>
</html>

Обратите внимание, что в теге, в нашем случая параграфе, мы указываем с помощью атрибута lang используемый язык и его стиль: <p lang=”en”>текст</p> прописанный в блоке CSS.

Так же псевдокласс lang позволяет определять вид кавычек для цитат (тег <q>) с помощью значения quotes – кавычки. В России привычно использовать двойные кавычки, в других странах дела обстоят иначе.

Пишется так:

q:lang(en) {quotes: “\201C” “\201D”}

В фигурных скобках после значения quotes указывается юникод символа/ов или просто смвол/ы для открывающей и закрывающей кавычки.

Пример:

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN” “http://www.w3.org/TR/html4/strict.dtd”>
<html>
<head>
<title>Псевдокласс lang. Цитаты.</title>
<meta http-equiv=”Content-Type” Content=”text/html; Charset=Windows-1251″>
<meta http-equiv=”Content-Language” Content=”ru”>
<style type=”text/css”>
div {
color:#000;
font-size: 24px;
}
q:lang(en) {quotes: “\201C” “\201D”}
q:lang(de) {quotes: “\201E” “\201C”}
q:lang(fr) {quotes: “\00AB” “\00BB”}
q:lang(ru) {quotes: “ёклмн..” “..ёпрст”}
</style>
</head>
<body>
<div>
<p>Обратите внимание на вид кавычек для цитат:<p>
<q>Цитата по умолчанию</q><br>
<q lang=”fr”>Французская цитата</q><br>
<q lang=”de”>Немецкая цитата</q><br>
<q lang=”en”>Английская цитата</q><br>
<q lang=”ru”>Русская цитата</q><br>
</div>
</body>
</html>

Полезные советы:

  • Псевдоклассы нельзя внедрять в HTML документ с помощью атрибута style. Можно только с помощью тега <style> в голове документа или внешнего CSS файла.
  • Если селектор, какого либо псевдокласса, явно не указывать, а написать вот так, например:

    :hover {color: #ff0}– то это будет значить, что действие данного псевдокласса будет распространятся на все элементы документа.

  • Браузер IE6 и ниже игнорирует практически все псевдоклассы.

Залишити відповідь