Прижатие футера к низу страницы
Иногда содержимого страницы недостаточно для того, чтобы футер оказался прижатым к низу. Эту проблему легко решить с помощью flex:
<body>
<header>
Header
</header>
<main>
Main
</main>
<footer>
Footer
</footer>
</body>
body {
display: flex;
flex-direction: column;
margin: 0;
font-size: 2.5rem;
min-height: 100dvh;
}
main {
flex: 1; /*or flex: auto;*/
}
Адаптация UI под различные устройства ввода
С помощью медиа-запросов pointer можно улучшить пользовательский интерфейс, адаптируя его под различные устройства ввода (мышь или сенсорный экран):
<button class="btn">Click me</button>
.btn {
padding: 10px 20px;
font-size: 1rem;
cursor: pointer;
background-color: #bada55;
color: #000000;
}
/* Media query for devices with coarse pointers (e.g., touch screens) */
@media (pointer: coarse) {
.btn {
padding: 20px 30px; /* Větší tlačítko pro snadné stisknutí */
font-size: 1.2rem; /* Větší text, aby byl snadněji čitelný */
}
}
/* Media query for devices with fine pointers (e.g., mouse) */
@media (pointer: fine) {
.btn {
transition: background-color 0.3s ease;
}
.btn:hover {
background-color: #007bff;
color: #fff;
}
}
Позиционирование с помощью inset
Свойство inset – это сокращение для определения отступов от краев контейнера.
Оно объединяет в себе свойства top, right, bottom и left, что делает код компактнее и удобнее для чтения:
<div class="container"> <div class="box"></div> </div>
.container {
position: relative;
width: 300px;
height: 300px;
background-color: #f0f0f0;
margin: 2rem auto;
}
.box {
position: absolute;
inset: 0;
margin: auto;
width: 100px;
height: 100px;
background-color: #007bff;
}
Стилизация с помощью :empty
Псевдокласс : empty позволяет стилизовать элемент, если он не содержит дочерних элементов или текста. Это может быть полезно для добавления временного контента, например, текста-заполнителя, когда изображение не загрузилось:
<div class="gallery">
<figure class="image-container">
<img src="https://images.unsplash.com/photo-1567306226416-28f0efdc88ce" alt="Giraffe in the wild">
</figure>
<figure class="image-container"></figure>
</div>
.gallery {
display: flex;
gap: 1rem;
}
.image-container {
position: relative;
display: flex;
align-items: center;
justify-content: center;
margin: 0;
width: 300px;
aspect-ratio: 4 / 3;
background-color: #f0f0f0;
overflow: hidden;
}
.image-container img {
width: 100%;
height: 100%;
object-fit: cover;
}
.image-container:empty::before {
content: "No Image Available";
display: flex;
align-items: center;
justify-content: center;
padding: 1rem;
width: 100%;
height: 100%;
font-size: 1.2rem;
color: #888;
background-color: #ddd;
text-align: center;
}
Применение стилей к группе элементов без повышения специфичности
Псевдокласс : where() – мощный инструмент для применения стилей к группе элементов без повышения специфичности. Он идеально подходит для универсальных стилей, таких как сбросы (reset) или общие стили, которые не должны конфликтовать с более специфичными правилами:
<h1>Main Heading</h1> <h2>Subheading</h2> <p>Some paragraph text.</p>
:where(h1, h2, p) {
margin: 0;
color: #bada55;
font-family: Arial, sans-serif;
text-decoration-line: underline;
text-decoration-style: wavy;
}
h1 {
color: #007bff;
}
Выравнивание цифр font-variant-numeric
Свойство font-variant-numeric позволяет выровнять цифры для улучшения их читаемости в определенных ситуациях (таблицы или финансовые отчеты). В частности, значение tabular-nums заставляет цифры занимать одинаковое пространство по ширине, чтобы они выстраивались в виде аккуратных колонок:
<div class="opening-hours"> <p><span class="day">Mo:</span> 08:00 - 14:00, 15:00 - 22:00</p> <p><span class="day">Tu:</span> 10:00 - 18:00, 19:00 - 21:00</p> <p><span class="day">We:</span> 07:30 - 15:00, 16:00 - 23:00</p> <p><span class="day">Th:</span> 07:00 - 13:00</p> <p><span class="day">Fr:</span> 09:00 - 21:00</p> <p><span class="day">Sa:</span> Closed</p> <p><span class="day">Su:</span> Closed</p> </div> <div class="numbers"> <p class="proportional">1234567890</p> <p class="tabular">1234567890</p> </div>
.opening-hours {
font-variant-numeric: tabular-nums;
}
.day {
display: inline-block;
width: 2.5rem;
font-weight: bold;
}
.proportional {
font-variant-numeric: proportional-nums;
}
.tabular {
font-variant-numeric: tabular-nums;
}
Ограничение текста определенным количеством строк -webkit-line-clamp
Свойство -webkit-line-clamp позволяет ограничить текст определенным количеством строк и добавляет многоточие (…) при превышении этого лимита. Это полезно для управления переполнением текста в карточках, списках или других компонентах с фиксированной высотой:
<div class="container">
<div class="overflow-text">
Crema caffeine, ristretto single shot qui caramelization con panna grounds. To go caffeine medium foam latte dripper eu plunger pot. Mocha kopi-luwak caffeine cappuccino cup strong, medium and java aged pumpkin spice body. Roast brewed extra black aroma beans robust.
</div>
</div>
.container {
max-width: 20rem;
}
.overflow-text {
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
}
Применение трансформаций по отдельности
Новые свойства трансформации scale, rotate, translate и другие, позволяют применять трансформации по отдельности, вместо того чтобы комбинировать все их в одно свойство transform. Это улучшает читаемость и упрощает поддержку кода, так как каждая трансформация теперь задается отдельно:
<div class="wrapper"> <p class="transformed">Independent Transform Example</p> </div>
.wrapper {
display: flex;
justify-content: center;
align-items: center;
width: 20rem;
height: 20rem;
}
.transformed {
scale: 1.5; /* Scales the element by 1.5 times */
rotate: 45deg; /* Rotates the element by 45 degrees */
translate: 10px 20px; /* Moves the element 10px to the right and 20px down */
}
/* Old way
.transformed {
transform: translate(10px, 20px) rotate(45deg) scale(1.5);
}
*/
Стилизация с помощью :has()
Псевдокласс : has() позволяет стилизовать родительский элемент в зависимости от того, содержит ли он определенного потомка. Это позволяет создавать более динамичные и интерактивные стили, чего раньше было сложно достичь с помощью стандартных CSS-селекторов:
<div class="card"> <img src="https://images.unsplash.com/photo-1567306226416-28f0efdc88ce" alt="A sample image" width="300" height="200"> <p>Card with an image</p> </div> <div class="card"> <p>Card without an image</p> </div>
.card:has(img) {
padding: 10px;
max-width: 320px;
border: 2px solid #007bff;
box-sizing: border-box;
}
img {
max-width: 100%;
height: auto;
}
Использование системной цветовой схемы
Системные цвета – это специальные цвета, которые соответствуют цветовой схеме операционной системы или браузера пользователя. Использование системных цветов позволяет вашему сайту автоматически адаптироваться под предпочтения пользователя (темная или светлая тема):
<button class="btn">System Color Button</button>
body {
background-color: Canvas; /* System color for the background (usually white or black depending on the system theme) */
color: CanvasText; /* System color for regular text */
}
.btn {
background-color: ButtonFace; /* System color for button background */
color: ButtonText; /* System color for button text */
border: 1px solid ButtonBorder; /* System color for button border */
padding: 10px 20px;
cursor: pointer;
}
Стилизaция элементов в зависимости от размера их контейнера
Container Queries позволяют стилизовать элементы в зависимости от размера их контейнера, а не только от размера вьюпорта (окна браузера). Это позволяет создавать более гибкие и контекстно-зависимые адаптивные дизайны, ориентированные на компоненты:
<div class="card-container">
<div class="card">
<h2>Card Title</h2>
<p>This is some content inside the card.</p>
</div>
</div>
.card-container {
container-type: inline-size;
padding: 4rem;
}
.card {
padding: 1rem;
background-color: #f0f0f0;
}
@container (min-width: 640px) {
.card {
background-color: #007bff;
color: #fff;
}
}
Изменение акцентного цвета для элементов форм
Свойство accent-color позволяет легко менять основной цвет встроенных элементов формы – чекбоксов, радиокнопок и диапазонов (<input type=»checkbox»>, <input type=»radio»>, <input type=»range»>). Это упрощает стилизацию и помогает создать визуально согласованные и эстетически привлекательные формы:
<form>
<label>
<input type="checkbox"> I agree to the terms
</label>
</form>
input[type="checkbox"] {
accent-color: #bada55;
}
Адаптивные шрифты
Функция clamp() – мощный инструмент для определения адаптивных размеров шрифта. Она позволяет задать минимальное, предпочтительное, и максимальное значение размера шрифта одновременно, что сделает текст удобочитаемым на любых устройствах:
<main>
<h1>Responsive Font Size with Clamp()</h1>
<p>
This example uses the <code>clamp()</code> function to make the font size responsive.
The heading and paragraph text sizes change depending on the viewport width, while staying within the defined minimum and maximum values.
</p>
</main>
main {
max-width: 800px;
margin: 0 auto;
}
h1 {
font-size: clamp(1.5rem, 5vw, 3rem); /* Min size: 1.5rem, Preferred size based on viewport, Max size: 3rem */
text-align: center;
color: #007bff;
}
p {
font-size: clamp(1rem, 2vw, 1.5rem);
line-height: 1.6;
color: #333;
}