Фон / Границы / Тени
Фоновый цвет и изображения
Допускаются множественные свойства через запятую.
div {
/* Фон цветом */
background-color: red;
/* Фон изображением */
background-image: 'url(images/some-image.png)';
background-image: 'url(images/some-image1.png), url(images/some-image2.png)';
/* Повтор фонового изображения - для паттернов */
background-repeat: no-repeat | repeat | repeat-x | repeat-y | round | space;
/* Позиция фонового изображения (раньше использовали для спрайтов) */
background-position: auto auto | 0 0 | 50% 50% | left bottom;
/* Размер фонового изображения */
background-size: 50px | 50px 100px | 50px auto | 50% 50% | contain | cover;
/* Прокрутка фонового изображения */
background-attachment: scroll* | fixed;
/* Область отображения фонового изображения (Взаимодействие padding, border и background-image) */
background-origin: padding-box* | content-box | border-box;
/* padding-box - по ум* (рамка "отодвигает" фон), на padding не реагирует; */
/* content-box - если задан padding, то фон реагирует на него и будет двигаться не от границы блока, а от внутренней границы border; */
/* border-box - фон "залезает" под border, на padding не реагирует; */
/* Обрезка фонового изображения */
background-clip: border-box* | cotent-box | padding-box;
/* border-box - по ум* (без обрезания); */
/* cotent-box - обрезает фон по краю содержимого (весь фон, который "не влез" в контейнер будет обрезан); */
/* padding-box - обрезает фон по внутреннему краю border (если фон "влез" в border как при background-origin: border-box, то край фона будет обрезан по рамке); */
/* Краткая запись */
background: [bc] [bi] [br] [bp] [ba];
[bc] — background-color;
[bi] — background-image;
[br] — background-repeat;
[bp] — background-position;
[ba] — background-attachment;
}
mix-blend-mode
Текст фоном.
.parent {
background-image: url(https://www.w3schools.com/css/img_lights.jpg);
}
.child {
background-color: black;
mix-blend-mode: multiply;
}
data url
Можно вставлять inline svg прямо в css и добавлять туда внутренние стили через тэк style, поддерживаются даже анимации.
Lea Verou - Even More CSS Secrets
body {
background-image: url("data:image/svg+xml;utf8,\
<svg width='100' height='100' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'>\
<style>@keyframes dance {to{transform: rotate(-20deg)}}</style>\
<line x1='50' y1='50' x2='250' y2='100' stroke='deeppink' stroke-width='6' style='animation: dance 1s infinite alternate' />\
</svg>");
}
Градиент
Линейный
div {
background-image:
/* Направление названием - to left | to top | to right | to bottom* */
linear-gradient(to bottom, yellow, deeppink),
/* Направление в градусах */
linear-gradient(45deg, white, black),
/* многоцветный градиент */
/* По умолчанию все цвета равномерно распределяются по ширине */
linear-gradient(to right, red, green, blue),
/* колорстопы в % */
/* Если указывать явный шаг для каждого цвета, чтобы конец одного цвета был началом другого, */
/* то самого градиента не будет, будут только эти цвета в чистом виде */
linear-gradient(45deg, green 30%, yellow 70%),
linear-gradient(45deg, green 0, green 50%, yellow 50%, yellow 100%),
/* колорстопы в px */
linear-gradient(
to right,
red 0, red 15px,
green 15px, green 30px,
blue 30px, blue 45px
),
/* повторяющийся градиент */
repeating-linear-gradient(
to right,
red 0, red 15px,
green 15px, green 30px,
blue 30px, blue 45px
);
}
Радиальный
Радиальный градиент начинается в центре элемента, считается по ширине и высоте.
div {
background-image:
radial-gradient(ellipse, yellow, deeppink),
/* многоцветный градиент */
radial-gradient(red, green, blue),
/* колорстопы в % */
radial-gradient(
red 0, red 15%,
green 15%, green 30%,
blue 30%, blue 45%
),
/* колорстопы в px */
radial-gradient(
red 0, red 15px,
green 15px, green 30px,
blue 30px, blue 45px
),
/* повторяющийся градиент */
repeating-radial-gradient(
red 0, red 15px,
green 15px, green 30px,
blue 30px, blue 45px
),
}
Формы радиального градиента
- ellipse - эллипс (по ум*);
- circle - круг;
- 30% 40% - координаты центра;
- closest-side - предписывает браузеру создать градиент, распространяющийся из центра только до ближайшей к центру стороне элемента;
- closest-corner - приводит к вычислению ширины градиента из его центра до ближайшего угла элемента;
- farthest-side - приводит к вычислению радиуса окружности от ее середины до самой дальней стороны элемента;
- farthest-corner - приводит к вычислению радиуса окружности от ее центра до самого дальнего угла элемента;
Конический градиент
Можно строить pie-charts.
div {
border-radius: 50%;
background-image: conic-gradient(red 40%, yellow 40%, yellow 70%, green 70%);
}
Границы
border
Участвует в box-model
div {
/* Краткая запись */
border: 1px solid red;
border: 1px solid; /* с currentColor (наследованный цвет) */
/* Толщина границы */
border-width: 1px;
/* Стиль границы */
border-style: solid | dotted | dashed | double | groove | ridge | inset | outset;
/* Цвет границы */
border-color: red | currentColor;
/* Отдельная граница */
border-left: 1px solid red;
border-left-width: 1px;
border-left-style: solid;
border-left-color: red;
/* Радиус скругления границ */
border-radius: 10px | 50% | 10px 20px | 10px 20px 30px 40px;
border-top-left-radius: 10px;
border-top-right-radius: 20px;
border-bottom-right-radius: 30px;
border-bottom-left-radius: 40px;
/* Горизонтальные и вертикальные радиусы (можно искривлять фигуры) */
border-radius: 30px / 15px;
border-radius: 10px 20px 30px 40px / 25px 35px 45px 55px;
}
border-image
Применяется крайне редко.
div {
border-image: url(../css_border-image-2.png) 30% repeat;
/* Изображение */
border-image-source: url(../css_border-image-2.png);
/* Нарезка изображения рамки */
border-image-slice: 30%;
/* Повтор изображения рамки */
border-image-repeat: repeat | round | stretch;
/* Ширина изображения рамки */
border-image-width: 50px | 50px 10px 20px 5px;
/* Отодвигает рамку за пределы элемента */
border-image-outset: 10px | 10px 20px 30px 40px;
}
Треугольники из границ
.triangle {
height: 0px;
width: 0px;
border-width: 100px;
border-style: solid;
border-color: red yellow green blue;
/* Если нужен один треугольник */
border-color: transparent;
border-bottom-color: green;
}
outline
- Внешняя рамка
- Не участвует в box-model (выпадает из потока)
- Не увеличивает размеры
- Нельзя задавать свойства для сторон
- Хорошо для дебага
div {
/* Внешняя рамка */
outline: 1px solid red;
outline-width: 1px;
outline-style: solid;
outline-color: red;
}
Тени
Box-shadow
box-shadow: inset 1px 2px 3px 4px #ccc;
outset* (внешняя) | inset (внутренняя)
1px - |смещение оси х|
2px - |смещение оси y|
3px - |радиус размытия|
4px - |растяжение|
#ccc - |цвет|
div {
box-shadow: 5px 5px 1px 2px deeppink;
/* Множественная тень (через запятую) */
box-shadow:
4px 4px 1px 0 red,
8px 8px 1px 0 green,
12px 12px 1px 0 blue;
}
Text-shadow
Lorem Ipsum Dolor
text-shadow: 1px 2px 3px #ccc;
1px - |смещение ох| + -
2px - |смещение оy|+ -
3px - |радиус размытия|+
#ccc - |цвет|
p {
text-shadow: 1px 2px 3px #ccc;
/* Множественная тень (через запятую) */
text-shadow:
6px 6px 1px red,
-6px -6px 1px green,
-9px -9px 1px blue;
}
Фильтры
Работают и для img и для background-image.
img {
/* тень (хорошо с png) */
filter: drop-shadow(10px 10px 1px deeppink);
/* яркость */
filter: brightness(0 - 100%);
/* контраст */
filter: contrast(0 - 10);
/* обесцвечивание */
filter: grayscale(0 - 1);
/* сепия */
filter: sepia(0 - 1);
/* иеверсия цвета */
filter: invert(0 - 1);
/* насыщенность цвета */
filter: saturate(0 - 1);
/* поворот по цветовому кругу */
filter: hue-rotate(0 - 360deg);
/* размытие */
filter: blur(0 - 100px);
/* прозрачность */
filter: opacity(0 - 1);
/* множественный фильтр (через пробел) */
filter: opacity(0.9) blur(2px) contrast(3) sepia(0.2);
}
backdrop-filter
Если какой-ниб полупрозрачный элемент расположен над другим элементом, у которого есть фон, то можно сделать преломление этого фона у верхнего элемента с помощью данного свойства.
header {
backdrop-filter: blur(2px);
backdrop-filter: brightness(60%);
backdrop-filter: contrast(40%);
backdrop-filter: drop-shadow(4px 4px 10px blue);
backdrop-filter: grayscale(30%);
backdrop-filter: hue-rotate(120deg);
backdrop-filter: invert(70%);
backdrop-filter: opacity(20%);
backdrop-filter: sepia(90%);
backdrop-filter: saturate(80%);
/* Несколько фильтров (через пробел) */
backdrop-filter: url(filters.svg#filter) blur(4px) saturate(150%);
}
object-fit для <img>
Аналог свойства background-size только для тэга <img>
img {
object-fit: none* | fill | cover | contain;
object-position: 50% 50%;
}
- fill - Растягивается по контейнеру (пропорции игнорируются)
- contain - Растягивается по максимальной стороне в контейнере (пропорции соблюдаются)
- cover - Растягивается по максимальной стороне в контейнере, если осталось ещё свободное место по одной стороне, то изображение будет маштабироваться, чтобы заполнить всё пространство (пропорции соблюдаются)