Логические свойства для размеров
В этом руководстве мы объясним взаимосвязи, относящиеся к потоку, между свойствами физических размеров и логическими свойствами, используемыми для задания размеров элементов на наших страницах.
При указании размера элемента модуль логический свойства и значения CSS позволяет указать размер, связанный с потоком текста (строчный и блочный), а не с физическими размерами, относящимися к физическим размерам по горизонтали и вертикали (например, слева и справа). Хотя эти взаимосвязи, связанные с потоком, могут стать стандартными для многих из нас, в дизайне вы можете использовать как физические, так и логические размеры. Возможно, вы захотите, чтобы некоторые элементы всегда относились к физическим размерам независимо от направления письма.
Сопоставления для размеров
В таблице ниже представлены сопоставления между логическими и физическими свойствами. Эти сопоставления предполагают, что вы находитесь в horizontal-tb режиме написания, таком как английский или арабский, в этом случае width будет сопоставлен с inline-size.
Если вы находитесь в вертикальном режиме написания, то inline-size будет сопоставлен с height.
| Логическое свойство | Физическое свойство |
|---|---|
inline-size | width |
block-size | height |
min-inline-size | min-width |
min-block-size | min-height |
max-inline-size | max-width |
max-block-size | max-height |
Пример ширины и высоты
Логические сопоставления для width и height представляют собой inline-size, которое задаёт длину в строчном измерении, и block-size, которое задаёт длину в блочном измерении. При работе в английском языке замена width на inline-size и height на block-size даст тот же макет.
В примере ниже writing-mode установлено на horizontal-tb. Измените его на vertical-rl, и вы увидите, что первый пример — использующий width и height — сохраняет тот же размер по каждому измерению, несмотря на то, что текст стал вертикальным. Второй пример — использующий inline-size и block-size — будет следовать направлению текста, как если бы весь блок был повернут.
<div class="container">
<div class="physical box">I have a width of 200px and a height of 100px.</div>
<div class="logical box">
I have an inline-size of 200px and a block-size of 100px.
</div>
</div>
.box {
writing-mode: horizontal-tb;
}
.physical {
width: 200px;
height: 100px;
}
.logical {
inline-size: 200px;
block-size: 100px;
}
Пример min-width и min-height
Также существуют сопоставления для min-width и min-height — это min-inline-size и min-block-size. Они работают так же, как свойства inline-size и block-size, но задают минимальный, а не фиксированный размер.
Попробуйте изменить пример ниже на vertical-rl, как и в первом примере, чтобы увидеть его эффект. В первом примере используется min-height, а во втором — min-block-size.
<div class="container">
<div class="physical box">
I have a width of 200px and a min-height of 5em.
</div>
<div class="logical box">
I have an inline-size of 200px and a min-block-size of 5em.
</div>
</div>
.box {
writing-mode: horizontal-tb;
}
.physical {
width: 200px;
min-height: 5em;
}
.logical {
inline-size: 200px;
min-block-size: 5em;
}
Пример max-width и max-height
Наконец, вы можете использовать max-inline-size и max-block-size в качестве логических замен для max-width и max-height. Попробуйте поэкспериментировать с примером ниже аналогично.
<div class="container"> <div class="physical box">I have a max-width of 200px.</div> <div class="logical box">I have an max-inline-size of 200px.</div> </div>
.box {
writing-mode: horizontal-tb;
}
.physical {
max-width: 200px;
}
.logical {
max-inline-size: 200px;
}
Логические ключевые слова для изменения размера
Свойство resize устанавливает возможность изменения размера элемента и имеет физические значения horizontal и vertical. Свойство resize также имеет логические ключевые слова. Используя resize: inline можно изменять размер в строчном измерении, а resize: block позволяет изменять размер в блочном измерении.
Ключевое слово both для свойства resize работает как в физическом, так и в логическом представлении. Оно устанавливает оба размера одновременно. Попробуйте поэкспериментировать с примером ниже.
<div class="container">
<div class="physical box">
I have a width of 200px and a height of 100px. I can be resized
horizontally.
</div>
<div class="logical box">
I have an inline-size of 200px and a block-size of 100px. I can be resized
in the inline direction.
</div>
</div>
.box {
writing-mode: horizontal-tb;
overflow: scroll;
}
.physical {
width: 200px;
height: 100px;
resize: horizontal;
}
.logical {
inline-size: 200px;
block-size: 100px;
resize: inline;
}
© 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/Sizing