18c0693f

Определение "содержащего блока"


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

Содержащий блок элемента определяется так:

  • Содержащий блок (называемый начальным содержащим блоком), в котором находится корневой элемент, выбирается пользовательским агентом (ПА).
  • Для других элементов, если только элемент не позиционирован абсолютно, содержащий блок формируется краем содержимого бокса ближайшего предка уровня блока.
  • Если элемент имеет 'position: fixed', то содержащий блок устанавливается портом просмотра.
  • Если элемент имеет 'position: absolute', то содержащий блок устанавливается ближайшим предком с 'position', отличным от 'static', следующим образом:
    1. Если предок - уровня блока, содержащий блок формируется краем заполнения

      предка.

    2. Если предок - инлайн-уровня, содержащий блок зависит от свойства 'direction' предка:

    1. Если 'direction'

      - 'ltr', верхний и левый края содержащего блока являются верхним и левым краями первого бокса, генерируемого предком, а нижний и правый края являются нижним и правым краями содержимого последнего бокса предка.

    2. Если 'direction'

      - 'rtl', верхний и правый края содержащего блока являются верхним и правым краями первого бокса, генерируемого предком, а нижний и левый края являются нижним и левым краями содержимого последнего бокса предка.

    Если такого предка нет, край содержимого бокса корневого элемента устанавливает содержащий блок.

    Пример(ы):

    Содержащие блоки (СБ) без позиционирования в этом документе:

    <HTML> <HEAD> <TITLE>Illustration of containing blocks</TITLE> </HEAD> <BODY id="body"> <DIV id="div1"> <P id="p1">This is text in the first paragraph...</P> <P id="p2">This is text <EM id="em1"> in the <STRONG id="strong1">second</STRONG> paragraph.</EM></P> </DIV> </BODY> </HTML>

    устанавливаются так:

    Для бокса, генерируемого

    СБ устанавливается
    bodyначальным СБ (зависит от ПА)
    div1body
    p1div1
    p2div1
    em1p2
    strong1p2
    <
    Если позиция "div1":

    #div1 { position: absolute; left: 50px; top: 50px }

    то его содержащий блок - уже не "body"; им становится начальный содержащий блок (поскольку отсутствуют другие позиционированные боксы предка).

    Также, если позиция "em1":

    #div1 { position: absolute; left: 50px; top: 50px } #em1 { position: absolute; left: 100px; top: 100px }

    таблица содержащих блоков будет:

    Для бокса, генерируемого
    СБ устанавливается
    bodyначальным СБ
    div1начальным СБ
    p1div1
    p2div1
    em1div1
    strong1em1
    При позиционировании "em1", его содержащим блоком становится ближайший позиционированный бокс предка (т.е. тот, который сгенерирован "div1").