11 Визуальные эффекты

Содержание

11.1 Переполнение и усечение

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

Всякий раз, когда имеет место переполнение, свойство 'overflow' определяет то, обрезается ли блок по краю его отступа, и если это происходит, то обеспечивается ли механизм прокрутки для доступа к любому усеченному содержимому.

11.1.1 Переполнение: свойство 'overflow'

'overflow'
Значение:  visible | hidden | scroll | auto | inherit
Начальное значение:  visible
Область применения:  незамещаемые элементы уровня блока, ячейки таблицы и строковые элементы уровня блока
Наследование:  нет
Процентное задание значений:  Н/Д
Устройства:  визуальные
Вычисляемое значение:  как определено

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

visible
Это значение указывает на то, что содержимое не может усекаться, т.е. оно может отображаться за пределами структурного блока.
hidden
Это значение указывает на то, что содержимое усекается, и что интерфейсу пользователя не следует предоставлять инструмент прокрутки для просмотра содержимого, находящегося за пределами усеченной области.
scroll
Это значение указывает на то, что содержимое усекается и что агенту пользователя в случае использования явно отображаемого на экране механизма прокрутки (например, полосы прокрутки) следует отобразить этот механизм в пределах блока независимо от того, было ли произведено усечение его содержимого или нет. Это позволяет избегать проблем, связанных с появлением или исчезновением полос прокрутки, в динамическом окружении. Если свойству присвоено именно это значение, а конечным является устройство типа 'print', то содержимое, выходящее за пределы блока, может быть распечатано.
auto
Поведение, обусловленное заданием значения 'auto', определяется агентом пользователя, но следует предусмотреть возможность использования механизма прокрутки для переполняемых блоков.

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

Агенты пользователя должны применять свойство 'overflow', установленное для корневых элементов, на область просмотра. HTML агенты пользователя должны вместо этого применять свойства 'overflow' элемента BODY к области просмотра, если значение в HTML-элементе имеет значение 'visible'. Значение 'visible' при использовании для области просмотра должно интерпретироваться как 'auto'. Элемент, свойство которого распространено на область просмотра, должен иметь используемое значение свойства 'overflow' равным 'visible'.

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

Пример(ы):

Рассмотрим следующий пример вывода блока (<blockquote>) , размер которого превышает размер его контейнера (назначенного элементом <div>). Исходный документ имеет вид:


<div>
<blockquote>
<p>I didn't like the play, but then I saw
it under adverse conditions - the curtain was up.</p>
<cite>- Groucho Marx</cite>
</blockquote>
</div>

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


div { width : 100px; height: 100px;
      border: thin solid red;
      }

blockquote   { width : 125px; height : 100px;
      margin-top: 50px; margin-left: 50px; 
      border: thin dashed black
      }

cite { display: block;
       text-align : right; 
       border: none
       }

Начальным значением свойства 'overflow' является 'visible', поэтому <blockquote> будет форматироваться без усечения, например, как показано ниже:

Отображаемое переполнение   [D]

С другой стороны, если свойству 'overflow' элемента <div> присвоить значение 'hidden', то это приведет к тому, что контейнер произведет усечение <blockquote>:

Усеченное переполнение   [D]

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

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

Таблица стилей:


  container { position: relative; border: solid; }
  scroller { overflow: scroll; height: 5em; margin: 5em; }
  satellite { position: absolute; top: 0; }
  body { height: 10em; }

Фрагмент документа:


  <container>
   <scroller>
    <satellite/>
    <body/>
   </scroller>
  </container>

В данном примере, элемент "scroller" не будет прокручивать элемент "satellite", потому-что контейнер последнего находится за пределами элемента, у которого переполнение усечено и прокручивается.

11.1.2 Усечение: свойство 'clip'

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

'clip'
Значение:  <форма> | auto | inherit
Начальное значение:  auto
Область применения:  абсолютно позиционированные элементы
Наследование:  нет
Процентное задание значений:  Н/Д
Устройства:  визуальные
Вычисляемое значение:  Для значений прямоугольника, прямоугольник состоящий из четырех вычисленных длин; иначе, как определено

Свойство 'clip' применяется только к абсолютно позиционированным элементам. Значения имеют следующий смысл:

auto
Элемент не усекается.
<форма>
В CSS 2.1 единственным допустимым значением типа <форма> является: rect(<сверху>, <справа>, <снизу>, <слева>) где <сверху> и <снизу> определяют смещение от края верхней границы блока, а <справа>, и <слева> – определяют смещение от края левой границы блока в тексте с направлением "слева-направо" и от края правой границы блока в тексте с направлением "справа-налево". Авторам следует разделять запятыми значения смещений. Агент пользователя должен поддерживать разделение запятыми, но может также поддерживать и разделение без запятых, поскольку в предыдущей редакции данной спецификации не было дано однозначных указаний по данному вопросу.

<сверху>, <справа>, <снизу> и <слева> могут иметь либо значение <длина>, либо значение 'auto'. Допускается использование отрицательных значений длины. Значение 'auto' означает, что данный край области усечения будет таким же, как и край блока границы, сгенерированного элементом (т.е., значение 'auto' означает то же, что и значения <сверху> и <слева> (в тексте "слева-направо", <справа> – в тексте "справа-налево") равные '0', то же, что и вычисленное значение высоты плюс сумма ширин вертикальных отступов и границ для <снизу>, и то же, что и вычисленное значение ширины плюс сумма ширин горизонтальных отступов и границ для <справа> (в тексте "слева-направо", <слева> – в тексте "справа-налево"), так что если все четыре будут иметь значение 'auto', то в результате область усечения будет такой же, как блок границ элемента).

Если координаты задаются с точностью до пикселя, то следует позаботиться о том, чтобы на экране не оставался видимым ни один пиксель в случае, когда <слева> и <справа> имеют одинаковые значения (или <сверху> и <снизу> имеют одинаковые значения), и наоборот, чтобы не было скрыто ни одного пикселя в пределах блока границ элемента, когда эти значения равны 'auto'.

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

Предки элемента могут так же усекать часть своего содержимого (например, через свое свойство 'clip' и/или если значение их свойство 'overflow' отлично от 'visible'); что будет представляться – зависит от совместного применения свойств.

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

Пример(ы):

Следующие два правила:


p { clip: rect(5px, 40px, 45px, 5px); }
p { clip: rect(5px, 55px, 45px, 5px); }

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

Две области усечения   [D]

Примечание. В CSS 2.1 все области усечения имеют прямоугольную форму. В дальнейшем предполагается разрешить использование непрямоугольных областей усечения. Будущие обновления могут также повторно представить синтаксис для смещения форм от каждого края вместо смещения от точки.

11.2 Видимость: свойство 'visibility'

'visibility'
Значение:  visible | hidden | collapse | inherit
Начальное значение:  visible
Область применения:  все элементы
Наследование:  да
Процентное задание значений:  Н/Д
Устройства:  визуальные
Вычисляемое значение:  как определено

Свойство 'visibility' определяет, будет ли осуществляться представление блоков, порождаемых элементом, или нет. Невидимые блоки по-прежнему влияют на расположение (для запрета генерации блоков свойству 'display' необходимо присвоить значение 'none'). Значения имеют следующий смысл:

visible
Генерируемый блок является видимым.
hidden
Генерируемый блок является невидимым (полностью прозрачным, ничего не прорисовывается), но по-прежнему влияет на расположение. Кроме того, потомки элемента будут видимы, если они будут иметь свойство 'visibility: visible'.
collapse
Обратитесь к разделу, посвященному динамическим преобразованиям строк и столбцов в таблицах. Если это значение используются с элементами, отличными от строк, групп строк, столбцов или групп столбцов, то его действие аналогично действию значения 'hidden'.

Данное свойство можно использовать в сочетании со скриптами для создания динамических эффектов.

В следующем примере нажатие одной кнопки, расположенной в форме, активизирует заданный автором скрипт, вызывая тем самым появление соответствующих блоков и исчезновение других. Т.к. эти блоки имеют одинаковый размер и местоположение, то создается эффект замены одного блока другим. (Код скрипта написан на некоем гипотетическом языке скриптов. Он может влиять или не влиять на агенты пользователей, совместимые с CSS.)


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
<HEAD><TITLE>Пример динамического отображения</TITLE>
<META 
 http-equiv="Content-Script-Type"
 content="application/x-hypothetical-scripting-language">
<STYLE type="text/css">
<!--
   #container1 { position: absolute; 
                 top: 2in; left: 2in; width: 2in }
   #container2 { position: absolute; 
                 top: 2in; left: 2in; width: 2in;
                 visibility: hidden; }
-->
</STYLE>
</HEAD>
<BODY>
<P>Выберите подозреваемого:</P>
<DIV id="container1">
   <IMG alt="Аль Капоне" 
        width="100" height="100" 
        src="подозреваемый1.png">
   <P>Имя: Аль Капоне</P>
   <P>Местожительство: Чикаго</P>
</DIV>

<DIV id="container2">
   <IMG alt="Лаки Лючиано" 
        width="100" height="100" 
        src="подозреваемый2.png">
   <P>Имя: Лаки Лючиано</P>
   <P>Местожительство: Нью-Йорк</P>
</DIV>

<FORM method="post" 
      action="http://www.suspect.org/process-bums">
   <P>
   <INPUT name="Capone" type="button" 
          value="Капоне" 
          onclick='show("container1");hide("container2")'>
   <INPUT name="Luciano" type="button" 
          value="Лючиано" 
          onclick='show("container2");hide("container1")'>
</FORM>
</BODY>
</HTML>