Skip to main content

Фон / Границы / Тени

Фоновый цвет и изображения

Допускаются множественные свойства через запятую.

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;
}

Фильтры

photo-filters.webp

Работают и для 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

backdrop-filter.jpg

Если какой-ниб полупрозрачный элемент расположен над другим элементом, у которого есть фон, то можно сделать преломление этого фона у верхнего элемента с помощью данного свойства.

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 - Растягивается по максимальной стороне в контейнере, если осталось ещё свободное место по одной стороне, то изображение будет маштабироваться, чтобы заполнить всё пространство (пропорции соблюдаются)