Spec-Zone.ru › CSS

Логические свойства отступов, границ и полей

Модуль логически́х свойств и значений CSS определяет сопоставления, относящиеся к потоку, для различных свойств отступов, границ и полей, а также их сокращённых форм. В этом руководстве мы рассмотрим их.

Если вы посмотрите на модуль логически́х свойств и значений, вы можете заметить, что список свойств модуля очень длинный. Это в основном потому, что для отступов, границ и полей есть по четыре значения для каждой стороны, плюс все значения сокращённых форм.

Сопоставления для отступов, границ и полей

Модуль описывает сопоставления каждого логического значения с его физическим аналогом. В таблице ниже показаны эти значения, когда writing-mode равняется horizontal-tb — с направлением слева направо. Следовательно, направление по строке выполняется горизонтально — слева направо — и margin-inline-start эквивалентно margin-left.

Если вы использовали horizontal-tb режим записи с направлением текста справа налево, тогда margin-inline-start будет тем же, что и margin-right, а в вертикальном режиме записи оно будет тем же, что и использование margin-top.

Логическое свойство Физическое свойство
border-block-end border-bottom
border-block-end-color border-bottom-color
border-block-end-style border-bottom-style
border-block-end-width border-bottom-width
border-block-start border-top
border-block-start-color border-top-color
border-block-start-style border-top-style
border-block-start-width border-top-width
border-inline-end border-right
border-inline-end-color border-right-color
border-inline-end-style border-right-style
border-inline-end-width border-right-width
border-inline-start border-left
border-inline-start-color border-left-color
border-inline-start-style border-left-style
border-inline-start-width border-left-width
border-start-start-radius border-top-left-radius
border-end-start-radius border-bottom-left-radius
border-start-end-radius border-top-right-radius
border-end-end-radius border-bottom-right-radius
margin-block-end margin-bottom
margin-block-start margin-top
margin-inline-end margin-right
margin-inline-start margin-left
padding-block-end padding-bottom
padding-block-start padding-top
padding-inline-end padding-right
padding-inline-start padding-left

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

Свойство Назначение
border-block Устанавливает border-color, border-style и border-width для обеих границ блока.
border-block-color Устанавливает border-color для обеих границ блока.
border-block-style Устанавливает border-style для обеих границ блока.
border-block-width Устанавливает border-width для обеих границ блока.
border-inline Устанавливает border-color, -style, и -width для обеих внутренних границ.
border-inline-color Устанавливает border-color для обеих внутренних границ.
border-inline-style Устанавливает border-style для обеих внутренних границ.
border-inline-width Устанавливает border-width для обеих внутренних границ.
margin-block Устанавливает все отступы margin блока.
margin-inline Устанавливает все внутренние margin.
padding-block Устанавливает отступ блока padding.
padding-inline Устанавливает внутренний отступ padding.

Примеры отступов

Сопоставленные свойства отступов margin-inline-start, margin-inline-end, margin-block-start и margin-inline-end можно использовать вместо их физических аналогов.

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

Одна рамка использует физические свойства, а другая — логические. Попробуйте изменить свойство direction на rtl, чтобы рамки отображались в режиме справа налево; отступы первой рамки останутся на месте, а отступы по строке во второй рамке поменяются.

Также попробуйте изменить writing-mode с horizontal-tb на vertical-rl. Обратите внимание, как отступы первой рамки остаются на месте, а во второй рамке они меняются в зависимости от направления текста.

<div class="container">
  <div class="inner">
    <div class="physical box">
      margin-top: 5px<br />
      margin-right: 0<br />
      margin-bottom: 2em<br />
      margin-left: 50px
    </div>
  </div>
  <div class="inner">
    <div class="logical box">
      margin-block-start: 5px<br />
      margin-inline-end: 0<br />
      margin-block-end: 2em<br />
      margin-inline-start: 50px
    </div>
  </div>
</div>
.box {
  writing-mode: horizontal-tb;
  direction: ltr;
}

.physical {
  margin-top: 5px;
  margin-right: 0;
  margin-bottom: 2em;
  margin-left: 50px;
}

.logical {
  margin-block-start: 5px;
  margin-inline-end: 0;
  margin-block-end: 2em;
  margin-inline-start: 50px;
}

Сокращения отступов

Доступны сокращения для изменения обеих внутренних или обеих граничных сторон соответственно, margin-inline и margin-block. Каждое принимает два значения. Первое значение применяется к началу этого измерения, второе — к концу. Если задано только одно значение, оно применяется к обоим.

В горизонтальном режиме записи этот CSS применит 5px отступ к верхней части рамки и 10px отступ к нижней.

.box {
  margin-block: 5px 10px;
}

Примеры отступов

Отображаемые свойства отступов padding-inline-start, padding-inline-end, padding-block-start и padding-inline-end можно использовать вместо их физических аналогов.

В этом примере две области. Одна имеет заданные физические свойства отступов, а другая использует логические свойства отступов. При writing-mode horizontal-tb обе области должны отображаться одинаково.

Попробуйте изменить свойство direction на rtl, чтобы области отображались справа налево. Отступы первой области останутся на тех же местах, а отступы второй области по inline-размеру изменятся.

Вы также можете изменить writing-mode с horizontal-tb на vertical-rl. Обратите внимание, как отступы первой области остаются на тех же местах, а отступы второй области меняются в соответствии с направлением текста.

<div class="container">
  <div class="physical box">
    padding-top: 5px<br />
    padding-right: 0<br />
    padding-bottom: 2em<br />
    padding-left: 50px
  </div>

  <div class="logical box">
    padding-block-start: 5px<br />
    padding-inline-end: 0<br />
    padding-block-end: 2em<br />
    padding-inline-start: 50px
  </div>
</div>
.box {
  writing-mode: horizontal-tb;
  direction: ltr;
}

.physical {
  padding-top: 5px;
  padding-right: 0;
  padding-bottom: 2em;
  padding-left: 50px;
}

.logical {
  padding-block-start: 5px;
  padding-inline-end: 0;
  padding-block-end: 2em;
  padding-inline-start: 50px;
}

Сокращённые записи отступов

Как и с отступами, существуют сокращённые записи для отступов — padding-inline и padding-block — которые позволяют задать отступы для двух inline- и двух block-измерений соответственно.

В горизонтальном writing-mode, этот CSS применит 5px отступа к верхней части области и 10px отступа к нижней части:

.box {
  padding-block: 5px 10px;
}

Примеры границ

Свойства границ — основная причина, почему в этом модуле так много свойств, так как он предоставляет логические свойства цвета, ширины и стиля границы для каждой стороны области, а также сокращённые записи для задания всех трёх значений для каждой стороны. Как и с отступами и полями, существует отображаемая версия каждого физического свойства.

Демо ниже использует некоторые подробные значения и три сокращённых значения. Как и в других демо, попробуйте изменить свойство direction на rtl, чтобы области отображались справа налево, или изменить writing-mode с horizontal-tb на vertical-rl.

<div class="container">
  <div class="physical box">Borders using physical properties.</div>
  <div class="logical box">Borders using logical properties.</div>
</div>
.box {
  writing-mode: horizontal-tb;
  direction: ltr;
}

.physical {
  border-top: 2px solid hotpink;
  border-right-style: dotted;
  border-right-color: goldenrod;
  border-right-width: 5px;
  border-bottom: 4px double black;
  border-left: none;
}

.logical {
  border-block-start: 2px solid hotpink;
  border-inline-end-style: dotted;
  border-inline-end-color: goldenrod;
  border-inline-end-width: 5px;
  border-block-end: 4px double black;
  border-inline-start: none;
}

Сокращённые записи границ

Существуют сокращённые записи для задания ширины, стиля и цвета блока или inline-размера, а также сокращённые записи для задания всех трёх значений в блоке или inline-размере. Нижеприведённый код в режиме горизонтального написания задаст 2px green solid границу для верхней и нижней части области и 4px dotted purple границу для левой и правой части.

.box {
  border-block: 2px solid green;
  border-inline-width: 4px;
  border-inline-style: dotted;
  border-inline-color: rebeccapurple;
}

Свойства border-radius, относительные к направлению текста

В модуле есть эквиваленты, относительные к направлению текста, для подробных свойств border-radius. В примере ниже, в горизонтальном writing-mode, будет задан радиус скругления верхней правой границы 1em, нижней правой 0, нижней левой 20px и верхней левой 40px.

.box {
  border-end-start-radius: 1em;
  border-end-end-radius: 0;
  border-start-end-radius: 20px;
  border-start-start-radius: 40px;
}

Указание логических значений для синтаксиса сокращённой записи из четырёх значений

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

Использование любой сокращённой записи из четырёх значений, такой как margin, padding, или border, в настоящее время будет использовать физические версии, поэтому, если важно следовать направлению документа, используйте подробные свойства.

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_logical_properties_and_values/Margins_borders_padding

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API