Статьи / Веб-разработка / CSS по шагам / Шаг 15. Наследование
Шаг 15. НаследованиеПросмотров: 1723
15.04.2009 16:42
 
Наследованием называется перенос правил форматирования для элементов, находящихся внутри других. Такие элементы являются дочерними, и они наследуют некоторые стилевые свойства своих родителей, внутри которых располагаются.

Разберем наследование на примере таблицы. Особенностью таблиц можно считать строгую иерархическую структуру тегов. Вначале следует контейнер <TABLE> внутри которого добавляются теги <TR>, а затем идет тег <TD>. Если в стилях для селектора TABLE задать цвет текста, то он автоматически устанавливается для содержимого ячеек, как показано в примере 15.1.

Пример 15.1. Наследование параметров цвета

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  <title>Наследование</title>
  <style type="text/css">
   TABLE {
    color: red; /* Цвет текста */
    background: #333; /* Цвет фона таблицы */
    border: 2px solid red; /* Красная рамка вокруг таблицы */
   }
  </style>
</head>
<body>
  <table cellpadding="4" cellspacing="0">
   <tr>
    <td>Ячейка 1</td><td>Ячейка 2</td>
   </tr>
   <tr>
    <td>Ячейка 3</td><td>Ячейка 4</td>
   </tr>
  </table>
</body>
</html>


В данном примере для всей таблицы установлен красный цвет текста, поэтому в ячейках он также применяется, поскольку тег <TD> наследует свойства тега <TABLE>. При этом следует понимать, что не все стилевые атрибуты наследуются. Так, параметр border задает рамку вокруг таблицы в целом, но никак не вокруг ячеек. Аналогично не наследуется значение параметра background. Тогда почему цвет фона у ячеек в данном примере черный, раз он не наследуется? Дело в том, что у атрибута background в качестве значения по умолчанию выступает transparent, т.е. прозрачность. Таким образом, если аргумент явно не задан, то цвет фона родительского элемента «проглядывает» сквозь дочерний элемент.

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

Наследование позволяет задавать значения некоторых параметров единожды, определяя их для родителей верхнего уровня. Допустим, требуется установить цвет и шрифт для основного текста. Достаточно воспользоваться селектором BODY, добавить желаемые атрибуты для него, и цвет текста внутри абзацев и других текстовых элементов поменяется автоматически (пример 15.2).

Пример 15.2. Параметры текста для всей веб-страницы

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  <title>Наследование</title>
  <style type="text/css">
   BODY {
    font-family: Arial, Helvetica, sans-serif; /* Гарнитура шрифта */
    color: navy; /* Синий цвет текста */
   }
  </style>
</head>
<body>
  <p>Цвет текста этого абзаца синий.</p>
</body>
</html>


В данном примере рубленый шрифт и цвет текста абзацев устанавливается с помощью селектора BODY. Благодаря наследованию уже нет нужды задавать цвет для каждого элемента документа в отдельности. Однако бывают варианты, когда требуется все-таки изменить цвет для отдельного контейнера. В этом случае придется переопределять нужные параметры явно, как показано в примере 15.3.

Пример 15.3. Изменение свойств наследуемого элемента

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  <title>Наследование</title>
  <style type="text/css">
   BODY {
    font-family: Arial, Helvetica, sans-serif; /* Гарнитура шрифта */
    color: navy; /* Синий цвет текста */
   }
   P.red {
    color: maroon; /* Темно-красный цвет текста */
   }
  </style>
</head>
<body>
  <p>Цвет текста этого абзаца синий.</p>
  <p class="red">А у этого абзаца цвет текста уже другой.</p>
</body>
</html>


В данном примере цвет первого абзаца наследуется от селектора BODY, а для второго установлен явно через класс с именем red.

Автор: Влад Мержевич
Источник: htmlbook.ru