Css масштабирование: масштабирование элемента — учебник CSS
Масштабирование изображений на CSS / Хабр
Приветствую. Представляю вашему вниманию перевод статьи «CSS-Only Full-Width Responsive Images 2 Ways», опубликованной 14 апреля 2020 года автора Stephanie Eckles
Это третья статья из серии, посвящённой ознакомлению с современными способами решения CSS-проблем, с которыми я сталкивалась на протяжении более 13 лет в роли фронтенд-разработчика.
В не очень далёком прошлом, когда JQuery ещё был «Царём горы», наиболее популярным инструментом для реализации отзывчивости фоновых изображений был JQuery-плагин Backstretch
Я использовала этот плагина где-то на 30 сайтах, пока приведённое ниже свойство не получило достаточную поддержку браузерами (а если точнее, пока существенно не снизилась доля использования IE ниже 9 версии). И свойство это:
background-size: cover;
Согласно данным caniuse.com, данное свойство и значение поддерживается современными браузерами уже более 9 лет. Но вебсайты, использующие упомянутый плагин Backstretch или собственное подобное решение, могли до сих пор не обновиться.
Альтернативный метод использует стандартный тег img
и магию свойства
object-fit: cover;
Давайте рассмотрим, как использовать каждое из решений и узнаем, в каких ситуациях следует отдавать предпочтение каждому из них.
Использование background-size: cover
В течение 10 лет я создавала глубоко настраиваемые темы и плагины для корпоративных сайтов, разработанных на WordPress. Рассмотрим сценарий использования свойства background-size: cover
на примере карточки одного из тех шаблонов.
Начнём с примера, когда фоновое изображение элемента задаётся через background-image
в HTML-атрибуте style
. Рекомендуется использовать aria-label
, который заменит атрибут alt
, присутствующий в тегах img
.
<article>
<div aria-label="Preview of Whizzbang Widget"></div>
<div>
<h4>Whizzbang Widget SuperDeluxe</h4>
<p>
Liquorice candy macaroon soufflé jelly cake. Candy canes ice cream
biscuit marzipan. Macaroon pie sesame snaps jelly-o.
</p>
<a href="#">Add to Cart</a>
</div>
</article>
Соответственно, CSS-стили могут быть следующими. Здесь используется трюк с
, позволяющий задать соотношение сторон 16:9 для div-элемента, содержащего изображение:
.card__img {
background-size: cover;
background-position: center;
/* Соотношение сторон 16:9 */
padding-bottom: 62.5%;
}
Всё вместе это будет выглядеть следующим образом:
Использование object-fit: cover
Это новый способ, который, согласно данным caniuse, можно использовать без полифила, только если вам не нужна поддержка IE и Edge < 16
Это свойство применяется непосредственно к тегу img
, поэтому мы обновляем HTML-нашей карточки на следующий, меняя тег div
на img
и атрибут aria-label
на alt
:
<article>
<img alt="Preview of Whizzbang Widget" src="https://placeimg.com/320/240/tech"/>
<div>
<h4>Whizzbang Widget SuperDeluxe</h4>
<p>
Liquorice candy macaroon soufflé jelly cake. Candy canes ice cream
biscuit marzipan. Macaroon pie sesame snaps jelly-o.
</p>
<a href="#">Add to Cart</a>
</div>
</article>
Затем CSS-код дополняется свойством height
, которое будет ограничивать изображение любого размера так, чтобы оно имело заданное соотношение сторон. Если собственный размер изображения больше заданных ограничений, срабатывает свойство object-fit
, которое по умолчанию центрирует изображение внутри границ, созданных контейнером карточки и свойством
:
.card__img {
object-fit: cover;
height: 30vh;
}
В результате получаем следующее:
Когда использовать каждое из решений
Если нужна поддержка старых версий IE, то если не подключать полифил, вы ограничены лишь решением background-size
(мне грустно говорить это в 2020 году, но это всё ещё может быть актуально для корпоративного сектора и сферы образования).
Оба решения позволяют получить полноразмерное адаптивное изображение, основанное на контролируемом вами соотношении сторон.
Когда следует выбирать background-size
- при использовании с контейнером, в котором предполагается размещать какое-то содержимое. Например, с шапкой сайта
- если необходимо применить дополнительные эффекты с помощью псевдоэлементов, которые нельзя использовать с тегом
img
- если изображение носит декоративный характер и не потребности в семантике тега
img
Когда следует выбирать object-fit
:
- использование стандартного тега
img
лучше всего подходит для контекстных изображений, позволяя сохранить семантику
Масштабирование картинок | WebReference
Если для элемента <img> не задать атрибуты width и height, то браузер самостоятельно определит ширину и высоту изображения после загрузки файла и покажет его в исходном размере. Рисунок в формате SVG браузеры, за исключением IE, выводят на всю доступную ширину.
Изменение масштаба и пропорций изображения делается как через атрибуты <img>, так и через стили.
Использование атрибутов
Любую картинку можно как увеличивать, так и уменьшать в размерах, задавая значение высоты или ширины в пикселях или процентах от размера родителя. Если установлена только ширина или высота, то вторая величина вычисляется автоматически исходя из пропорций картинки. Два заданных значения могут исказить пропорции, особенно если они заданы неверно. В примере 1 показаны разные варианты задания размеров в пикселях.
Пример 1. Размеры в пикселях
<!DOCTYPE html> <html> <head> <meta charset=»utf-8″> <title>Изображения</title> </head> <body> <img src=»image/redcat.jpg» alt=»Размеры не заданы»> <img src=»image/redcat.jpg» alt=»Задана ширина»> <img src=»image/redcat.jpg» alt=»Задана ширина и высота»> </body> </html>Рис. 1. Размеры фотографии
Аналогичным образом задаются размеры в процентах от ширины родительского элемента, таким образом можно установить картинку на всю ширину окна браузера. В примере 2 показано добавление трёх фотографий в ряд, ширина которых привязана к ширине окна.
Пример 2. Размеры в процентах
<!DOCTYPE html> <html> <head> <meta charset=»utf-8″> <title>Изображения</title> <style> figure { width: 27%; /* Ширина */ float: left; /* Выстраиваем элементы по горизонтали */ margin: 0 0 0 3.5%; /* Отступ слева */ background: #f0f0f0; /* Цвет фона */ border-radius: 5px; /* Радиус скругления */ padding: 2%; /* Поля */ } figure:first-child { margin-left: 0; /* Убираем отступ для первого элемента */ } </style> </head> <body> <figure> <img src=»image/redcat.jpg» alt=»Рыжая кошка»> </figure> <figure> <img src=»image/redcat.jpg» alt=»Рыжая кошка»> </figure> <figure> <img src=»image/redcat.jpg» alt=»Рыжая кошка»> </figure> </body> </html>Рис. 2. Масштабирование фотографий
Масштабирование через стили
Стили удобно задействовать, когда нужно массово задать одинаковые размеры для множества изображений, тогда не придётся указывать индивидуальные размеры для каждой картинки через width и height. Но если у вас большое количество иллюстраций разного размера, то стили здесь никак не помогут. Они пригодятся, например, для иконок одинаковой ширины и высоты или когда размеры задаются в процентах, как это показано выше. В примере 3 приведён стиль для изменения размеров всех изображений внутри элемента <figure>.
Пример 3. Размеры через стили
figure img {
width: 100%; /* Ширина в процентах */
}
Когда для одного элемента одновременно указывается атрибут width и стилевое свойство width, то стили имеют приоритет выше.
Интерполяция
Предположим, что у нас есть растровая картинка размером 200х200 пикселей и мы увеличиваем её пропорционально по ширине в два раза. Площадь изображения и общее количество пикселей вырастет при этом в четыре раза. Новые пиксели добавляются браузером самостоятельно исходя из набора уже имеющихся. Способ получения этих новых пикселей называется интерполяцией изображения. Надо понимать, что качество очень сильно зависит от самого изображения, масштаба и алгоритма, но обычно результат получается хуже оригинала.
Похожее происходит и при уменьшении изображения, только браузеру уже приходится не добавлять, а выбрасывать часть пикселей.
Алгоритм интерполяции заложен в браузер и может быть изменён с помощью свойства image-rendering. К сожалению, браузеры пока слабо поддерживают это свойство, поэтому приходится указывать несколько разных значений. В примере 4 показано изменение алгоритма, чтобы переходы цветов не размывались, а оставались чёткими. В браузерах Chrome и Opera пример пока не работает, ожидается что поддержка свойства появится в новых версиях.
Пример 4. Изменение алгоритма интерполяции
<!DOCTYPE html> <html> <head> <meta charset=»utf-8″> <title>Изображения</title> <style> img { border: 1px solid #ccc; } .edge { image-rendering: -moz-crisp-edges; /* Firefox */ -ms-interpolation-mode: nearest-neighbor; /* IE */ image-rendering: crisp-edges; /* Стандартное свойство */ } </style> </head> <body> <img src=»image/russia.png» alt=»Флаг России»> <img src=»image/russia.png» alt=»Флаг России»> </body> </html>Рис. 3. Вид картинок после увеличения масштаба
Вписывание картинки в область
Порой изображения необходимо вписать в область заданных размеров, например, для создания слайдшоу — плавной смены нескольких фотографий. Есть два основных способа. Первый метод простой и работает во всех браузерах. Задаём желаемые размеры области и скрываем всё, что в неё не помещается с помощью свойства overflow со значением hidden (пример 5).
Пример 5. Использование overflow
<!DOCTYPE html> <html> <head> <meta charset=»utf-8″> <title>Изображения</title> <style> figure { width: 100%; /* Ширина области */ height: 400px; /* Высота области */ margin: 0; /* Обнуляем отступы */ overflow: hidden; /* Прячем всё за пределами */ min-width: 600px; /* Минимальная ширина */ } figure img { width: 100%; /* Ширина изображений */ margin: -10% 0 0 0; /* Сдвигаем вверх */ } </style> </head> <body> <figure> <img src=»image/redcat.jpg» alt=»Рыжая кошка»> </figure> </body> </html>Результат примера показан на рис. 4. Область имеет высоту 400 пикселей и занимает всю доступную ей ширину. Для фотографии внутри <figure> устанавливаем ширину 100% и сдвигаем её чуть вверх, чтобы она лучше выглядела. Поскольку высота области фиксирована, то при уменьшении окна браузера до некоторого предела высота фотографии окажется меньше 400 пикселей и под ней появится пустое пространство. Поэтому вводим свойство min-width чтобы этого избежать.
Рис. 4. Фотография внутри области заданных размеров
Второй способ не так универсален, поскольку свойство object-fit не поддерживается в IE, а Firefox его понимает только с версии 36. Зато object-fit позволяет более аккуратно вписать изображение в заданную область. В примере 6 показан стиль для этого. Задействовано значение cover, оно увеличивает или уменьшает изображение так, чтобы оно всегда полностью заполняла всю область.
Пример 6. Использование object-fit
figure {
width: 100%; /* Ширина области */
height: 400px; /* Высота области */
margin: 0; /* Обнуляем отступы */
}
figure img {
width: 100%; /* Ширина изображений */
height: 100%; /* Высота изображении */
object-fit: cover; /* Вписываем фотографию в область */
}
Автор и редакторы
Автор: Влад Мержевич
Последнее изменение: 11.03.2020
Редакторы: Влад Мержевич
Масштабирование / масштабирование элемента DOM и занимаемого им пространства с помощью CSS3 transform scale()
HTML (спасибо Рори)
<!DOCTYPE html>
<html>
<head>
<meta name="description" content="Sandbox for Stack Overflow question http://stackoverflow.com/q/10627306/578288" />
<meta charset=utf-8 />
<title>Sandbox for SO question about scaling an element both visually and dimensionally</title>
</head>
<body>
<div>
<div>
before
</div>
<div>
<div>something inside</div>
<div><img src="http://placekitten.com/g/150/100"></div>
<div>another something</div>
</div>
<div>
after
</div>
</div>
</body>
</html>
CSS (все еще начинается с базы Рори)
body {
font-size: 13px;
background-color: #fff;
}
#wrapper {
width: 50%;
margin-left: auto;
margin-right: auto;
border: 0.07692307692307693em solid #888;
padding: 1.1538461538461537em;
}
.surrounding-content {
border: 0.07692307692307693em solid #eee;
}
#content-to-scale {
border: 0.07692307692307693em solid #bbb;
width: 10em;
}
#content-to-scale {
font-size: 1.1em;
}
#content-to-scale img {
width: auto;
height: auto;
min-width: 100%;
max-width: 100%;
}
Объяснение:
Я использую размер шрифта и ems для «масштабирования» размеров дочерних элементов.
Ems-это единицы измерения, которые относятся к размеру шрифта текущего контекста.
Итак, если я скажу, что у меня размер шрифта 13px и граница 1 (желаемая ширина границы в пикселях) разделена by 13 (размер шрифта текущего контекста также в пикселях) = 0,07692307692307693 em браузер должен отображать границу 1px
для эмуляции заполнения 15px я использую ту же формулу, (желаемые пиксели)/(размер шрифта текущего контекста в пикселях) = желаемый ems. 15 / 13 = 1.1538461538461537 ЭМ
чтобы приручить масштабирование изображения, я использую мой старый любимый: естественный коэффициент сохранения масштаба, позвольте мне объяснить:
картинки имеют естественную высоту и ширину и соотношение между ними. Большинство браузеров сохранят это соотношение если и ширина и высота авто. Затем вы можете управлять желаемой шириной с помощью min-width и max-width, в этом случае делая его всегда масштабируемым до полной ширины родительского элемента, даже если он будет масштабироваться за пределами его естественной ширины.
(вы также можете использовать max-width и max-height 100%, чтобы предотвратить выход изображения из границ родительского элемента, но никогда не масштабирование за пределы их естественных размеров)
У этого есть некоторые недостатки: вложенный размер шрифта в ems применяется повторно. Значение, если у вас есть:
<style type="text/css">
div{
font-size: 16px;
}
span{
font-size: 0.5em;
}
</style>
<div>
<span>
<span>
Text
</span>
</span>
</div>
вы получите» текстовый » рендеринг в 4px вместо 8px, который вы могли бы ожидать.
Пропорциональное масштабирование изображений с атрибутами размерностей
Перевод статьи: How to proportionally scale images that have dimension attributes.
Автор: Roger Johansson.
Способность изображений масштабироваться совместно с их контейнерами является важнейшим моментом отзывчивого веб-дизайна (более того, этот вопрос был актуален еще до того, как понятие «отзывчивый веб-дизайн» вообще существовало). И в этом нет ничего сложного, все, что вам нужно — это установить процентное значение ширины (или максимальной ширины):
Такое форматирование позволяет предотвратить превышение любым из имеющихся на странице img элементов ширины его контейнера. И в ситуации, когда контейнер становится ýже содержащегося в нем изображения, элемент изображение пропорционально уменьшает свою ширину, для того, чтобы быть в рамках контейнера. Все очень просто, не правда ли, однако, есть нюансы.
Если в разметке у элемента изображения имеются контентные атрибуты размерностей (width и height) и вы, используя приведенный выше способ, средствами CSS переопределяете его ширину, высота изображения останется прежней, поскольку ее значение определяется с помощью контентного атрибута элемента. А это, естественно, приведет к искажению изображения.
Простейший способ предотвращения подобной проблемы заключается в исключении атрибутов width и height из разметки элемента. Однако, именно такой способ определения размеров изображения, с помощью контентных атрибутов, наиболее предпочтителен с точки зрения производительности ресурса, поскольку это позволяет снизить время, требуемое браузеру для отображения изображения. Более детально данный вопрос раскрывается в рекомендациях Google по определению размеров изображения. Каких либо жестких рекомендаций по размещению этих данных нет, они могут содержаться в HTML разметке и/или определяться с помощью CSS кода. Я, все же, склоняюсь к мнению, что как с практической, так и с логической точки зрения, необходимо использовать HTML атрибуты.
Итак, мы хотим указывать требуемые размеры наших изображений и в тоже время получить возможность их пропорционального масштабирования. К счастью, такой способ есть, более того, он невероятно прост — необходимо добавить CSS декларацию, переопределяющую явно указанное значение высоты контентным атрибутом в HTML. То есть совместно с max-width нужно использовать height:auto:
img {
max-width:100%;
height:auto;
}
Теперь масштабирование изображений будет происходить без искажений. Наглядный пример пропорционального масштабирования содержащих атрибуты размерностей изображений можно увидеть на этой демо-странице.
Поддержка браузерами.
Даже в нашем, казалось бы простейшем случае, существует пару различий в реализации некоторыми браузерами, на которые необходимо обратить внимание, по крайней мере, если вы заинтересованы в предоставлении гибко изменяющейся по ширине компоновки в IE8 и ниже.
IE7, кстати, выполняет пропорциональное масштабирование изображения независимо от того, указаны ли атрибуты размерностей в разметке и даже в том случае, если вы не используете декларацию height:auto.
Что касается IE8, то для корректного масштабирования изображений, вам, как ни странно, потребуется помимо переопределения установленной в разметке высоты, переопределить и значение ширины. К великой радости, наличие дополнительной декларации width:auto не вызывает никаких проблем в других браузерах. Итак, для пропорционального масштабирования изображений в IE8 вам необходимо использовать следующее правило:
img {
width:auto;
max-width:100%;
height:auto;
}
Post Views: 2 268
масштабируем фон — учебник CSS
Когда вы добавляете фоновый рисунок через свойство background-image, то по умолчанию изображение отображается в своих реальных размерах. Это не всегда удобно, поэтому в CSS3 появилось новое свойство background-size для регулировки размера фонового изображения.
Значения background-size
Значения для свойства background-size
можно задавать при помощи ключевых слов, а также в любых единицах измерения CSS. В одной записи можно указывать размеры как для одной, так и для двух сторон — горизонтальной и вертикальной (последовательность важна).
Ключевые слова
auto
(значение по умолчанию) — если данное значение установлено для горизонтали и вертикали, т. е.:background-size: auto auto;
…то размеры фона останутся оригинальными. Если значение
auto
задано лишь для одной из сторон, то размер фона будет автоматически подогнан под пропорции изображения. Например, если записать следующее:background-size: 250px auto;
…то высота фоновой картинки будет вычисляться автоматически.
contain
— фоновое изображение масштабируется так, чтобы поместиться внутрь элемента целиком. В зависимости от своей формы и формы элемента, рисунок растягивается, чтобы поместиться полностью либо по ширине, либо по высоте. Пропорции картинки сохраняются.cover
— фоновое изображение масштабируется так, чтобы полностью заполнить пространство элемента, при этом сохраняя свои пропорции. Если пропорции элемента не соответствуют пропорциям изображения, это может привести к тому, что часть рисунка будет скрыта.
Числовые значения
Как мы уже сказали, размер фонового рисунка можно определять с помощью значений, указанных в пикселях, процентах и других единицах измерения CSS.
Чтобы задать точную ширину и высоту, используйте два значения — первое для ширины, второе для высоты:
background-size: 300px 300px;
Учтите, что изображение может исказиться, если вы не попадете в его пропорции:
Чтобы сохранить пропорции фона, используйте для одной из сторон свойство auto
:
Здесь высота рисунка составляет 50% от высоты элемента, а ширина подгоняется автоматически
Свойство background-size часто используется на практике. Например, его очень удобно использовать, когда размер элемента указан в процентах. Если задать блоку ширину 50% от ширины экрана, а его фону — ширину 100%, то при изменении размера окна фон всегда будет соответствовать ширине элемента.
Поддержка браузерами
Практически все используемые браузеры (как десктопные, так и мобильные) хорошо работают со свойством background-size. Internet Explorer понимает данное свойство, начиная с 9-й версии.
Далее в учебнике: пишем стиль для фона, используя сокращенную запись — «мульти»-свойство background.
Двухмерные трансформации CSS: наклон, масштабирование и сдвиг
По сравнению с трансформацией поворота остальные двухмерные трансформации CSS, вероятно, менее полезны: масштабирование и сдвиг всегда можно было так или иначе создать с помощью свойств CSS, изменяя ширину и высоту элемента или задавая ему абсолютное или относительное позиционирование. Основное преимущество использования этих значений трансформаций CSS в том, что они более непосредственные и их можно очень легко анимировать.
Трансформация наклона
Трансформация наклона, вероятно, наиболее сложная для понимания, так как ее значения в градусах применяются не так, как можно было бы ожидать. Можно рассматривать наклон как оттягивание противоположных сторон блока элемента для создания заданного угла. Для краткости здесь и далее показан код CSS без приставок производителей, которые в этом случае и не понадобятся для большинства современных версий браузеров:
img#car { transform: skewX(21deg); }
Также можно наклонять вертикально с помощью значения skewY(21deg). Отрицательное значение наклонит элемент в противоположную сторону. Если использовать эти значения вместе и аккуратно задать значения расположения, можно создать эффект коробки из трех изображений одинакового размера, т. е., трехмерный эффект с помощью CSS.
Трансформация масштабирования
Масштабирование — просто скалярная величина: множитель, на который увеличивается или уменьшается размер элемента:
img#car { transform: scale(2); }
Как и при трансформации поворота и других трансформациях CSS смасштабированный элемент не влияет на свое окружение.
Зачем использовать трансформацию масштабирования, если можно использовать свойства ширины и высоты?
Так как свойства ширины и высоты влияют только на размер изображений напрямую, использование этих свойств на других элементах, таких как блоки, ограничивает их форму, но не изменяет их масштаб, по меньшей мере по умолчанию. Попробуйте расположить изображение и несколько абзацев текста в блоке и применить к нему свойства ширины, высоты и трансформацию масштабирования, чтобы увидеть разницу.
Так же, как и трансформацию наклона, трансформацию масштабирования можно ограничить значениями только x или только y с помощью записи scaleX и scaleY.
Трансформация сдвига
Трансформация сдвига сдвигает элемент из его текущего положения. Это очень похоже на относительное позиционирование. У этой трансформации нет особых преимуществ перед относительным позиционированием, хотя ее можно очень плавно анимировать с помощью CSS.
img#obj { transform: translateX(2em); }
Автор урока Dudley Storey
Перевод — Дежурка
Смотрите также:
Изменение размеров в CSS — Изучение веб-разработки
In the various lessons so far you have come across a number of ways to size items on a web page using CSS. Understanding how big the different features in your design will be is important, and in this lesson we will summarize the various ways elements get a size via CSS and define a few terms around sizing that will help you in the future.
The natural or intrinsic size of things
HTML Elements have a natural size, set before they are affected by any CSS. A straightforward example is an image. An image has a width and a height defined in the image file it is embedding into the page. This size is described as the intrinsic size — which comes from the image itself.
If you place an image on a page and do not change its height and width, either using attributes on the <img>
tag or CSS, it will be displayed using that intrinsic size. We have given the image in the example below a border so that you can see the extent of the file.
An empty <div>
however, has no size of its own. If you add a <div>
to your HTML with no content, then give it a border as we did with the image, you will see a line on the page. This is the collapsed border on the element — there is no content to hold it open. In our example below, that border stretches to the width of the container, because it is a block level element, a behavior that should be starting to become familiar to you. It has no height (or size in the block dimension) because there is no content.
In the example above, try adding some text inside the empty element. The border now contains that text because the height of the element is defined by the content. Therefore the size of this <div>
in the block dimension comes from the size of the content. Again, this is the intrinsic size of the element — its size is defined by its content.
Setting a specific size
We can of course give elements in our design a specific size. When a size is given to an element (and the content of which then needs to fit into that size) we refer to it as an extrinsic size. Take our <div>
from the example above — we can give it specific width
and height
values, and it will now have that size no matter what content is placed into it. As we discovered in our previous lesson on overflow, a set height can cause content to overflow if there is more content than the element has space to fit inside it.
Due to this problem of overflow, fixing the height of elements with lengths or percentages is something we need to do very carefully on the web.
Using percentages
In many ways percentages act like length units, and as we discussed in the lesson on values and units, they can often be used interchangeably with lengths. When using a percentage you need to be aware what it is a percentage of. In the case of a box inside another container, if you give the child box a percentage width it will be a percentage of the width of the parent container.
This is because percentages resolve against the size of the containing block. With no percentage applied our <div>
would take up 100% of the available space, as it is a block level element. If we give it a percentage width, this becomes a percentage of the space it would normally fill.
Percentage margins and padding
If you set margins
and padding
as a percentage you may notice some strange behavior. In the below example we have a box. We have given the inner box a margin
of 10% and a padding
of 10%. The padding and margin on the top and bottom of the box are the same size as the margin on the left and right.
You might expect for example the percentage top and bottom margins to be a percentage of the element’s height, and the percentage left and right margins to be a percentage of the element’s width. However, this is not the case!
When you use margin and padding set in percentages, the value is calculated from the inline size — therefore the width when working in a horizontal language. In our example, all of the margins and padding are 10% of the width. This means you can have equal sized margins and padding all round the box. This is a fact worth remembering if you do use percentages in this way.
min- and max- sizes
In addition to giving things a fixed size, we can ask CSS to give an element a minimum or a maximum size. If you have a box that might contain a variable amount of content, and you always want it to be at least a certain height, you could set the min-height
property on it. The box will always be at least this height, but will then grow taller if there is more content than the box has space for at its minimum height.
In the example below you can see two boxes, both with a defined height of 150 pixels. The box on the left is 150 pixels tall; the box on the right has content that needs more room, and so it has grown taller than 150 pixels.
This is very useful for dealing with variable amounts of content while avoiding overflow.
A common use of max-width
is to cause images to scale down if there is not enough space to display them at their intrinsic width, while making sure they don’t become larger than that width.
As an example, if you were to set width: 100%
on an image, and its intrinsic width was smaller than its container, the image would be forced to stretch and become larger, causing it to look pixellated. If its intrinsic width were larger than its container, it would overflow it. Neither case is likely to be what you want to happen.
If you instead use max-width: 100%
, the image is able to become smaller than its intrinsic size, but will stop at 100% of its size.
In the example below we have used the same image twice. The first image has been given width: 100%
and is in a container which is larger than it, therefore it stretches to the container width. The second image has max-width: 100%
set on it and therefore does not stretch to fill the container. The third box contains the same image again, also with max-width: 100%
set; in this case you can see how it has scaled down to fit into the box.
This technique is used to make images responsive, so that when viewed on a smaller device they scale down appropriately. You should however not use this technique to load in really large images and then scale them down in the browser. Images should be appropriately sized to be no larger than they need to be for the largest size they are displayed in the design. Downloading overly large images will cause your site to become slow, and it can cost users more money if they are on a metered connection.
Viewport units
The viewport — which is the visible area of your page in the browser you are using to view a site — also has a size. In CSS we have units which relate to the size of the viewport — the vw
unit for viewport width, and vh
for viewport height. Using these units you can size something relative to the viewport of the user.
1vh
is equal to 1% of the viewport height, and 1vw
is equal to 1% of the viewport width. You can use these units to size boxes, but also text. In the example below we have a box which is sized as 20vh and 20vw. The box contains a letter A
, which has been given a font-size
of 10vh.
If you change the vh
and vw
values this will change the size of the box or font; changing the viewport size will also change their sizes because they are sized relative to the viewport. To see the example change when you change the viewport size you will need to load the example in a new browser window that you can resize (as the embedded <iframe>
that contains the example shown above is its viewport). Open the example, resize the browser window, and observe what happens to the size of the box and text.
Sizing things according to the viewport can be useful in your designs. For example, if you want a full page hero section to show before the rest of your content, making that part of your page 100vh high will push the rest of the content below the viewport, meaning that it will only appear once the document is scrolled.
Summary
This lesson has given you a rundown of some key issues that you might run into when sizing things on the web. When you move onto CSS Layout, sizing will become very important in mastering the different layout methods, so it is worth understanding the concepts here before moving on.
In this module
- Cascade and inheritance
- CSS selectors
- The box model
- Backgrounds and borders
- Handling different text directions
- Overflowing content
- Values and units
- Sizing items in CSS
- Images, media, and form elements
- Styling tables
- Debugging CSS
- Organizing your CSS
Свойство трансформировать | Справочник CSS
basicweb.ru- HTML
- Учебник HTML
- Справочник тегов
- Атрибуты событий
- Глобальные атрибуты
- Коды языков
- Мнемоники
- Цвета
- Тесты знаний
- CSS
- Учебник CSS
- Справочник свойств
- Селекторы
- Обязательства
- Правила
- Flexbox генератор
- Сетевой генератор
- Учебник МЕНЬШЕ
- JavaScript
- Интерфейсы веб API
- Объект Массив
- Дата размещения
- Объект Функция
- Объект Global
- Объект JSON
- Объект Математика
- Номер объекта
- Объект Объект
- Объект RegExp
- Обещание объекта
- Строка объекта
- jQuery
- Селекторы
- События
- Методы ДОМ
- Перераз
- Утилиты
- Эффекты
- AJAX
- Объект Обратные звонки
- Объект отложен
HTML
- HTML учебник
- Справочник тегов
- Атрибуты событий
- Глобальные атрибуты
- Мнемоники
- Коды языков
- HTML цвета
- Тесты знаний
CSS
scaleX () | CSS | WebReference
Масштабирует элемент по горизонтальной оси X.
scaleX (s) соответствует шкале (s, 1).
Масштабирование с помощью scaleX (s) действано в табл. 1.
Синтаксис
transform: scaleX (<число>)
Обозначения
Описание | Пример | |
---|---|---|
<тип> | Указывает тип значения. | <размер> |
A && B | Значения должны выводиться в указанном порядке. | <размер> && <цвет> |
A | B | Указывает, что надо выбрать только одно значение из предложенных (A или B). | нормальный | small-caps |
A || B | Каждое личное дело самостоятельно или с другими в произвольном порядке. | ширина || count |
[] | Группирует значения. | [урожай || крест] |
* | Повторять ноль или больше раз. | [, <время>] * |
+ | Повторять один или больше раз. | <число> + |
? | Указанный тип, слово или группа не является обязательным. | вставка? |
{A, B} | Повторять не менее A, но не более B раз. | <радиус> {1,4} |
# | Повторять один или больше раз через запятую. | <время> # |
Значения
В качестве значения используется положительное или отрицательное число.
- значение больше 1 (например: 1.5) приводит к увеличению масштаба;
- значение меньше 1 (например: 0.8) приводит к уменьшению масштаба;
- отрицательное значение (например: -1) зеркально отражает элемент по горизонтали;
- значение 1 оставляет размер элемента исходным и не даёт видимого эффекта.
Песочница
Спецификация
Каждая спецификация проходит несколько стадий одобрения.
- Рекомендация (Рекомендация) — спецификация W3C и рекомендована как стандарт.
- Кандидат в рекомендации (Возможная рекомендация) — группа, отвечающая за стандарт, удовлетворена, как он соответствует своим целям, но требуется помощь сообщества разработчиков по реализации стандарта.
- Предлагаемая рекомендация (Предлагаемая рекомендация) — на этом этапе представлен на рассмотрении Консультативного совета W3C для окончательного утверждения.
- Рабочий проект (Рабочий проект) — более зрелая версия черновика после обсуждения и внесения поправок для рассмотрения сообществом.
- Черновик редакции (Редакторский черновик) — черновая версия стандарта после внесения правок редакторами проекта.
- Проект (Черновик спецификации) — первая черновая версия стандарта.
Браузеры
В таблице браузеров используются следующие обозначения.
- — свойство полностью предоставленным браузером со всеми допустимыми значениями;
- — свойство браузером не воспринимается и игнорируется;
- — при работе возможно появление различных ошибок, либо свойство имеется лишь частично, например, не все допустимые значения имеют свойство не ко всем элементам, которые указаны в спецификации.
Число указывает версию, начиная с свойства, имеющего свойство.
Автор и редакторы
Автор: Влад Мержевич
Последнее изменение: 02.03.2020
Редакторы: Влад Мержевич
.