Записи с меткой "CSS"
ЗАГОТОВКИ CSS
Символ рубля - ₽
Стили для полос прокрутки
body::-webkit-scrollbar {
width: 11px; /* ширина scrollbar */
}
body::-webkit-scrollbar-track {
background: #CCBFAF; /* цвет дорожки */
}
body::-webkit-scrollbar-thumb {
background-color: #764E2B; /* цвет плашки */
border-radius: 20px; /* закругления плашки */
border: 1px solid #CCBFAF; /* padding вокруг плашки */
}
.modal-body::-webkit-scrollbar {
width: 11px;
}
.modal-body::-webkit-scrollbar-thumb {
background: #CCBFAF;
}
.modal-body::-webkit-scrollbar-track {
background-color: #764E2B; /* цвет плашки */
border-radius: 20px; /* закругления плашки */
border: 1px solid #CCBFAF; /* padding вокруг плашки */
}
.flex {
display: flex;
flex-direction: column;
justify-content: center;
}
.flex {
display: inline-flex !important;
justify-content: center;
flex-direction: column;
@primary-color: #112233;
background-color: darken(@primary-color, 10%);
background-color: lighten(@primary-color, 10%);
-webkit-transition: all 0.2s linear;
-moz-transition: all 0.2s linear;
-o-transition: all 0.2s linear;
transition: all 0.2s linear;
.background {
background-position: 50% 50%;
background-repeat: no-repeat !important;
background-size: 100%;
background-size: cover !important
}
-webkit-transform: rotate(15deg); /* Для Safari, Chrome, iOS */
-moz-transform: rotate(15deg); /* Для Firefox */
-ms-transform: rotate(15deg); /* Для IE */
-o-transform: rotate(15deg); /* Для Opera */
transform: rotate(15deg);
-webkit-transform: scale(1.5,1.3);
-moz-transform: scale(1.5,1.3);
-ms-transform: scale(1.5,1.3);
-o-transform: scale(1.5,1.3);
transform: scale(1.5,1.3);
-webkit-transform:scale(1.1,1.1);
-moz-transform:scale(1.1,1.1);
transform:scale(1.1,1.1);
-webkit-transform: translate(42px, 18px);
-moz-transform: translate(42px, 18px);
transform: translate(42px, 18px);
required="true"
rel="nofollow"
target="_blank"
<!--noindex--> <!--//noindex-->
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
border-radius: 50%;
-webkit-border-radius: 100px / 10px;
-moz-border-radius: 100px / 10px;
border-radius: 100px / 10px;
Тени
-webkit-box-shadow: 1px 1px 15px hsla(0, 0%, 0%, 0.2);
-moz-box-shadow: 1px 1px 15px hsla(0, 0%, 0%, 0.2);
box-shadow: 1px 1px 15px hsla(0, 0%, 0%, 0.2);
-webkit-box-shadow: 0 0 25px hsla(0, 0%, 0%, 0.3);
-moz-box-shadow: 0 0 25px hsla(0, 0%, 0%, 0.3);
box-shadow: 0 0 25px hsla(0, 0%, 0%, 0.3);
-webkit-box-shadow: 0px 0px 5px 5px hsla(0, 0%, 0%, 0.15);
-moz-box-shadow: 0px 0px 5px 5px hsla(0, 0%, 0%, 0.15);
box-shadow: 0px 0px 5px 5px hsla(0, 0%, 0%, 0.15);box-shadow: 0 0 10px rgba(0,0,0,0.5); /* Параметры тени */
box-shadow: inset 2px 2px 5px rgba(154, 147, 140, 0.5), 1px 1px 5px rgba(255, 255, 255, 1);
Стили для placeholder
::-webkit-input-placeholder{color:#777;font-size:13px;}
::-moz-placeholder{color:#777;font-size:13px;}
::-ms-input-placeholder{color:#777;font-size:13px;}
::-ms-input-placeholder{color:#777;font-size:13px;}
word-break: normal | break-all | keep-all; //перенос строк внутри слов, которые не помещаются по ширине в заданную область.
word-wrap: normal | break-word | inherit; //переносить или нет длинные слова, которые не помещаются по ширине в заданную область
Стили для списков
/* Partial list of types */
list-style-type: none;
list-style-type: disc;
list-style-type: circle;
list-style-type: square;
list-style-type: decimal;
list-style-type: georgian;
list-style-type: trad-chinese-informal;
list-style-type: kannada;
list-style-type: custom-counter-style;
list-style-type: "-";
/* Global values */
list-style-type: inherit;
list-style-type: initial;
list-style-type: revert;
list-style-type: revert-layer;
list-style-type: unset;
text-decoration: none | underline
position: relative;
position: absolute;
position: fixed;
content: ";
margin: 15px auto;
margin-top: 15px
margin-left: 15px;
margin-right: 15px;
margin-bottom: 15px;
padding-top: 15px
padding-left: 15px;
padding-right: 15px;
padding-bottom: 15px;
border:1px solid #ccc;
border-top:1px solid #ccc;
border-bottom:1px solid #ccc;
border-left:1px solid #ccc;
border-right:1px solid #ccc;
Стили для шрифта
font-size: .9em;
font-weight: 600;
font-style: normal | italic | oblique;
font-family: Geneva, Arial, Helvetica, sans-serif;
font-variant: normal | small-caps;
text-transform: uppercase;
text-align: center | justify | left | right | inherit;
text-decoration: underline | none;
text-decoration-color: #dedede;
text-decoration-style: solid | double | dotted | dashed | wavy;
text-transform: capitalize | lowercase | uppercase | none;
text-overflow: clip | ellipsis;
text-shadow: 1px 1px 2px black, 0 0 1em red;
line-height:1.1em;
Заливки фона
background:#fff;
background-color:#fff;
background-size:100%;
background: #014464;
background: -moz-linear-gradient(top, #0272a7, #013953);
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#0272a7), to(#013953));
vertical-align:middle;
/*===== BUTTON =====*/
button {
background:transparent;
border:0
}
.btn {
text-align: center;
font-weight: 500;
font-size: 11px;
padding: 10px 35px;
text-transform: uppercase;
letter-spacing: 1px;
vertical-align: top;
-webkit-border-radius:25px;
-moz-border-radius:25px;
border-radius:25px;
position: relative;
text-decoration:none;
}
.btn,
.btn.btn-transparent:hover {
background-color: @primary-color;
color: #fff;
}
.btn:hover {
opacity: 1;
text-decoration: none;
color: #fff;
background-color: @primary-color;
box-shadow: 0 5px 20px -10px @primary-color;
}
.btn.btn-transparent {
background: transparent;
border: 1px solid @primary-color;
color: @primary-color;
}
.btn-secondary,
.btn-secondary.btn-transparent:hover {
background-color: @secondary-color;
color: #fff;
border-color: @secondary-color;
}
.btn-secondary:hover {
opacity: 1;
text-decoration: none;
color: #fff;
background-color: @secondary-color;
box-shadow: 0 5px 20px -10px @secondary-color;
border-color: @secondary-color;
}
.btn-secondary.btn-transparent {
border: 1px solid @secondary-color;
color: @secondary-color;
}
.btn-third,
.btn-third.btn-transparent:hover {
background-color: @third-color;
color: #fff;
border-color: @third-color;
}
.btn-third:hover {
opacity: 1;
text-decoration: none;
color: #fff;
background-color: @third-color;
box-shadow: 0 5px 20px -10px @third-color;
border-color: @third-color;
}
.btn-third.btn-transparent {
border: 1px solid @third-color;
color: @third-color;
}
.btn-fifth,
.btn-fifth.btn-transparent:hover {
background-color: #bbb;
border-color: @fifth-color;
}
.btn-fifth.btn-transparent {
border: 1px solid #bbb;
color: #bbb;
}
.btn-fifth:hover {
opacity: 1;
text-decoration: none;
color: #fff;
background-color: #bbb;
box-shadow: 0 5px 20px -10px #bbb;
border-color: @fifth-color;
}
.btn-sm {
padding: 5px 15px !important;
letter-spacing: 0;
}
.in { opacity: 1 !important; }
h1:before {content: "";display: block;height: 2px;background: #fff;width: 100%;position: absolute;bottom: 0;}
html {position: relative; min-height: 100%;}
.section-parallax-background, .section-background {background-attachment: fixed !important; background-position: 50% 0; background-repeat: no-repeat; background-size: cover !important;}
.mobile .section-parallax-background {background-attachment: scroll !important;}
.section-background {background-attachment: scroll !important;}
.section-relative {position: relative;}
.section-fixed-size {overflow: hidden;}
.section-full-height {height: 100vh;}
.section-bg-adapted {background-attachment: scroll; background-position: 50% 0; background-repeat: no-repeat; background-size: cover;}
.section--gray {background-color: #444444;}
.section--light-gray {background-color: #f0f0f0;}
.section--dark-gray {background-color: #3c3c3c;}
.section-container {padding: 0; position: relative; z-index: 3;}
@-webkit-keyframes
Синтаксис
@-webkit-keyframes <имя анимации> {
<селектор кадра 1> {
<свойство 1>:<значение 1>;
<свойство 2>:<значение 1>;
}
<селектор кадра 2> {
<свойство 1>:<значение 2>;
<свойство 2>:<значение 2>;
}
.....................
<селектор кадра n> {
<свойство 1>:<значение n>;
<свойство 2>:<значение n>;
}
}
-
<имя анимации> — задает имя анимации в виде строки в одинарных кавычках (это имя потом используется при вызове анимации в качестве значения свойства -webkit-animation-name)
-
<селектор кадра> — задает селекторы которые определяют ключевые кадры. Они могут принимать значения:
-
from — внутри этого селектора описывается значения анимированных свойств в начальный момент анимации (также можно описать начальный кадр анимации, используя эквивалентный селектор 0%)
-
to — внутри этого селектора описывается значения анимированных свойств в конечный момент анимации (также можно описать конечный кадр анимации, используя эквивалентный селектор 100%)
-
<процент> — описывает значения анимированных свойств в данный момент времени (момент времени отсчитывается в процентном отношении от значения свойства -webkit-animation-duration)
-
<свойство> — анимируемое CSS свойство
-
<значение> — значения анимированного свойств в момент, описываемый селектором кадра
Пример кода
div {
top:50px;
left:0px;
-webkit-animation-name:'movement';
-webkit-animation-duration:10s;
}
@-webkit-keyframes 'movement' {
from {
top:50px;
left:0px;
}
50% {
top:150px;
left:100px;
}
to {
top:400px;
left:300px;
}
}
CSS3-трансформации
Модель визуального форматирования CSS описывает систему координат внутри каждого позиционированного элемента. Система координат является точкой отсчета для свойств смещения. Положение и размеры в этом координатном пространстве можно рассматривать как заданные в пикселях, относительно точки отсчета, с положительными значениями, идущими вправо и вниз. Это координатное пространство можно изменить с помощью свойства transform.
CSS3-трансформации позволяют сдвигать, поворачивать и масштабировать элементы. Трансформации преобразовывают элемент, не затрагивая остальные элементы веб-страницы, т.е. другие элементы не сдвигаются относительно него.
В HTML трансформируемый элемент это: элемент с display: block; и display: inline-block;, а также элементы, значение свойства displayкоторых вычисляется как table-row, table-row-group, table-header-group, table-footer-group, table-cell или table-caption.
Трансформированным считается элемент с любым установленным значением свойства transform, отличным от none.
В SVG трансформируемый элемент — это элемент, который имеет атрибуты transform, patternTransform или gradientTransform.
Существуют два вида CSS3-трансформаций – 2Dи 3D. 2D-трансформации преобразовывают элементы в двумерном пространстве c помощью 2D-матрицы преобразований. Эта матрица применяется для вычисления новых координат объекта, на основе значений свойств transformи transform-origin. Преобразования влияют только на визуальный рендеринг. В отношении макета страницы они могут отразиться на переполнении содержимого блока. По умолчанию точка трансформации находится в центре элемента.
2D-трансформации элементов
1. Функции 2D-трансформации: свойство transform
Свойство transform задаёт вид преобразования элемента. Свойство описывается с помощью функций трансформации, которые смещают элемент относительно его текущего положения на странице или изменяют его первоначальные размеры и форму.
Свойство не наследуется.
|
Функция |
Описание |
|---|---|
|
none |
Значение по умолчанию, означает отсутствие трансформации. Также отменяет трансформацию для элемента из группы трансформируемых элементов. |
|
matrix(a, c, b, d, x, y) |
Смещает элементы и задает способ их трансформации, позволяя объединить несколько функций 2D-трансформаций в одной. В качестве трансформации допустимы поворот, масштабирование, наклон и изменение положения. Значение aизменяет масштаб по горизонтали. Значение от 0 до 1 уменьшает элемент, больше 1 — увеличивает. Значение cдеформирует (сдвигает) стороны элемента по оси Y, положительное значение — вверх, отрицательное — вниз. Значение bдеформирует (сдвигает) стороны элемента по оси X, положительное значение — влево, отрицательное — вправо. Значение dизменяет масштаб по вертикали. Значение меньше 1 уменьшает элемент, больше 1 — увеличивает. Значение xсмещает элемент по оси X, положительное — вправо, отрицательное — влево. Значение yсмещает элемент по оси Y, положительное значение — вниз, отрицательное — вверх. |
|
translate(x,y) |
Сдвигает элемент на новое место, перемещая относительно обычного положения вправо и вниз, используя координаты X и Y, не затрагивая при этом соседние элементы. Если нужно сдвинуть элемент влево или вверх, то нужно использовать отрицательные значения. |
|
translateX(n) |
Сдвигает элемент относительно его обычного положения по оси X. |
|
translateY(n) |
Сдвигает элемент относительно его обычного положения по оси Y. |
|
scale(x,y) |
Масштабирует элементы, делая их больше или меньше. Значения от 0 до 1 уменьшают элемент. Первое значение масштабирует элемент по ширине, второе — по высоте. Отрицательные значения отображают элемент зеркально. |
|
scaleX(n) |
Функция масштабирует элемент по ширине, делая его шире или уже. Если значение больше единицы, элемент становится шире, если значение находится между единицей и нулем, элемент становится уже. Отрицательные значения отображают элемент зеркально по горизонтали. |
|
scaleY(n) |
Функция масштабирует элемент по высоте, делая его выше или ниже. Если значение больше единицы, элемент становится выше, если значение находится между единицей и нулем — ниже. Отрицательные значения отображают элемент зеркально по вертикали. |
|
rotate(угол) |
Поворачивает элементы на заданное количество градусов, отрицательные значения от -1degдо -360degповорачивают элемент против часовой стрелки, положительные — по часовой стрелке. Значение rotate(720deg)поворачивает элемент на два полных оборота. |
|
skew(x-угол,y-угол) |
Используется для деформирования (искажения) сторон элемента относительно координатных осей. Если указано одно значение, второе будет определено браузером автоматически. |
|
skewX(угол) |
Деформирует стороны элемента относительно оси X. |
|
skewY(угол) |
Деформирует стороны элемента относительно оси Y. |
|
initial |
Устанавливает значение свойства в значение по умолчанию. |
|
inherit |
Наследует значение свойства от родительского элемента. |
Допустимые значения:
matrix()— любое число
translate(), translateX(), translateY()— единицы длины (положительные и отрицательные), %
scale(), scaleX(), scaleY()— любое число
rotate()— угол (deg, grad, radили turn)
skew(), skewX(), skewY()— угол (deg, grad, rad)
Можно объединить несколько трансформаций одного элемента, перечислив их через пробел в порядке проявления.
Синтаксис
transform: none;
transform: matrix(1.0, 2.0, 3.0, 4.0, 5.0, 6.0);
transform: rotate(45deg);
transform: translate(12px, 50%);
transform: translateX(2em);
transform: translateY(3in);
transform: scale(2, 0.5);
transform: scaleX(2);
transform: scaleY(0.5);
transform: skew(30deg, 20deg);
transform: skewX(30deg);
transform: skewY(1.07rad);
transform: translateX(10px) rotate(10deg) translateY(5px);
transform: inherit;
transform: initial;
2. Точка трансформации: свойство transform-origin
Свойство transform-origin позволяет сместить центр трансформации, относительно которого происходит изменение положения/размера/формы элемента. Значение по умолчанию — center, или 50% 50%. Задаётся только для трансформированных элементов.
Свойство не наследуется.
transform-origin
Значения:
ось Х(left, center, right, длина, %)
ось Y(top, center, bottom, длина, %)
Пара значений, заданная с помощью ключевых слов, единиц длины или процентов определяет, относительно какой части элемента будет происходить трансформация. Значения больше 100% увеличивают область трансформации элемента.
initial
Устанавливает значение свойства в значение по умолчанию.
inherit
Наследует значение свойства от родительского элемента.
Синтаксис
transform-origin: 2px;
transform-origin: bottom;
transform-origin: 3cm 2px;
transform-origin: left 2px;
transform-origin: right top;
transform-origin: inherit;
transform-origin: initial;
3. Область преобразования: свойство transform-box
Все преобразования, определяемые свойством transform и transform-origin, относятся к положению и размерам опорного блока элемента. Опорный блок элемента это виртуальный прямоугольник вокруг элемента, который формирует систему координат для отрисовки.
В некоторых браузерах опорный блок принимает центр SVG-холста в качестве точки преобразования. Чтобы решить эту проблему, можно задать для элемента transform-box.
Опорный блок добавляет дополнительное смещение к исходной точке, заданной свойством transform-origin.
Свойство не наследуется.
transform-box
Значения:
content-box
В качестве опорного блока выступает область содержимого элемента. Для элемента <table>эта область включает также заголовок таблицы и рамку.
border-box
В качестве опорного блока выступает область рамки элемента. Для элемента <table>эта область включает также заголовок таблицы и рамку.
fill-box
В качестве опорного блока выступает ограничивающая рамка, содержащая только геометрическую форму элемента.
stroke-box
В качестве опорного блока выступает ограничивающая рамка, содержащая геометрическую форму и обводку элемента.
view-box
В качестве опорного блока используется область просмотра на SVG-холсте, которая определяет прямоугольную область, в которую отображается содержимое SVG.
initial
Устанавливает значение свойства в значение по умолчанию.
inherit
Наследует значение свойства от родительского элемента.
Синтаксис
transform-box: content-box;
transform-box: border-box;
transform-box: fill-box;
transform-box: stroke-box;
transform-box: view-box;
transform-box: inherit;
transform-box: initial;Input type number
|
Атрибут
|
Описание
|
|---|---|
|
step
|
Шаг изменения значения
|
|
max
|
Максимальное значение
|
|
min
|
Минимальное значение
|
|
placeholder
|
Подсказка
|
|
readonly
|
Только для чтения
|
|
disabled
|
Заблокирован
|
|
list
|
Связка со списком опций datalist по id
|
|
required
|
Обязательный для заполнения
|
1 Шаг изменения
<input type="number" step="1" placeholder="step = 1"> <input type="number" step="10" placeholder="step = 10"> <input type="number" step="0.1" placeholder="step = 0.1">
2 Минимальное значение
<input type="number" step="10" min="0" placeholder="min = 0"> <input type="number" step="10" min="-100" placeholder="min = -100"> <input type="number" step="0.1"min="-0.1" placeholder="min = -0.1">
3 Максимальное значение
<input type="number" step="1" max="10" placeholder="max = 10"> <input type="number" step="10" max="100" placeholder="max = 100"> <input type="number" step="0.1" max="1.5" placeholder="max = 1.5">
4 Опции по умолчанию
<input type="number" list="input-list"> <datalist id="input-list"> <option value="111"> <option value="222"> <option value="333"> <option value="444"> <option value="555"> </datalist>
5 Валидация
<form> <input type="number" step="10" min="0" max="100" required> <input type="submit" value="Отправить"> </form>
Также доступны CSS псевдо свойства :invalid и :valid, с помощью них можно применить стили к неправильно заполненному полю.
<form> <div class="row"> <input type="number" step="10" min="0" max="100" required> <span></span> </div> <div class="row"> <input type="number" step="10" min="0" max="100" required> <span></span> </div> </form>
HTML
input[type="number"]:invalid+span:after { content: '✖'; padding-left: 5px; color: red; } input[type="number"]:valid+span:after { content: '✓'; padding-left: 5px; color: green; }
6 Стилизация
input[type="number"] { background-color: #eee; vertical-align: top; outline: none; padding: 0; height: 40px; line-height: 40px; text-indent: 10px; display: inline-block; width: 100%; box-sizing: border-box; border: 1px solid #ddd; font-size: 14px; border-radius: 3px; } input[type="number"]:focus { outline: 2px solid blue; }
7 Убрать стрелки
input[type="number"] { -moz-appearance: textfield; -webkit-appearance: textfield; appearance: textfield; } input[type="number"]::-webkit-outer-spin-button, input[type="number"]::-webkit-inner-spin-button { display: none; }
8 Как стилизовать стрелки
HTML
<div class="number"> <button class="number-minus" type="button" onclick="this.nextElementSibling.stepDown(); this.nextElementSibling.onchange();">-</button> <input type="number" min="0" value="1" readonly> <button class="number-plus" type="button" onclick="this.previousElementSibling.stepUp(); this.previousElementSibling.onchange();">+</button> </div>
CSS
.number { display: inline-block; position: relative; width: 100px; }
.number input[type="number"] { display: block; height: 32px; line-height: 32px; width: 100%; padding: 0; margin: 0; box-sizing: border-box; text-align: center; -moz-appearance: textfield; -webkit-appearance: textfield; appearance: textfield; }
.number input[type="number"]::-webkit-outer-spin-button, .number input[type="number"]::-webkit-inner-spin-button { display: none; }
.number-minus { position: absolute; top: 1px; left: 1px; bottom: 1px; width: 20px; padding: 0; display: block; text-align: center; border: none; border-right: 1px solid #ddd; font-size: 16px; font-weight: 600; }
.number-plus { position: absolute; top: 1px; right: 1px; bottom: 1px; width: 20px; padding: 0; display: block; text-align: center; border: none; border-left: 1px solid #ddd; font-size: 16px; font-weight: 600; }Swiper API
Полный HTML-макет Swiper
<!-- Slider main container -->
<div class="swiper">
<!-- Additional required wrapper -->
<div class="swiper-wrapper">
<!-- Slides -->
<div class="swiper-slide">Slide 1</div>
<div class="swiper-slide">Slide 2</div>
<div class="swiper-slide">Slide 3</div>
...
</div>
<!-- If we need pagination -->
<div class="swiper-pagination"></div>
<!-- If we need navigation buttons -->
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
<!-- If we need scrollbar -->
<div class="swiper-scrollbar"></div>
</div>
Стили
Пакет Swiper содержит различные наборы стилей CSS, Less и SCSS:
Стили CSS
Стили CSS для версии пакета:
swiper-bundle.css— все стили Swiper, включая стили всех модулей (например, навигации, постраничной навигации и т. д.)swiper-bundle.min.css- такой же, как предыдущий, но уменьшенный
Стили CSS для версии пакета (импорт пакета):
swiper/css— все стили Swiper, включая стили всех модулей (например, навигации, постраничной навигации и т. д.)swiper/css/bundle- такой же, как предыдущий, но уменьшенный
Стили CSS для базовой версии и модулей (импорт пакетов):
swiper/css- только основные стили Swiperswiper/css/a11y- стили, необходимые для модуля A11yswiper/css/autoplay- стили, необходимые для модуля автозапускаswiper/css/controller- стили, необходимые для модуля контроллераswiper/css/effect-cards- стили, необходимые для модуля Cards Effectswiper/css/effect-coverflow- стили, необходимые для модуля Coverflow Effectswiper/css/effect-creative- стили, необходимые для модуля Creative Effectswiper/css/effect-cube- стили, необходимые для модуля Cube Effectswiper/css/effect-fade- стили, необходимые для модуля эффекта затуханияswiper/css/effect-flip- стили, необходимые для модуля Flip Effectswiper/css/free-mode- стили, необходимые для модуля свободного режимаswiper/css/grid- стили, необходимые для модуля Gridswiper/css/hash-navigation- стили, необходимые для модуля навигации по хэшуswiper/css/history- стили, необходимые для модуля Историиswiper/css/keyboard- стили, необходимые для модуля клавиатурыswiper/css/manipulation- стили, необходимые для модуля манипулированияswiper/css/mousewheel- стили, необходимые для модуля Mousewheelswiper/css/navigation- стили, необходимые для навигационного модуляswiper/css/pagination- стили, необходимые для модуля разбивки на страницыswiper/css/parallax- стили, необходимые для модуля Parallaxswiper/css/scrollbar- стили, необходимые для модуля полосы прокруткиswiper/css/thumbs- стили, необходимые для модуля Thumbsswiper/css/virtual- стили, необходимые для виртуального модуляswiper/css/zoom- стили, необходимые для модуля масштабирования
Меньше стилей
Меньшие стили - это отдельные стили для базовой версии и модулей (импорт пакетов):
swiper/less- только основные стили Swiperswiper/less/bundle— все стили Swiper, включая стили всех модулей (например, навигации, постраничной навигации и т. д.)swiper/less/a11y- стили, необходимые для модуля A11yswiper/less/autoplay- стили, необходимые для модуля автозапускаswiper/less/controller- стили, необходимые для модуля контроллераswiper/less/effect-cards- стили, необходимые для модуля Cards Effectswiper/less/effect-coverflow- стили, необходимые для модуля Coverflow Effectswiper/less/effect-creative- стили, необходимые для модуля Creative Effectswiper/less/effect-cube- стили, необходимые для модуля Cube Effectswiper/less/effect-fade- стили, необходимые для модуля эффекта затуханияswiper/less/effect-flip- стили, необходимые для модуля Flip Effectswiper/less/free-mode- стили, необходимые для модуля свободного режимаswiper/less/grid- стили, необходимые для модуля Gridswiper/less/hash-navigation- стили, необходимые для модуля навигации по хэшуswiper/less/history- стили, необходимые для модуля Историиswiper/less/keyboard- стили, необходимые для модуля клавиатурыswiper/less/manipulation- стили, необходимые для модуля манипулированияswiper/less/mousewheel- стили, необходимые для модуля Mousewheelswiper/less/navigation- стили, необходимые для навигационного модуляswiper/less/pagination- стили, необходимые для модуля разбивки на страницыswiper/less/parallax- стили, необходимые для модуля Parallaxswiper/less/scrollbar- стили, необходимые для модуля полосы прокруткиswiper/less/thumbs- стили, необходимые для модуля Thumbsswiper/less/virtual- стили, необходимые для виртуального модуляswiper/less/zoom- стили, необходимые для модуля масштабирования
Стили SCSS
Стили SCSS также являются отдельными стилями для основной версии и модулей (импортируемых пакетов):
swiper/scss- только основные стили Swiperswiper/scss/bundle— все стили Swiper, включая стили всех модулей (например, навигации, постраничной навигации и т. д.)swiper/scss/a11y- стили, необходимые для модуля A11yswiper/scss/autoplay- стили, необходимые для модуля автозапускаswiper/scss/controller- стили, необходимые для модуля контроллераswiper/scss/effect-cards- стили, необходимые для модуля Cards Effectswiper/scss/effect-coverflow- стили, необходимые для модуля Coverflow Effectswiper/scss/effect-creative- стили, необходимые для модуля Creative Effectswiper/scss/effect-cube- стили, необходимые для модуля Cube Effectswiper/scss/effect-fade- стили, необходимые для модуля эффекта затуханияswiper/scss/effect-flip- стили, необходимые для модуля Flip Effectswiper/scss/free-mode- стили, необходимые для модуля свободного режимаswiper/scss/grid- стили, необходимые для модуля Gridswiper/scss/hash-navigation- стили, необходимые для модуля навигации по хэшуswiper/scss/history- стили, необходимые для модуля Историиswiper/scss/keyboard- стили, необходимые для модуля клавиатурыswiper/scss/manipulation- стили, необходимые для модуля манипулированияswiper/scss/mousewheel- стили, необходимые для модуля Mousewheelswiper/scss/navigation- стили, необходимые для навигационного модуляswiper/scss/pagination- стили, необходимые для модуля разбивки на страницыswiper/scss/parallax- стили, необходимые для модуля Parallaxswiper/scss/scrollbar- стили, необходимые для модуля полосы прокруткиswiper/scss/thumbs- стили, необходимые для модуля Thumbsswiper/scss/virtual- стили, необходимые для виртуального модуляswiper/scss/zoom- стили, необходимые для модуля масштабирования
Инициализировать Swiper
Теперь, когда у нас есть HTML-код Swiper, нам нужно инициализировать его с помощью следующей функции:
новый Swiper (swiperContainer, параметры) - инициализирует swiper с помощью опций
- swiperContainer — HTMLElement или строка (с CSS-селектором) HTML-элемента контейнера свипера. Обязательно.
- параметры - объект - объект с параметрами Swiper. Необязательно.
- Метод возвращает инициализированный экземпляр Swiper
Например:
const swiper = new Swiper('.swiper', {
speed: 400,
spaceBetween: 100,
});
Послеинициализации Swiper можно получить доступ к экземпляру Swiper в его HTMLElement. Этоswiperсвойство HTML-элемента контейнера Swiper:
const swiper = document.querySelector('.swiper').swiper;
// Now you can use all slider methods like
swiper.slideNext();
Параметры
Давайте посмотрим на список всех доступных параметров:
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
| a11y | Любой |
Объект с параметрами a11y или логический
|
|
| allowSlideNext | логическое значение | верно |
Установите значение |
| allowSlidePrev | логическое значение | верно |
Установите значение |
| Разрешить касание | логическое значение | верно |
Если |
| Автоматический рост | логическое значение | ложь |
Задайте значение |
| автоматическое воспроизведение | Любой |
Объект с параметрами автозапуска или логическим значением
|
|
| точки останова | объект |
Позволяет задавать разные параметры для разных точек останова (размеров экрана). Не все параметры можно изменить в точках останова, только те, которые не требуют другого макета и логики, например
|
|
| База контрольных точек | «контейнер»|«окно» | "окно" |
База для точек останова (бета-версия). Может быть |
| Эффект карты | Любой |
Объект с картами-параметры эффекта
|
|
| Центрирующие оползни | логическое значение | ложь |
Если этот параметр включен, слайды центрируются, если количество слайдов меньше |
| центрироВанные оползни | логическое значение | ложь |
Если |
| Центрированные скользящие границы | логическое значение | ложь |
Если |
| containerModifierClass | строка | "swiper-" |
Начало CSS-класса модификатора, который можно добавить в контейнер Swiper в зависимости от различных параметров |
| контроллер | Любой |
Объект с параметрами контроллера или логическим значением
|
|
| Эффект coverflowEffect | Любой |
Объект с параметрами эффекта Coverflow.
|
|
| createElements | логическое значение | ложь |
При включении Swiper автоматически обернет слайды элементом swiper-wrapper и создаст необходимые элементы для навигации, разбивки на страницы и полосы прокрутки, если они включены (с соответствующим объектом параметров или с логическим значением |
| Творческий эффект | Любой |
Объект с параметрами креативного эффекта
|
|
| cssMode | логическое значение | ложь |
При включении он будет использовать современный CSS Scroll Snap API. Он поддерживает не все функции Swiper, но потенциально может значительно повысить производительность в простых конфигурациях. Это то, что не поддерживается, когда оно включено:
Если вы используете его с другими эффектами, особенно с 3D-эффектами, необходимо обернуть содержимое слайда элементом
|
| Эффект куба | Любой |
Объект с параметрами кубического эффекта
|
|
| направление | «по горизонтали»|«по вертикали» | "горизонтальный" |
Может быть |
| Обнаружение кромки | строка|логическое значение | ложь |
Включите события Swiper для работы с возвратом свайпом в приложении. Если установлено значение |
| edgeSwipeThreshold | номер | 20 |
Область (в пикселях) от левого края экрана для отпускания сенсорных событий при свайпе назад в приложении |
| эффект | строка | "слайд" |
Эффект перехода. Может быть |
| включен | логическое значение | верно |
Независимо от того, был ли Swiper изначально включен. Если Swiper отключен, он скроет все элементы навигации и не будет реагировать на какие-либо события и взаимодействия |
| eventsPrefix | строка | `swiper` |
Префикс имени события для всех событий DOM, генерируемых элементом Swiper (веб-компонентом) |
| Эффект затухания | Любой |
Объект с параметрами эффекта затухания
|
|
| flipEffect | Любой |
Объект с параметрами эффекта переворота
|
|
| Фокусируемые элементы | строка | «ввод, выбор, опция, текстовое поле, кнопка, видео, метка» |
Селектор CSS для элементов, на которые можно навести курсор. Свайпинг будет отключен для таких элементов, если они «наведены» |
| followFinger | логическое значение | верно |
Если функция отключена, то ползунок будет анимироваться только при отпускании, он не будет двигаться, пока вы удерживаете на нём палец |
| Бесплатный режим | Любой |
Включает функции бесплатного режима. Объект с параметрами бесплатного режима или логическое значение
|
|
| grabCursor | логическое значение | ложь |
Эта опция может немного улучшить удобство использования Swiper на компьютере. Если |
| сетка | Любой |
Объект с параметрами сетки для включения ползунка «многострочный».
|
|
| Хэшнавигация | Любой |
Включает навигацию по хэш-ссылкам для слайдов. Объект с параметрами хэш-навигации или логическое значение
|
|
| высота | нулевой|номер | null |
Высота Swiper (в пикселях). Параметр позволяет задать высоту Swiper. Полезно только в том случае, если вы инициализируете Swiper, когда он скрыт, а также в средах SSR и Test для правильной инициализации Swiper
|
| история | Любой |
Включает функцию сохранения состояния истории, при которой у каждого слайда будет свой URL-адрес. В этом параметре необходимо указать URL-адрес основного слайда, например Объект с параметрами навигации по истории или логическим значением
|
|
| инициализация | логическое значение | верно |
Следует ли инициализировать Swiper автоматически при создании экземпляра. Если эта функция отключена, то вам нужно инициализировать Swiper вручную, вызвав |
| initialSlide | номер | 0 |
Порядковый номер начального слайда. |
| Инжектные стили | строка[] |
Внедрите стили текста в теневой DOM. Только для использования с элементом Swiper |
|
| injectStylesUrls | строка[] |
Внедрите стили |
|
| клавиатура | Любой |
Позволяет перемещаться по слайдам с помощью клавиатуры. Объект с параметрами клавиатуры или логическое значение
|
|
| lazyPreloadPrevNext | номер | 0 |
Количество следующих и предыдущих слайдов для предварительной загрузки. Применимо только при использовании отложенной загрузки. |
| Класс lazyPreloaderClass | строка | "swiper-ленивый предварительный загрузчик" |
Имя CSS-класса ленивого предварительного загрузчика |
| Длинные наконечники | логическое значение | верно |
Установите значение |
| longSwipesMs | номер | 300 |
Минимальная продолжительность (в миллисекундах) для перехода к следующему/предыдущему слайду при длительном смахивании |
| Стратегия длинных свайпов | номер | 0.5 |
Соотношение для перехода к следующему / предыдущему слайду при длительном пролистывании |
| цикл | логическое значение | ложь |
Установите значение Из-за особенностей работы режима цикла (он меняет порядок слайдов) общее количество слайдов должно быть:
|
| loopAddBlankSlides | логическое значение | верно |
Автоматически добавляет пустые слайды, если вы используете сетку или |
| loopAdditionalSlides | номер | 0 |
Позволяет увеличить количество закольцованных слайдов |
| loopPreventsSliding | логическое значение | верно |
Если эта функция включена, то кнопки «Далее» и «Назад» не будут работать, пока слайдер анимируется в режиме цикла |
| maxBackfaceHiddenSlides | номер | 10 |
Если общее количество слайдов меньше указанного здесь значения, то Swiper включит
|
| модули | любой[] |
Массив с модулями Swiper
|
|
| колесо мыши | Любой |
Позволяет перемещаться по слайдам с помощью колёсика мыши. Объект с параметрами колёсика мыши или логическое значение
|
|
| навигация | Любой |
Объект с параметрами навигации или логическим значением
|
|
| вложенный | логическое значение | ложь |
Установите |
| Промывка носа | логическое значение | верно |
Включать / отключать прокрутку элементов, соответствующих классу, указанному в |
| noSwipingClass | строка | "swiper-без пролистывания" |
Укажите |
| noSwipingSelector | строка |
Может использоваться вместо |
|
| normalizeSlideIndex | логическое значение | верно |
Нормализует индекс слайда. |
| Наблюдаем за родителями | логическое значение | ложь |
Установите значение |
| Наблюдает за детьми | логическое значение | ложь |
Установите значение |
| наблюдатель | логическое значение | ложь |
Задайте значение |
| вкл . | объект |
Регистрация обработчиков событий |
|
| На любом | функция(обработчик) |
Добавьте прослушиватель событий, который будет запускаться при всех событиях
|
|
| oneWayMovement | логическое значение | ложь |
Если эта функция включена, слайды будут прокручиваться только вперёд (в одну сторону) независимо от направления прокрутки |
| разбивка на страницы | Любой |
Объект с параметрами разбивки на страницы или логическим значением
|
|
| параллакс | Любой |
Объект с параметрами параллакса или boolean
|
|
| Пассивные прослушиватели | логическое значение | верно |
По умолчанию для повышения производительности прокрутки на мобильных устройствах будут использоваться пассивные слушатели событий. Но если вам нужно использовать |
| Предотвращение щелчков | логическое значение | верно |
Установите значение |
| Предотвращение распространения Clicksprop | логическое значение | верно |
Установите значение |
| Предотвращение взаимодействия при переходе | логическое значение | ложь |
Если эта функция включена, она не позволит менять слайды с помощью свайпа или кнопок навигации/пагинации во время перехода |
| сопротивление | логическое значение | верно |
Установите значение |
| Сопротивление | номер | 0.85 |
Эта опция позволяет вам контролировать коэффициент сопротивления |
| Сервер изменения размера | логическое значение | верно |
Если эта функция включена, она будет использовать ResizeObserver (если поддерживается браузером) для контейнера Swiper, чтобы определять изменение размера контейнера (вместо отслеживания изменения размера окна) |
| перемотка назад | логическое значение | ложь |
Установите значение
|
| Длина круга | логическое значение | ложь |
Задайте |
| runCallbacksOnInit | логическое значение | верно |
При инициализации свипера запускаются события Transition/SlideChange/Start/End. Такие события будут запускаться при инициализации, если ваш initialSlide не равен 0 или вы используете режим цикла |
| полоса прокрутки | Любой |
Объект с параметрами полосы прокрутки или логическим значением
|
|
| setWrapperSize | логическое значение | ложь |
Если вы включите эту опцию, плагин установит ширину/высоту оболочки Swiper, равную общему размеру всех слайдов. В основном эту опцию следует использовать в качестве запасного варианта совместимости для браузеров, которые плохо поддерживают макет flexbox |
| Короткие замахи | логическое значение | верно |
Установите значение |
| simulateTouch | логическое значение | верно |
Если |
| slideActiveClass | строка | "swiper-slide-активный" |
Имя CSS-класса текущего активного слайда
|
| slideBlankClass | строка | "swiper-slide-пустой" |
Имя CSS-класса пустого слайда, добавляемого в режиме цикла (при включении
|
| slideClass | строка | "swiper-слайд" |
Имя CSS-класса слайда
|
| slideFullyVisibleClass | строка | "swiper-слайд-полностью-виден" |
Имя CSS-класса для полностью (когда весь слайд находится в области просмотра) видимого слайда
|
| slideNextClass | строка | "swiper-slide-next" |
Имя CSS-класса слайда, которое находится сразу после текущего активного слайда
|
| slidePrevClass | строка | 'swiper-slide-предыдущий' |
CSS-класс slide, который находится прямо перед текущим активным слайдом
|
| slideToClickedSlide | логическое значение | ложь |
Установите значение |
| slideVisibleClass | строка | "видимый слайд swiper" |
Имя CSS-класса текущего / частично видимого слайда
|
| slidesoffset после | номер | 0 |
Добавьте (в пикселях) дополнительное смещение слайда в конце контейнера (после всех слайдов) |
| slidesOffsetBefore | номер | 0 |
Добавьте (в пикселях) дополнительное смещение слайда в начале контейнера (перед всеми слайдами) |
| slidesPerGroup | номер | 1 |
Задайте количество слайдов для определения и включения группового скольжения. Полезно использовать с slidesPerView > 1 |
| slidesPerGroupAuto | логическое значение | ложь |
Этот параметр предназначен для использования только с |
| slidesPerGroupSkip | номер | 0 |
Параметр работает следующим образом: Если Если |
| Просмотр слайдов | номер|"авто" | 1 |
Количество слайдов на один просмотр (количество слайдов, одновременно отображаемых в контейнере слайдера).
|
| Расстояние между | строка|номер | 0 |
Расстояние между слайдами в пикселях.
|
| Скорость | номер | 300 |
Продолжительность перехода между слайдами (в мс) |
| Манипулятор прокрутки | Любой | null |
Строка с CSS-селектором или HTML-элементом контейнера с разбивкой на страницы, которая будет работать как единственный доступный обработчик для прокрутки |
| swiperElementNodeName | строка | "SWIPER-КОНТЕЙНЕР" |
Имя узла элемента swiper; используется для определения рендеринга веб-компонента |
| пороговое значение | номер | 5 |
Пороговое значение в пикселях. Если «расстояние касания» будет меньше этого значения, то свиппер не будет перемещаться |
| большие пальцы | Любой |
Объект с параметрами компонента thumbs
|
|
| Touchangle'а | номер | 45 |
Допустимый угол (в градусах) для запуска сенсорного перемещения |
| touchEventsTarget | 'контейнер'|'обёртка' | "оболочка" |
Целевой элемент для прослушивания событий касания. Может быть |
| touchMoveStopPropagation | логическое значение | ложь |
Если эта функция включена, то распространение события «касание» будет остановлено |
| Сенсорное управЛение | номер | 1 |
Коэффициент соприкосновения |
| touchReleaseOnEdges | логическое значение | ложь |
Включите отработку событий касания в крайних положениях ползунка (начало, конец), чтобы обеспечить дальнейшую прокрутку страницы. Эта функция работает только с событиями касания (а не с событиями указателя), поэтому она будет работать на устройствах iOS/Android и не будет работать на устройствах Windows с событиями указателя. Также |
| touchStartForcePreventDefault | логическое значение | ложь |
Принудительно всегда предотвращать событие по умолчанию для |
| touchStartPreventDefault | логическое значение | верно |
Если он отключен, |
| Уникальные возможности | логическое значение | верно |
Если включено (по умолчанию) и параметры элементов навигации передаются в виде строки (например, |
| Обновите размер окна | логическое значение | верно |
Swiper будет пересчитывать положение слайдов при изменении размера окна (ориентации) |
| url | нулевая|строка | null |
Требуется для активного обнаружения слайдов при рендеринге на стороне сервера и включенной истории |
| Пользовательский агент | нулевая|строка | null |
строка userAgent. Требуется для определения браузера/устройства при рендеринге на стороне сервера |
| виртуальный | Любой |
Включает функцию виртуальных слайдов. Объект с параметрами виртуальных слайдов или логическое значение
|
|
| Виртуальный перевод | логическое значение | ложь |
Если вы включите эту опцию, слайдер будет работать как обычно, за исключением того, что он не будет перемещаться, а значения реального перемещения на обёртке не будут заданы. Полезно, если вам нужно создать собственный переход слайдов |
| watchOverflow | логическое значение | верно |
При включении Swiper будет отключён и скроет кнопки навигации, если для скольжения недостаточно слайдов. |
| watchSlidesProgress | логическое значение | ложь |
Включите эту функцию, чтобы рассчитать прогресс и видимость каждого слайда (слайды в области просмотра будут иметь дополнительный класс видимости) |
| ширина | нулевой|номер | null |
Ширина Swiper (в пикселях). Параметр позволяет задать ширину Swiper. Полезно только в том случае, если вы инициализируете Swiper, когда он скрыт, а также в средах SSR и Test для правильной инициализации Swiper
|
| КЛАСС -оболочка | строка | "swiper-оболочка" |
Имя CSS-класса оболочки слайдов
|
| масштабирование | Любой |
Включает функцию масштабирования. Объект с параметрами масштабирования или логическое значение
|
Методы и свойства
После инициализации Slider мы получаем его инициализированный экземпляр в переменной (например, переменнаяswiperв приведённом выше примере) с полезными методами и свойствами:
Мероприятия
Swiper содержит множество полезных событий, которые вы можете прослушать. События можно назначать двумя способами:
-
Использование
onпараметра при инициализации swiper:const swiper = new Swiper('.swiper', { // ... on: { init: function () { console.log('swiper initialized'); }, }, }); -
Использование
onметода после инициализации swiper.const swiper = new Swiper('.swiper', { // ... }); swiper.on('slideChange', function () { console.log('slide changed'); });
thisключевое слово в обработчике событий всегда указывает на экземпляр Swiper| Имя | Аргументы | Описание |
|---|---|---|
| activeIndexChange | (swiper) |
Событие будет срабатывать при активном изменении индекса |
| afterInit | (swiper) |
Событие будет запущено сразу после инициализации |
| beforeDestroy | (swiper) |
Событие будет запущено непосредственно перед уничтожением Swiper |
| Перед запуском | (swiper) |
Событие будет запущено непосредственно перед инициализацией |
| beforeLoopFix | (swiper) |
Событие будет запущено непосредственно перед "исправлением цикла" |
| Перед обработкой | (swiper) |
Событие будет запущено перед обработчиком изменения размера |
| beforeSlideChangeStart | (swiper) |
Событие будет запущено до начала перехода к смене слайда |
| Перед началом перехода | (swiper, скорость, внутренний) |
Событие будет запущено до начала перехода |
| точка останова | (swiper, параметры точки останова) |
Событие будет запущено при изменении точки останова |
| Измененное направление | (swiper) |
Событие будет запущено при изменении направления |
| нажмите | (swiper, событие) |
Событие будет запущено, когда пользователь нажмёт/коснётся Swiper. Получает |
| уничтожить | (swiper) |
Событие будет запущено при уничтожении swiper |
| Двойной щелчок | (swiper, событие) |
Событие будет запущено, когда пользователь дважды щелкнет по Swiper |
| Двойной щелчок | (swiper, событие) |
Событие будет запущено, когда пользователь дважды коснётся контейнера Swiper. Получает |
| fromEdge | (swiper) |
Событие будет запущено, когда Swiper перейдет из начальной или конечной позиции |
| инициализация | (swiper) |
Сработал сразу после инициализации Swiper.
|
| блокировка | (swiper) |
Событие будет запущено, когда swiper заблокирован (когда |
| Исправление цикла | (swiper) |
Событие будет запущено после "исправления цикла" |
| Мгновенный скачок | (swiper) |
Событие будет запущено при отскоке импульса |
| Обновление наблюдения | (swiper) |
Событие будет запущено, если observer включен и он обнаруживает мутации DOM |
| изменение ориентации | (swiper) |
Событие будет запущено при изменении ориентации (например, альбомная -> портретная) |
| прогресс | (swiper, прогресс) |
Событие будет запущено при изменении прогресса Swiper. В качестве аргументов оно получает прогресс, который всегда находится в диапазоне от 0 до 1 |
| Начало работы | (swiper) |
Событие будет запущено, когда Swiper достигнет своего начала (начальной позиции) |
| reachEnd | (swiper) |
Событие будет запущено, когда Swiper достигнет последнего слайда |
| Реальный обмен данными | (swiper) |
Событие будет запущено при реальном изменении индекса |
| изменение размера | (swiper) |
Событие будет запущено при изменении размера окна непосредственно перед обработкой Swiper onresize |
| setTransition | (swiper, переход) |
Событие будет срабатывать каждый раз, когда свиппер запускает анимацию. Получает в качестве аргумента текущую продолжительность перехода (в миллисекундах) |
| setTranslate | (swiper, перевести) |
Событие будет запущено, когда обёртка Swiper изменит своё положение. Получает текущее значение перевода в качестве аргумента |
| Изменение слайдов | (swiper) |
Событие будет запущено при изменении текущего активного слайда |
| slideChangeTransitionEnd | (swiper) |
Событие будет запущено после анимации другого слайда (следующего или предыдущего). |
| slideChangeTransitionStart | (swiper) |
Событие будет запущено в начале перехода на другой слайд (следующий или предыдущий). |
| slideNextTransitionEnd | (swiper) |
То же, что и «slideChangeTransitionEnd», но только для направления «вперёд» |
| slideNextTransitionStart | (swiper) |
То же, что и «slideChangeTransitionStart», но только для направления «вперёд» |
| slidePrevTransitionEnd | (swiper) |
То же, что и «slideChangeTransitionEnd», но только для «обратного» направления |
| slidePrevTransitionStart | (swiper) |
То же, что и «slideChangeTransitionStart», но только в направлении «назад» |
| slideResetTransitionEnd | (swiper) |
Событие будет запущено в конце анимации при переходе на следующий слайд |
| slideResetTransitionStart | (swiper) |
Событие будет запущено в начале анимации перехода на текущий слайд |
| sliderFirstMove | (swiper, событие) |
Событие будет запущено при первом касании / перетаскивании |
| sliderMove | (swiper, событие) |
Событие будет запущено, когда пользователь коснётся Swiper и проведёт по нему пальцем. Получает |
| slidesGridLengthChange | (swiper) |
Событие будет запущено при изменении сетки слайдов |
| Изменение длины слайда | (swiper) |
Событие будет запущено при изменении количества слайдов |
| Обновлено слайд-шоу | (swiper) |
Событие будет запущено после того, как слайды и их размеры будут рассчитаны и обновлены |
| snapGridLengthChange | (swiper) |
Событие будет запущено при изменении привязки сетки |
| snapIndexChange | (swiper) |
Событие будет запущено при изменении индекса привязки |
| нажмите | (swiper, событие) |
Событие будет запущено, когда пользователь нажмёт/коснётся Swiper. Получает |
| toEdge | (swiper) |
Событие будет запущено, когда Swiper перейдет в начальную или конечную позицию |
| touchEnd | (swiper, событие) |
Событие будет запущено, когда пользователь отпустит Swiper. Получает |
| touchMove | (swiper, событие) |
Событие будет запущено, когда пользователь коснётся Swiper и проведёт по нему пальцем. Получает |
| touchMoveOpposite | (swiper, событие) |
Событие будет запущено, когда пользователь коснётся Swiper и проведёт пальцем в направлении, противоположном параметру направления. Получает |
| Сенсорный запуск | (swiper, событие) |
Событие будет запущено, когда пользователь коснётся Swiper. Получает |
| Завершение перехода | (swiper) |
Событие будет запущено после перехода. |
| Начало перехода | (swiper) |
Событие будет запущено в начале перехода. |
| разблокировать | (swiper) |
Событие будет запущено, когда swiper будет разблокирован (когда |
| Обновить | (swiper) |
Событие будет запущено после вызова swiper.update() |
Модули
Параметры навигации
Методы навигации
Навигационные события
Пользовательские свойства CSS Навигации
{
--swiper-navigation-size: 44px;
--swiper-navigation-top-offset: 50%;
--swiper-navigation-sides-offset: 10px;
--swiper-navigation-color: var(--swiper-theme-color);
}
Параметры разбивки на страницы
Методы разбивки на страницы
События разбивки на страницы
Пользовательские свойства CSS Разбиения на страницы
{
--swiper-pagination-color: var(--swiper-theme-color);
--swiper-pagination-left: auto;
--swiper-pagination-right: 8px;
--swiper-pagination-bottom: 8px;
--swiper-pagination-top: auto;
--swiper-pagination-fraction-color: inherit;
--swiper-pagination-progressbar-bg-color: rgba(0, 0, 0, 0.25);
--swiper-pagination-progressbar-size: 4px;
--swiper-pagination-bullet-size: 8px;
--swiper-pagination-bullet-width: 8px;
--swiper-pagination-bullet-height: 8px;
--swiper-pagination-bullet-inactive-color: #000;
--swiper-pagination-bullet-inactive-opacity: 0.2;
--swiper-pagination-bullet-opacity: 1;
--swiper-pagination-bullet-horizontal-gap: 4px;
--swiper-pagination-bullet-vertical-gap: 6px;
}
Параметры полосы прокрутки
Методы полосы прокрутки
События полосы прокрутки
Пользовательские свойства CSS полосы прокрутки
{
--swiper-scrollbar-border-radius: 10px;
--swiper-scrollbar-top: auto;
--swiper-scrollbar-bottom: 4px;
--swiper-scrollbar-left: auto;
--swiper-scrollbar-right: 4px;
--swiper-scrollbar-sides-offset: 1%;
--swiper-scrollbar-bg-color: rgba(0, 0, 0, 0.1);
--swiper-scrollbar-drag-bg-color: rgba(0, 0, 0, 0.5);
--swiper-scrollbar-size: 4px;
}
Параметры автозапуска
Методы автозапуска
Автоматическое воспроизведение событий
Параметры свободного режима
Параметры сетки
Модуль манипуляций добавляет полезные методы Swiper для управления слайдами. Его имеет смысл использовать только с версией Swiper Core, он не предназначен для использования с Swiper React или Vue.
Методы манипулирования
Swiper поддерживает эффекты перехода с эффектом параллакса для вложенных элементов swiper/slides. Поддерживаются два типа элементов с эффектом параллакса:
- Прямые дочерние элементы
swiper. Эффект параллакса для таких элементов будет зависеть от общего положения ползунка. Полезно для параллакс-фонов - Вложенные элементы слайдов. Эффект параллакса для таких элементов будет зависеть от хода слайда
Чтобы включить эффект параллакса, необходимо инициализировать Swiper с помощью переданного параметраparallax:trueи добавить один из следующих (или их сочетание) атрибутов к нужным элементам:
data-swiper-parallax- включить преобразование-перевод параллаксного перехода. Этот атрибут может принимать:number- значение в пикселях (как для заголовка, подзаголовка в примере выше) для перемещения элемента в зависимости от прогресса. В этом случае такой элемент будет перемещён на ± это значение в пикселях в зависимости от положения слайда (следующий или предыдущий)percentage- (как для «параллакс-фона») для перемещения элемента в зависимости от прогресса и его размера. В этом случае такой элемент будет перемещён на ± этот процент от его размера (ширины в горизонтальном направлении и высоты в вертикальном направлении) в зависимости от положения слайда (следующий или предыдущий). Таким образом, если ширина элемента составляет 400 пикселей, а вы указали data-swiper-parallax = «50%», то он будет перемещён на ± 200 пикселей
data-swiper-parallax-xто же самое, но для направления по оси xdata-swiper-parallax-yто же самое, но для направления по оси ydata-swiper-parallax-scale— коэффициент масштабирования элемента параллакса, когда он находится в «неактивном» (не на активном слайде) состоянииdata-swiper-parallax-opacity— непрозрачность элемента параллакса, когда он находится в «неактивном» (не на активном слайде) состоянииdata-swiper-parallax-duration- настраиваемая продолжительность перехода для элементов parallax
<div class="swiper">
<!-- Parallax background element -->
<div
class="parallax-bg"
style="background-image:url(path/to/image.jpg)"
data-swiper-parallax="-23%"
></div>
<div class="swiper-wrapper">
<div class="swiper-slide">
<!-- Each slide has parallax title -->
<div class="title" data-swiper-parallax="-100">Slide 1</div>
<!-- Parallax subtitle -->
<div class="subtitle" data-swiper-parallax="-200">Subtitle</div>
<!-- And parallax text with custom transition duration -->
<div
class="text"
data-swiper-parallax="-300"
data-swiper-parallax-duration="600"
>
<p>Lorem ipsum dolor sit amet, ...</p>
</div>
<!-- Opacity parallax -->
<div data-swiper-parallax-opacity="0.5">I will change opacity</div>
<!-- Scale parallax -->
<div data-swiper-parallax-scale="0.15">I will change scale</div>
</div>
...
</div>
</div>
Параметры Параллакса
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
| включен | логическое значение | ложь |
Включите, если вы хотите использовать «параллаксовые» элементы внутри слайдера |
Начиная с версии 9 у Swiper нет специального API для отложенной загрузки, так как он полагается на встроенную функцию отложенной загрузки браузера. Чтобы использовать отложенную загрузку, нам нужно просто установитьloading="lazy"для изображений и добавить элемент предварительной загрузки:
<div class="swiper">
<div class="swiper-wrapper">
<!-- Lazy image -->
<div class="swiper-slide">
<img src="path/to/picture-1.jpg" loading="lazy" />
<div class="swiper-lazy-preloader"></div>
</div>
<!-- Lazy image with srcset -->
<div class="swiper-slide">
<img
src="path/to/logo-small.png"
srcset="path/to/logo-large.png 2x"
loading="lazy"
/>
<div class="swiper-lazy-preloader"></div>
</div>
</div>
</div>
Как вы видите:
- Ленивое изображение должно иметь
loading="lazy"атрибут - Добавьте на слайд анимированный индикатор загрузки, который будет удалён автоматически после загрузки изображения:
<div class="swiper-lazy-preloader"></div>
Или белый для темного макета:
<div class="swiper-lazy-preloader swiper-lazy-preloader-white"></div>
Чтобы это сработало, убедитесь, что параметрeffectустановлен на'fade'
crossFadeследует заменить наtrue, чтобы не видеть содержимое позади или под ним.Параметры эффекта затухания
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
| Перекрестное затухание | логическое значение | ложь |
Позволяет слайдам перекрестно исчезать |
Чтобы это сработало, убедитесь, что параметрeffectустановлен на'coverflow'
Параметры эффекта Coverflow
Чтобы это сработало, убедитесь, что параметрeffectустановлен на'flip'
Параметры эффекта переворота
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
| Ограничение скорости | логическое значение | верно |
Ограничение вращения краевых слайдов |
| Тени для слайдов | логическое значение | верно |
Позволяет создавать тени на слайдах |
Чтобы это сработало, убедитесь, что параметрeffectустановлен на'cube'
Параметры эффекта куба
Чтобы это сработало, убедитесь, что параметрeffectустановлен на'cards'
Параметры эффекта карт
Чтобы это сработало, убедитесь, что параметрeffectустановлен на'creative'
Параметры креативного эффекта
В дополнение к компонентуControllerSwiper поставляется с компонентом Thumbs, который предназначен для более корректной работы с дополнительным свайпером Thumbs, чем компонент Controller, используемый для синхронизации двух свайперов.
Параметры Thumbs
Методы Thumbs
| Свойства | ||
|---|---|---|
| swiper.swiper | Любой |
Swiper экземпляр thumbs swiper |
| Методы | ||
| swiper.init() |
Инициализировать большие пальцы |
|
| swiper.обновление (начальное) |
Обновите thumbs |
|
Swiper поддерживает функцию масштабирования изображений (аналогичную той, что вы видите в iOS при просмотре одной фотографии), когда вы можете увеличить изображение с помощью жеста сжатия или уменьшить/увеличить его двойным нажатием. В этом случае требуется дополнительная настройка:
<div class="swiper">
<div class="swiper-wrapper">
<div class="swiper-slide">
<div class="swiper-zoom-container">
<img src="path/to/image1.jpg" />
</div>
</div>
<div class="swiper-slide">
<div class="swiper-zoom-container">
<img src="path/to/image2.jpg" />
</div>
</div>
<div class="swiper-slide">Plain slide with text</div>
<div class="swiper-slide">
<!-- Override maxRatio parameter -->
<div class="swiper-zoom-container" data-swiper-zoom="5">
<img src="path/to/image1.jpg" />
</div>
</div>
</div>
</div>
- Все изображения, которые можно увеличивать, должны быть заключены в элемент div с классом
swiper-zoom-container. - По умолчанию предполагается, что вы увеличиваете масштаб одного из элементов
img,pictureилиcanvas. Если вы хотите увеличить масштаб какого-то другого пользовательского элемента, просто добавьте к нему классswiper-zoom-target. Например:<div class="swiper"> <div class="swiper-wrapper"> <div class="swiper-slide"> <div class="swiper-zoom-container"> <!-- custom zoomable element --> <div class="swiper-zoom-target" style="background-image: url(...)" ></div> </div> </div> </div> </div> - Вы можете переопределить параметр
maxRatioдля конкретных слайдов, используя атрибутdata-swiper-zoomв контейнере масштабирования.
Параметры масштабирования
Методы масштабирования
Масштабирование событий
| Имя | Аргументы | Описание |
|---|---|---|
| Изменение масштаба | (swiper, масштабирование, imageEl, slideEl) |
Событие будет запущено при изменении масштаба |
Параметры управления клавиатурой
Методы управления клавиатурой
| Свойства | ||
|---|---|---|
| swiper.включен | логическое значение |
Включено ли управление с клавиатуры |
| Методы | ||
| swiper.отключить() |
Отключить управление с клавиатуры |
|
| swiper.enable() |
Включить управление с клавиатуры |
|
События клавиатуры
| Имя | Аргументы | Описание |
|---|---|---|
| Нажатие клавиши | (swiper, ключевой код) |
Событие будет запущено при нажатии клавиши |
Параметры управления колесиком мыши
Методы управления колесиком мыши
| Свойства | ||
|---|---|---|
| swiper.включен | логическое значение |
Включено ли управление колесиком мыши |
| Методы | ||
| swiper.отключить() |
Отключить управление колесиком мыши |
|
| swiper.enable() |
Включить управление колесиком мыши |
|
События Колеса мыши
Модуль «Виртуальные слайды» позволяет хранить в DOM только необходимое количество слайдов. Это очень полезно с точки зрения производительности и проблем с памятью, если у вас много слайдов, особенно слайдов с тяжёлым деревом DOM или изображениями.
slidesPerView: 'auto'Параметры виртуальных слайдов
Методы виртуальных слайдов
Виртуальные слайды Dom
Начиная с версии 9, виртуальные слайды Swiper могут работать со слайдами, изначально отображаемыми в DOM. При инициализации они удаляются из DOM, кэша, а затем повторно используются те, которые необходимы:
<div class="swiper">
<div class="swiper-wrapper">
<div class="swiper-slide">Slide 1</div>
<div class="swiper-slide">Slide 2</div>
...
<div class="swiper-slide">Slide 100</div>
</div>
</div>
<script>
const swiper = new Swiper('.swiper', {
virtual: {
enabled: true,
},
});
</script>
Хэш-навигация предназначена для создания ссылки на конкретный слайд, которая позволяет загрузить страницу с открытым конкретным слайдом.
Чтобы это работало, вам нужно включить его, передав параметрhashNavigation:trueи добавив хэши слайдов в атрибутdata-hash:
<div class="swiper">
<div class="swiper-wrapper">
<div class="swiper-slide" data-hash="slide1">Slide 1</div>
<div class="swiper-slide" data-hash="slide2">Slide 2</div>
<div class="swiper-slide" data-hash="slide3">Slide 3</div>
<div class="swiper-slide" data-hash="slide4">Slide 4</div>
<div class="swiper-slide" data-hash="slide5">Slide 5</div>
...
</div>
</div>
const swiper = new Swiper('.swiper', {
//enable hash navigation
hashNavigation: true,
});
Параметры хэш-навигации
Хэширование событий Навигации
| Имя | Аргументы | Описание |
|---|---|---|
| Хэш-обмен | (swiper) |
Событие будет запущено при изменении хэша окна |
| Набор хэшей | (swiper) |
Событие будет запущено, когда swiper обновит хэш |
История Параметров навигации
Параметры контроллера
Методы контроллера
| Свойства | ||
|---|---|---|
| swiper.control | Любой |
Передайте сюда другой экземпляр Swiper или массив с экземплярами Swiper, которыми должен управлять этот Swiper |
Параметры доступности
Пользовательская сборка
У вас есть два варианта создания пользовательской версии Swiper.
Использование модулей JS
Если вы используете в своём проекте сборщик с поддержкой модулей JS, вы можете импортировать только те модули, которые вам нужны:
// Import Swiper and modules
import Swiper from 'swiper';
import { Navigation, Pagination, Scrollbar } from 'swiper/modules';
// Now you can use Swiper
const swiper = new Swiper('.swiper', {
// Install modules
modules: [Navigation, Pagination, Scrollbar],
speed: 500,
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
// ...
});
Экспортируются следующие модули:
Virtual- Модуль виртуальных слайдовKeyboard- Модуль управления клавиатуройMousewheel- Модуль управления колесиком мышиNavigation- Навигационный модульPagination- Модуль разбиения на страницыScrollbar- Модуль полосы прокруткиParallax- Модуль ПараллаксаFreeMode- Модуль Свободного режимаGrid- Модуль сеткиManipulation- Модуль управления слайдами (только для базовой версии)Zoom- Модуль масштабированияController- Модуль контроллераA11y- Модуль специальных возможностейHistory- Модуль навигации по историиHashNavigation- Модуль навигации по хэшуAutoplay- Модуль автозапускаEffectFade- Модуль эффекта затуханияEffectCube- Модуль эффекта кубаEffectFlip- Модуль эффекта переворотаEffectCoverflow- Модуль эффекта CoverflowEffectCards- Модуль эффектов картEffectCreative- Модуль создания креативных эффектовThumbs- Модуль Thumbs
Использование скрипта сборки
Swiper поставляется с конструктором gulp, который позволяет создавать пользовательские версии библиотек, включающие только необходимые модули. Нам нужно следующее:
-
Загрузите и распакуйтерепозиторий Swiper GitHubв локальную папку
-
Установить Node.js (если не установлен)
-
Теперь нам нужно установить необходимые зависимости. Перейдите в папку с загруженным и распакованным репозиторием Swiper и выполните в терминале:
$ npm install -
Открыть
scripts/build-config.jsфайл:module.exports = { // remove modules you don't need modules: [ 'virtual', 'keyboard', 'mousewheel', 'navigation', 'pagination', 'scrollbar', 'parallax', 'zoom', 'controller', 'a11y', 'history', 'hash-navigation', 'autoplay', 'thumbs', 'free-mode', 'grid', 'manipulation', 'effect-fade', 'effect-cube', 'effect-flip', 'effect-coverflow', 'effect-creative', 'effect-cards', ], }; -
Теперь мы готовы создать пользовательскую версию Swiper:
$ npm run build:prod -
Вот и всё. Сгенерированные файлы CSS и JS и их сжатые версии будут доступны в папке
dist/
Определения TypeScript
Swiper полностью типизирован, он экспортируетSwiperиSwiperOptionsтипы:
// main.ts
import Swiper from 'swiper';
import { SwiperOptions } from 'swiper/types';
const swiperParams: SwiperOptions = {
slidesPerView: 3,
spaceBetween: 50,
};
const swiper = new Swiper('.swiper', swiperParams);
Вы также можете просмотреть автоматически сгенерированныеопределения TypeScriptдля всех типов, параметров, свойств и методов.
Движущиеся облака с анимацией на CSS3
Красивый эффект, который накладывает летящие облака на произвольный фон.
HTML
<div class="cloud">
<div class="cloudcontent">
Текст на фоне
</div>
<img src="cloud-01.png" alt="" class="cloud1">
<img src="cloud-02.png" alt="" class="cloud2">
<img src="cloud-03.png" alt="" class="cloud3">
<img src="cloud-04.png" alt="" class="cloud4">
</div>
CSS
.cloud {
overflow: hidden;
position: relative;
width:100%;
padding-bottom: 56.25%;
height: 0;
background: url(mountain.jpg);
background-size: cover;
}
.cloudcontent {
position: relative;
padding:30px;
color: #337AB7;
font-size:22px;
font-weight:bold;
z-index:100;
}
.cloud img {
width: 100%;
left: 0;
top: 0;
position: absolute;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
pointer-events: none;
}
@-webkit-keyframes animCloud {
from {
-webkit-transform: translateX(100%)
}
to {
-webkit-transform: translateX(-100%)
}
}
@-moz-keyframes animCloud {
from {
-moz-transform: translateX(100%)
}
to {
-moz-transform: translateX(-100%)
}
}
@keyframes animCloud {
from {
-webkit-transform: translateX(100%);
-moz-transform: translateX(100%);
-ms-transform: translateX(100%);
-o-transform: translateX(100%);
transform: translateX(100%)
}
to {
-webkit-transform: translateX(-100%);
-moz-transform: translateX(-100%);
-ms-transform: translateX(-100%);
-o-transform: translateX(-100%);
transform: translateX(-100%)
}
}
.cloud1 {
-webkit-animation: animCloud 20s infinite linear;
-moz-animation: animCloud 20s infinite linear;
animation: animCloud 20s infinite linear
}
.cloud2 {
-webkit-animation: animCloud 40s infinite linear;
-moz-animation: animCloud 40s infinite linear;
animation: animCloud 40s infinite linear
}
.cloud3 {
-webkit-animation: animCloud 60s infinite linear;
-moz-animation: animCloud 60s infinite linear;
animation: animCloud 60s infinite linear
}
.cloud4 {
-webkit-animation: animCloud 80s infinite linear;
-moz-animation: animCloud 80s infinite linear;
animation: animCloud 80s infinite linear
}
Добавить шрифт с сервера в CSS
Создаём на сервере папку fonts и загружаем в неё файлы шрифта.
@font-face {
font-family: 'Oranienbaum Regular';
src: url('/fonts/Oranienbaum.eot');
src: url('/fonts/Oranienbaum.eot?#iefix') format('embedded-opentype'),
url('/fonts/Oranienbaum.woff') format('woff'),
url('/fonts/Oranienbaum.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
Затем для body прописываем шрифт по умолчанию
body {
font-family: 'Oranienbaum Regular', Arial, sans-serif;
}
Названия шрифтов, состоящие из нескольких слов, заключаем в одинарные кавычки
Как сделать заставку на сайт на CSS и JavaScript
-
sessionStorage — заставка нужна при каждом новом открытии вкладки (не страницы),
-
localStorage — заставка нужна для одного человека только один раз за всю его историю посещения сайта.
<div id="pop-up">
<div onclick="popUp()">посмотреть
реализацию</div>
</div>
Скрипт хорош тем, что не нарушает правил Google AdSense, заставка не перекрывает рекламные объявления, так как те не загружаются. Но код JavaScript нужно расположить выше кода AdSense.
JavaScript / jQuery
Стили CSS
Кнопка button с эффектом при наведении
<button>Button
<div class="star-1">
<svg xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 784.11 815.53" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" version="1.1" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><defs></defs><g id="Layer_x0020_1"><metadata id="CorelCorpID_0Corel-Layer"></metadata><path d="M392.05 0c-20.9,210.08 -184.06,378.41 -392.05,407.78 207.96,29.37 371.12,197.68 392.05,407.74 20.93,-210.06 184.09,-378.37 392.05,-407.74 -207.98,-29.38 -371.16,-197.69 -392.06,-407.78z" class="fil0"></path></g></svg>
</div>
<div class="star-2">
<svg xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 784.11 815.53" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" version="1.1" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><defs></defs><g id="Layer_x0020_1"><metadata id="CorelCorpID_0Corel-Layer"></metadata><path d="M392.05 0c-20.9,210.08 -184.06,378.41 -392.05,407.78 207.96,29.37 371.12,197.68 392.05,407.74 20.93,-210.06 184.09,-378.37 392.05,-407.74 -207.98,-29.38 -371.16,-197.69 -392.06,-407.78z" class="fil0"></path></g></svg>
</div>
<div class="star-3">
<svg xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 784.11 815.53" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" version="1.1" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><defs></defs><g id="Layer_x0020_1"><metadata id="CorelCorpID_0Corel-Layer"></metadata><path d="M392.05 0c-20.9,210.08 -184.06,378.41 -392.05,407.78 207.96,29.37 371.12,197.68 392.05,407.74 20.93,-210.06 184.09,-378.37 392.05,-407.74 -207.98,-29.38 -371.16,-197.69 -392.06,-407.78z" class="fil0"></path></g></svg>
</div>
<div class="star-4">
<svg xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 784.11 815.53" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" version="1.1" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><defs></defs><g id="Layer_x0020_1"><metadata id="CorelCorpID_0Corel-Layer"></metadata><path d="M392.05 0c-20.9,210.08 -184.06,378.41 -392.05,407.78 207.96,29.37 371.12,197.68 392.05,407.74 20.93,-210.06 184.09,-378.37 392.05,-407.74 -207.98,-29.38 -371.16,-197.69 -392.06,-407.78z" class="fil0"></path></g></svg>
</div>
<div class="star-5">
<svg xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 784.11 815.53" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" version="1.1" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><defs></defs><g id="Layer_x0020_1"><metadata id="CorelCorpID_0Corel-Layer"></metadata><path d="M392.05 0c-20.9,210.08 -184.06,378.41 -392.05,407.78 207.96,29.37 371.12,197.68 392.05,407.74 20.93,-210.06 184.09,-378.37 392.05,-407.74 -207.98,-29.38 -371.16,-197.69 -392.06,-407.78z" class="fil0"></path></g></svg>
</div>
<div class="star-6">
<svg xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 784.11 815.53" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" version="1.1" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><defs></defs><g id="Layer_x0020_1"><metadata id="CorelCorpID_0Corel-Layer"></metadata><path d="M392.05 0c-20.9,210.08 -184.06,378.41 -392.05,407.78 207.96,29.37 371.12,197.68 392.05,407.74 20.93,-210.06 184.09,-378.37 392.05,-407.74 -207.98,-29.38 -371.16,-197.69 -392.06,-407.78z" class="fil0"></path></g></svg>
</div>
</button>
Стили CSS
Перенос слов
Стили CSS для организации переноса строки по словам или буквам, когда она не вмещается в заданные границы
overflow-wrap: break-word;
word-wrap: break-word;
white-space: nowrap / white-space: normal: nowrap;
word-break: keep-all / word-break: break-all;
line-break: loose / normal / strict;
hyphens: none / auto;
Синтаксис
white-space: normal | nowrap | pre | pre-line | pre-wrap | inherit
Значения
normal
Текст в окне браузера выводится как обычно, переносы строк устанавливаются автоматически.
nowrap
Пробелы не учитываются, переносы строк в коде HTML игнорируются, весь текст отображается одной строкой; вместе с тем, добавление тега <br> переносит текст на новую строку.
pre
Текст показывается с учетом всех пробелов и переносов, как они были добавлены разработчиком в коде HTML. Если строка получается слишком длинной и не помещается в окне браузера, то будет добавлена горизонтальная полоса прокрутки.
pre-line
В тексте пробелы не учитываются, текст автоматически переносится на следующую строку, если он не помещается в заданную область.
pre-wrap
В тексте сохраняются все пробелы и переносы, однако если строка по ширине не помещается в заданную область, то текст автоматически будет перенесен на следующую строку.
Наследует значение родителя.
Пример 1. Использование тега <wbr>
.word {
width: 160px;
background: #f0f0f0;
border: 1px solid #333;
padding: 10px;
font-size: 18px;
}
<p class="word">Один<wbr>надцатиклас<wbr>сница Анжелика после окончания школы выбрала профессию дело<wbr>произ<wbr>водитель<wbr>ницы.</p>
Пример 2. Мягкий перенос
.word {
width: 160px;
background: #f0f0f0;
border: 1px solid #333;
padding: 10px;
font-size: 18px;
}
<p class="word">Один­надцатиклас­сница Анжелика после окончания школы выбрала профессию дело­произ­водитель­ницы.</p>
Пример 3. Свойство word-break
.word {
width: 160px;
background: #f0f0f0;
border: 1px solid #333;
padding: 10px;
font-size: 18px;
word-break: break-all;
}
<p class="word">Одиннадцатиклассница Анжелика после окончания школы выбрала профессию делопроизводительницы.</p>
Пример 4. Использование hyphens
.word {
width: 160px;
background: #f0f0f0;
border: 1px solid #333;
padding: 10px;
font-size: 18px;
-moz-hyphens: auto;
-webkit-hyphens: auto;
-ms-hyphens: auto;
}
Пример 5. Запрет переносов
.word {
width: 160px;
background: #f0f0f0;
border: 1px solid #333;
padding: 10px;
font-size: 18px;
}
<p class="word">Озеро по координатам 70° 58′ 19″ с. ш.97° 24′ 5″ в. д. расположено в Таймырском Долгано-Ненецком районе Красноярского края России.</p>Плавающий блок с призывом добавить товар в Избранное (на Bootstrap)
В XSL шаблон карточки товара над иконкой Избранного добавляем код:
<div class="alert alert-primary d-flex align-items-center alert-dismissible fade show alert-info-modal" role="alert">
<small>Понравился товар? Добавьте его в избранное</small>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Закрыть"></button>
</div>
Блок будет показываться с небольшой задержкой. Для этого используем возможности CSS3
@keyframes showDiv {
0%,
94% {
opacity: 0;
}
95% {
opacity: 0.3;
}
100% {
opacity: 1;
}
}
Для кода использованы стили alert фреймворка Bootstrap 5
Закрывается блок нажатием на крестик.

Стили CSS
.alert-wrapper {
display: flex;
justify-content: center;
width: 100%;
}
.alert-info-modal {
background-color: #ff8100;
border: 0;
color: #fff;
position: absolute;
bottom: 95%;
left: 50%;
min-width: 280px;
padding: 10px 15px;
animation: showDiv 3s forwards;
-webkit-transition: all 0.2s linear;
-moz-transition: all 0.2s linear;
-o-transition: all 0.2s linear;
transition: all 0.2s linear;
}
.alert-info-modal:before {
border-width: 0.4rem 0.4rem 0;
position: absolute;
content: "";
border-color: transparent;
border-style: solid;
border-top-color: #ff8100;
top: 100%;
left: 0px;
transform: translate(50px,0px);
}
.alert-info-modal:after {
margin-top: -1px;
transform: rotate(45deg);
}
@keyframes showDiv {
0%,
94% {
opacity: 0;
}
95% {
opacity: 0.3;
}
100% {
opacity: 1;
}
}
Правило @view-transition в CSS3
Правило @view-transition в CSS3 — это инструмент для создания плавных анимаций при переходе между разными HTML-страницами (в многостраничных приложениях, MPA). Оно работает в связке с View Transitions API — встроенным браузерным механизмом, который делает снимки DOM «до» и «после» обновления и анимирует переход между ними.
Как это работает
При навигации браузер фиксирует текущее состояние страницы, выполняет обновление DOM, затем фиксирует новое состояние и запускает CSS-анимацию, интерполируя между ними.
Ключевое условие для кросс-документных переходов: обе страницы (исходная и целевая) должны находиться на одном origin (совпадать по протоколу, домену и порту). Иначе переход не сработает.
Базовый синтаксис:
@view-transition {
navigation: auto;
}
navigation: auto;
— разрешает переход при навигации. Браузер по умолчанию применяет кроссфейд (затухание) между старой и новой страницей.
navigation: none;
— отключает плавные переходы (значение по умолчанию).
Важный нюанс: чтобы переход сработал, правило @view-transition
нужно добавить на обе страницы. Если правило есть только на одной, переход не произойдёт.
Кастомизация анимации
По умолчанию браузер сам решает, как анимировать переход (часто это кроссфейд). Но вы можете полностью переопределить анимацию, используя специальные псевдоэлементы и @keyframes
::view-transition-old(root)
— стили для элементов старой страницы (состояние «до» обновления).
::view-transition-new(root)
— стили для элементов новой страницы (состояние «после» обновления).
Пример:
/* Анимация, когда старая страница уходит */
::view-transition-old(root) {
animation: slideOut 0.3s ease-in-out both;
}
/* Анимация, когда появляется новая страница */
::view-transition-new(root) {
animation: slideIn 0.3s ease-in-out both;
}
/* Определение самих анимаций */
@keyframes slideOut {
to { transform: translateX(-100%); }
}
@keyframes slideIn {
from { transform: translateX(100%); }
}
Ещё один приём: можно дать общее имя перехода элементам, которые должны плавно перемещаться между страницами (например, общему изображению в карточке товара и на детальной странице). Для этого используется свойство view-transition-name
Поддержка браузерами
Правило @view-transition относится к CSS View Transitions Module Level 2, который поддерживает:
- Chrome 126+
- Edge 126+
- Safari 18.2+
В Firefox поддержка Level 2 пока в разработке.
Важное замечание: если браузер не поддерживает эту функцию, сайт продолжит работать в обычном режиме — @view-transition работает как прогрессивное улучшение.
Дополнительные возможности
Ограниченные переходы (Scoped Transitions). В Chrome 148+ появилась возможность ограничивать переход конкретным поддеревом DOM, а не всей страницей.
Учёт prefers-reduced-motion. Для доступности можно ограничить анимации для пользователей, которые предпочитают их отключать:
@media (prefers-reduced-motion: reduce) {
@view-transition {
navigation: none;
}
}
Вывод
@view-transition — мощный инструмент для создания плавных и выразительных переходов между страницами без необходимости писать много JavaScript. Главное — не забыть добавить это правило на обе стороны навигации и продумать анимации для общих элементов.
Стили CSS . Полностью рабочий пример
@media (prefers-reduced-motion: no-preference) {
@view-transition {
navigation: auto;
types: pixelate-dissolve;
}
}
html:active-view-transition-type(pixelate-dissolve)::view-transition-old(root) {
animation: pixelate-out 1.4s ease forwards;
}
html:active-view-transition-type(pixelate-dissolve)::view-transition-new(root) {
animation: pixelate-in 1.4s ease forwards;
}
@keyframes pixelate-out {
0% {
filter: blur(0px);
opacity: 1;
}
100% {
filter: blur(40px);
opacity: 0;
}
}
@keyframes pixelate-in {
0% {
filter: blur(40px);
opacity: 0;
}
100% {
filter: blur(0px);
opacity: 1;
}
}
Работа с изображениями в веб
Одно из решений, которые приходится принимать фронтенд-разработчику при создании сайта, касается выбора способа включения изображений в состав веб-страниц. Этот способ может заключаться в использовании HTML-тега <img> . Это может быть применение CSS-свойства background или тега <image> элемента <svg> . Выбор правильного подхода к работе с изображениями весьма важен, так как это может очень сильно повлиять на производительность и доступность проекта.
HTML-элемент <img>
Элемент <img> в простейших вариантах его использования содержит лишь необходимый для его правильной работы атрибут src
<img src="cool.jpg" alt="">
Настройка атрибутов width и height
Если не будут настроены ширина и высота изображения, то при загрузке странице с последующей загрузкой изображения макет страницы может понадобиться перестроить. Для того чтобы этого избежать, можно задать атрибуты width и height тега <img> :
<img src="cool.jpg" width="200" height="100" alt="">

Скрытие изображения средствами CSS
img {
display: none;
}
О доступности контента
<img class="food-thumb" width="300" height="200" src="cheescake.jpg">
<img class="food-thumb" width="300" height="200" src="cheescake.jpg" alt="">


Отзывчивые изображения

1. Атрибут srcset
<img src="small.jpg" srcset="medium.jpg 500w, large.jpg 800w" alt="">
2. HTML-элемент picture
<picture>
<source srcset="large.jpg" media="(min-width: 800px)" />
<source srcset="medium.jpg" media="(min-width: 500px)" />
<img src="small.jpg" />
</picture>
Изменение размеров изображений

img {
object-fit: cover;
object-position: 50% 50%;
}
Изображения, задаваемые CSS-свойством background
Как пользоваться CSS-свойством background
<div class="element">Some content</div>
.element {
background: url('cool.jpg');
}
Задание нескольких изображений в свойстве background
.element {
background: url('cool-1.jpg'), url('cool-2.jpg');
}
Скрытие изображения
@media (min-width: 700px) {
.element {
background: url('cool-1.jpg');
}
}
О доступности контента
Сложности с загрузкой background-изображений обычными пользователями
Псевдо-элементы
SVG-изображения
<svg width="200" height="200">
<image href="cheesecake.jpg" height="100%" width="100%" preserveAspectRatio="xMidYMid slice" />
</svg>


О доступности контента
<svg width="200" height="200">
<title>A photo of blueberry Cheescake</title>
<image href="cheesecake.jpg" height="100%" width="100%" preserveAspectRatio="xMidYMid slice" />
</svg>
<svg width="200" height="200">
<title>A photo of blueberry Cheescake</title>
<desc>A meaningful description about the image</desc>
<image href="cheesecake.jpg" height="100%" width="100%" preserveAspectRatio="xMidYMid slice" />
</svg>
Сложности с загрузкой <svg>-изображений обычными пользователями
Сценарии использования разных способов вывода изображений
Раздел страницы, выводимый в её верхней части

-
Изображение должно поддерживать лёгкую динамическую смену при интеграции страницы с бэкенд-CMS.
- Поверх изображения должен быть наложен элемент, упрощающий чтение текста.
- Нужно поддерживать вывод изображения в трёх размерах: в маленьком, среднем и большом. Каждый из них предназначен для собственной области просмотра.
-
Важно ли это изображение с точки зрения пользователя, или он ничего не потеряет в том случае, если оно будет не видно?
-
Нужно ли, чтобы это изображение выводилось в областях просмотра всех размеров?
-
Является ли это изображение статическим, или оно динамически меняется (из CMS, например)?
Первый вариант решения задачи
.hero {
background-image: linear-gradient(rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.4)), var('landscape.jpg');
background-repeat: no-repeat;
background-size: 100%, cover;
}
<section class="hero" style="background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url('landscape.jpg');">
<!-- Hero content -->
</section>
<section class="hero" style="--bg-url: url('landscape.jpg')">
<!-- Hero content -->
</section>

Анализ
-
Предложенный здесь вариант решения задачи хорош лишь в том случае, если изображение не особенно важно.
-
Он может подойти в том случае, если изображение не планируется менять динамически, средствами CMS, используемой на бэкенде проекта.
Второй вариант решения задачи
<section class="hero">
<h2 class="hero__title">Using Images in CSS</h2>
<p class="hero__desc">An article about which and when to use</p>
<img src="landscape.jpg" alt="">
</section>
.hero {
position: relative;
}
.hero img {
position: absolute;
left: 0;
top: 0;
z-index: -1;
width: 100%;
height: 100%;
object-fit: cover;
}
.hero:after {
content: "";
position: absolute;
left: 0;
top: 0;
z-index: -1;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.4);
}
.hero img {
/* Другие стили */
background: #2962ff;
}

Логотип веб-сайта
-
Элемент <img>, выводящий PNG, JPG или SVG-изображение.
-
Встроенное SVG-изображение.
-
Фоновое изображение.
Логотип с множеством деталей

<a href="#"><img src="logo.svg" alt="Nature Food"></a>
Простой логотип, который нужно анимировать

<a href="#">
<svg class="logo" width="115" height="47" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(-5 -5)" fill="none" fill-rule="evenodd">
<rect fill="#D8D8D8" transform="rotate(45 28.5 28.5)" x="9" y="9" width="39" height="39" rx="11" />
<text font-family="Rubik-Medium, Rubik" font-size="25" font-weight="400" fill="#6F6F6F">
<tspan x="63.923" y="36.923">Rect</tspan>
</text>
</g>
</svg>
</a>
.logo rect,
.logo text {
transition: 0.3s ease-out;
}
.logo:hover rect,
.logo:hover text {
fill: #4a7def;
}
Отзывчивый логотип

<a class="logo" href="/">
<picture>
<source media="(min-width: 1350px)" srcset="sm-logo--full.svg"><img src="sm-logo.svg" alt="Smashing Magazine"></picture>
</a>
.logo {
display: inline-block;
width: 45px;
}
@media (min-width: 1350px) {
.logo {
width: 180px;
}
}
Логотип с градиентом

<svg class="logo" width="115" height="47" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="gradient" x1="0%" y1="100%" x2="0%" y2="0%">
<stop offset="0%" stop-color="#4a7def"></stop>
<stop offset="50%" stop-color="#ab4787"></stop>
</linearGradient>
</defs>
<g transform="translate(-5 -5)" fill="none" fill-rule="evenodd">
<rect fill="#AB4787" transform="rotate(45 28.5 28.5)" x="9" y="9" width="39" height="39" rx="11" />
<text font-family="Rubik-Medium, Rubik" font-size="30" font-weight="400" fill="url(#gradient)">
<tspan x="63.923" y="36.923">Rect</tspan>
</text>
</g>
</svg>
Аватар пользователя



-
С использованием <img>.
-
С использованием <img> и вспомогательного элемента <div>.
-
С использованием <div> и CSS-свойства background.
-
С использованием <image> в <svg>.
Использование <img>
.avatar {
border: 2px solid #f2f2f2;
}

Использование <img> и вспомогательного элемента <div>
<div class="avatar-wrapper">
<img class="avatar" src="shadeed2.jpg" alt="A photo of Ahmad Shadeed">
<div class="avatar-border"></div>
</div>
.avatar-wrapper {
position: relative;
width: 150px;
height: 150px;
}
.avatar-border {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
border-radius: 50%;
border: 2px solid rgba(0, 0, 0, 0.1);
}

Использование <div> и CSS-свойства background

<div class="avatar" style="--img-url: url(shadeed2.jpg)"></div>
.avatar {
background: var(--img-url) center/cover;
width: 150px;
height: 150px;
border-radius: 50%;
box-shadow: inset 0 0 0 2px rgba(#000, 0.1);
}
Использование <image> в <svg>
<svg role="none" style="height: 36px; width: 36px;">
<mask id="avatar">
<circle cx="18" cy="18" fill="white" r="18"></circle>
</mask>
<g mask="url(#avatar)">
<image x="0" y="0" height="100%" preserveAspectRatio="xMidYMid slice" width="100%" xlink:href="avatar.jpg" style="height: 36px; width: 36px;"></image>
<circle cx="18" cy="18" r="18"></circle>
</g>
</svg>
-
Маска, обрезающая изображение в виде круга.
-
Группа, к которой применяется маска.
-
Само изображение с атрибутом preserveAspectRatio=«xMidYMid».
-
Круг, который используется в роли внутренней границы.
circle {
stroke-width: 2;
stroke: rgba(0, 0, 0, 0.1);
fill: none;
}
Поле ввода с иконкой

<p>
<label for="name">Full name</label>
<input type="text" id="name">
</p>
input {
background-color: #fff;
background-image: url('user.svg');
background-size: 20px 20px;
background-position: left 10px center;
background-repeat: no-repeat;
}
CSS-стили для печати
Постарайтесь не включать в страницы, предназначенные для печати, изображения, выводимые с помощью CSS-свойства background

.element {
background: url('cheesecake.png') center/cover no-repeat;
-webkit-print-color-adjust: exact; /* Принудительный вывод фонового изображения в режиме печати */
}
Руководство по Flexbox

Свойства для Родителя (flex контейнер)

display
.container {
display: flex; /* or inline-flex */
}
flex-direction

.container {
flex-direction: row | row-reverse | column | column-reverse;
}
-
row (по умолчанию): слева направо в ltr; справа налево в rtl
-
row-reverse справа налево ltr; слева направо в rtl
-
column: так же, как и rowно сверху вниз
-
column-reverse: то же самое, row-reverseно снизу вверх
flex-wrap

.container{
flex-wrap: nowrap | wrap | wrap-reverse;
}
-
nowrap (по умолчанию): все flex элементы будут в одной строке
-
wrap: flex-элементы будут перенесены на несколько строк сверху вниз.
-
wrap-reverse: flex-элементы будут перенесены на несколько строк снизу вверх.
flex-flow (Применяется к: родительскому элементу flex-контейнера)
flex-flow: <‘flex-direction’> || <‘flex-wrap’>
justify-content

.container {
justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly | start | end | left | right ... + safe | unsafe;
}
-
flex-start (по умолчанию): элементы сдвинуты в начало flex-direction направления.
-
flex-end: элементы сдвинуты ближе к концу flex направления.
-
start: элементы сдвинуты к началу writing-modeнаправления.
-
end: элементы сдвинуты в конце writing-modeнаправления.
-
left: элементы сдвинуты по направлению к левому краю контейнера, если это не имеет смысла flex-direction, тогда он ведет себя как start.
-
right: элементы сдвинуты по направлению к правому краю контейнера, если это не имеет смысла flex-direction, тогда он ведет себя как start.
-
center: элементы центрированы вдоль линии
-
space-between: элементы равномерно распределены по линии; первый элемент находится в начале строки, последний элемент в конце строки
-
space-around: элементы равномерно распределены по линии с одинаковым пространством вокруг них. Обратите внимание, что визуально пространства не равны, так как все элементы имеют одинаковое пространство с обеих сторон. Первый элемент будет иметь одну единицу пространства напротив края контейнера, но две единицы пространства между следующим элементом, потому что у следующего элемента есть свой собственный интервал, который применяется.
-
space-evenly: элементы распределяются таким образом, чтобы расстояние между любыми двумя элементами (и расстояние до краев) было одинаковым.
align-items

.container {
align-items: stretch | flex-start | flex-end | center | baseline | first baseline | last baseline | start | end | self-start | self-end + ... safe | unsafe;
}
-
stretch (по умолчанию): растягивать, чтобы заполнить контейнер (все еще соблюдаются min-width / max-width)
-
flex-start/ start/ self-start: элементы размещаются в начале поперечной оси. Разница между ними невелика и заключается в соблюдении flex-direction правил или writing-mode правил.
-
flex-end/ end/ self-end: элементы располагаются в конце поперечной оси. Разница опять-таки тонкая и заключается в соблюдении flex-direction или writing-mode правил.
-
center: элементы центрированы по поперечной оси
-
baseline: элементы выровнены, по их базовой линии
align-content

.container {
align-content: flex-start | flex-end | center | space-between | space-around | space-evenly | stretch | start | end | baseline | first baseline | last baseline + ... safe | unsafe;
}
-
flex-start/ start: элементы, сдвинуты в начало контейнера. Более поддерживаемый flex-startиспользует, flex-directionв то время как startиспользует writing-modeнаправление.
-
flex-end/ end: элементы, сдвинуты в конец контейнера. Более поддерживаемый flex-endиспользует flex-directionв то время как endиспользует writing-modeнаправление.
-
center: элементы выровнены по центру в контейнере
-
space-between: элементы равномерно распределены; первая строка находится в начале контейнера, а последняя — в конце
-
space-around: элементы равномерно распределены с равным пространством вокруг каждой строки
-
space-evenly: элементы распределены равномерно, вокруг них одинаковое пространство
-
stretch (по умолчанию): линии растягиваются, чтобы занять оставшееся пространство
Свойства для первых дочерних элементов(flex элементы)

order

.item {
order: <integer>; /* default is 0 */
}
flex-grow

.item {
flex-grow: <number>; /* default 0 */
}
flex-shrink
.item {
flex-shrink: <number>; /* default 1 */
}
flex-basis
.item {
flex-basis: <length> | auto; /* default auto */
}

flex
.item {
flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}
align-self

.item {
align-self: auto | flex-start | flex-end | center | baseline | stretch;
}
Примеры
.parent {
display: flex;
height: 300px; /* Или что угодно */
}
.child {
width: 100px; /* Или что угодно */
height: 100px; /* Или что угодно */
margin: auto; /* Магия! */
}
.flex-container {
/* Сначала мы создаем flex контекст */
display: flex;
/* Затем мы определяем flex-direction и разрешаем элементам переходить на новые строки
* Запомните, что это то же самое что и:
* flex-direction: row;
* flex-wrap: wrap;
*/
flex-flow: row wrap;
/* Затем мы определяем, как распределяется оставшееся пространство */
justify-content: space-around;
}


/* Большие экраны */
.navigation {
display: flex;
flex-flow: row wrap;
/* Это выровняет элементы по конечной части линии на главной оси */
justify-content: flex-end;
}
/* Средние экраны */
@media all and (max-width: 800px) {
.navigation {
/* На экранах среднего размера мы центрируем элементы, равномерно распределяя пустое пространство вокруг элементов */
justify-content: space-around;
}
}
/* Маленькие экраны */
@media all and (max-width: 500px) {
.navigation {
/* На маленьких экранах мы больше не используем направление строки, а используем столбец */
flex-direction: column;
}
}
.wrapper {
display: flex;
flex-flow: row wrap;
}
/* Мы говорим, что все элементы имеют ширину 100%, через flex-base */
.wrapper > * {
flex: 1 100%;
}
/* Мы используем исходный порядок для первого мобильно варианта
* 1. header
* 2. article
* 3. aside 1
* 4. aside 2
* 5. footer
*/
/* Средние экраны */
@media all and (min-width: 600px) {
/* Мы говорим обеим боковым панелям встать в одну строку */
.aside { flex: 1 auto; }
}
/* Большие экраны */
@media all and (min-width: 800px) {
/* Мы инвертируем порядок первой боковой панели и основной и говорим главному элементу, чтобы он занимал вдвое большую ширину, чем две другие боковые панели
*/
.main { flex: 2 0px; }
.aside-1 { order: 1; }
.main { order: 2; }
.aside-2 { order: 3; }
.footer { order: 4; }
}



Префикс для Flexbox
@mixin flexbox() {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
}
@mixin flex($values) {
-webkit-box-flex: $values;
-moz-box-flex: $values;
-webkit-flex: $values;
-ms-flex: $values;
flex: $values;
}
@mixin order($val) {
-webkit-box-ordinal-group: $val;
-moz-box-ordinal-group: $val;
-ms-flex-order: $val;
-webkit-order: $val;
order: $val;
}
.wrapper {
@include flexbox();
}
.item {
@include flex(1 200px);
@include order(2);
}
CSS синтаксис
flex: flex-grow flex-shrink flex-basis | auto | none | initial | inherit;
Возможные значения
|
Значение
|
Описание
|
|---|---|
|
flex-grow
|
Коэффициент растяжения. Коэффициент увеличения ширины флекс-элемента относительно других флекс-элементов.
|
|
flex-shrink
|
Коэффициент сужения. Коэффициент уменьшения ширины флекс-элемента относительно других флекс-элементов.
|
|
flex-basis
|
Базовая ширина флекс-элемента.
|
|
auto
|
Эквивалентно "flex: 1 1 auto;".
|
|
none
|
Эквивалентно "flex: 0 0 auto;".
|
|
inherit
|
Значение наследуется от родительского элемента.
|
|
initial
|
Эквивалентно "flex: 0 1 auto;".
|
Пример использования
#main div {
-webkit-flex: 1; /* Safari 6.1+ */
-ms-flex: 1; /* IE 10 */
flex: 1;
}
Селекторы CSS. Виды, группировка и специфичность
Что такое CSS селекторы
селектор {
свойство: значение;
свойство: значение;
...
}
p {
text-align: center;
font-size: 20px;
}
Базовые селекторы
Селектор по элементу (тегу)
/* селектор p выберет все элементы p на странице */
p {
padding-bottom: 15px;
}
Селектор по классу
/* селектор .center выберет все элементы, имеющие класс center */
.center {
text-align: center;
}
Селектор по идентификатору (id)
/* селектор #footer выберет элемент, имеющий идентификатор footer */
#footer {
height: 50px;
margin-top: 20px;
}
Универсальный селектор
/* селектор * выберет все элементы на странице */
* {
margin: 0;
padding: 0;
}
CSS селекторы по атрибуту
[attr]– по имени атрибута;
[attr=value]– по имени и значению атрибута;
[attr^=value]– по имени и значению, с которого оно должно начинаться;
[attr|=value]– по имени атрибута и его значению, которое равно valueили начинается со value-;
[attr$=value]– по имени атрибута и значению, на которое оно должно заканчиваться;
[attr*=value]– по указанному атрибуту и значению, которое должно содержать value;
[attr~=value]– по имени атрибута и значению, которое содержит valueотделённое от других с помощью пробела.
[attr]
/* селектор [target] выберет все элементы на странице, имеющих атрибут target */
[target] {
background-color: red;
}
[attr=value]
/* селектор [rel="nofollow"] выберет все элементы на странице, имеющих атрибут rel со значением nofollow */
[rel="nofollow"] {
background-color: green;
}
[attr^=value]
/* селектор [class^="col"] выберет все элементы на странице, имеющих атрибут class, значение которого начинается с col */
[class^="col"] {
background-color: yellow;
}
[attr|=value]
/* селектор [class|="test"] выберет все элементы на странице, имеющих атрибут class, значение которого равно test или начинается с test- */
[class|="test"] {
background-color: orange;
}
[attr$=value]
/* селектор [class$="color"] выберет все элементы на странице, имеющих атрибут class, значение которого заканчивается на color */
[class$="color"] {
background-color: yellow;
}
[attr*=value]
/* селектор [href*="youtu.be"] выберет все элементы на странице, имеющих атрибут href, значение которого содержит youtu.be */
[href*="youtu.be"] {
background-color: green;
}
[attr~=value]
/* селектор [data-content~="news"] выберет все элементы на странице, имеющих атрибут data-content, значение которого содержит news, отделённое от других с помощью пробела */
[data-content~="news"] {
background-color: brown;
}
Псевдоклассы
Псевдоклассы для выбора элементов в зависимости от их состояния
Псевдокласс :link
/* селектор a.external:link выберет все элементы a с классом external пользователь по которым ещё не переходил */
a.external:link {
color: red;
}
Псевдокласс :visited
/* селектор .side a:visited выберет все элементы a, находящиеся в .aside, пользователь которые уже посетил */
.aside a:visited {
color: #000;
}
Псевдокласс :active
/* селектор a:active выберет все элементы a, находящиеся в активном состоянии */
a:active {
background-color: yellow;
}
Псевдокласс :hover
/* селектор .btn-warning:hover выберет все элементы .btn-warning при поднесении к ним курсора */
.btn-warning:hover {
color: #fff;
background-color: #ff8f00;
}
a:link { ... }
a:visited { ... }
a:hover { ... }
a:active { ... }
Псевдокласс :focus
/* селектор input[type="text"] найдет элемент input с атрибутом type="text" при нахождении его в фокусе */
input[type="text"]:focus {
background-color: #ffe082;
}
По расположению среди соседей
Псевдокласс :first-child
/* селектор li:first-child выберет элементы li, которые являются первыми элементами своего родителя */
li:first-child {
font-weight: bold;
}
Псевдокласс :last-child
/* селектор .alert-warning:last-child выберет элементы .alert-warning которые являются последними элементами своего родителя */
.alert-warning:last-child {
font-weight: bold;
}
Псевдокласс :only-child
h2:only-child {
...
}
Псевдокласс :nth-child (выражение)
/* селектор .li:nth-child(2) выберет элементы li, которые явлются вторыми элементами своего родителя */
.li:nth-child(2) { ... }
/* селектор .li:nth-child(odd) выберет элементы li, которые явлются нечётными элементами (1, 3, 5, ...) своего родителя */
.li:nth-child(odd) { ... }
/* селектор .li:nth-child(even) выберет элементы li, которые явлются чётными элементами (2, 4, 6, ...) своего родителя */
.li:nth-child(even) { ... }
/* селектор .li:nth-child(2n+1) выберет элементы li, которые имеют порядковые номера 1, 3, 5, 7, ... внутри своего родителя */
.li:nth-child(2n+1) { ... }
Псевдокласс :nth-last-child (выражение)
По расположению среди соседей с учётом типа элемента
Псевдокласс :first-of-type
p:first-of-type {
...
}
<section>
<h2>...</h2>
<p>...</p> <!-- будет выбран этот элемент -->
<p>...</p>
</section>
<section>
<h2>...</h2>
<p>...</p> <!-- будет выбран этот элемент -->
<p>...</p>
</section>
Псевдокласс :last-of-type
li:last-of-type {
...
}
Псевдокласс :only-of-type
p:only-of-type {
...
}
Псевдокласс :nth-of-type (выражение)
<section>
<h2>...</h2>
<p>...</p> <!-- Селектор p:nth-child(2) выберет этот элемент -->
<p>...</p> <!-- Селектор p:nth-of-type(2) выберет этот элемент -->
</section>
Псевдокласс :nth-last-of-type (выражение)
Псевдоклассы для элементов форм
Псевдокласс :checked
<div class="form-group">
<input type="checkbox" id="answer-1">
<label for="answer-1">Я знаю что такое :checked</label>
</div>
input:checked + label {
background-color: yellow;
}
Псевдокласс :enabled
input:enabled {
background-color: yellow;
}
Псевдокласс :disabled
input:disabled {
...
}
Остальные псевдоклассы
Псевдокласс :not (селектор)
/* Селектор .aside > div:not(:first-child) выберет все элементы div кроме первого непосредственно расположенные в .aside */
.aside > div:not(:first-child) { ... }
/* такие конструкция работать не будет */
:not(:not(...)) { ... }
div:not(.alert.alert-warning) { ... }
.item:not(::before) { ... }
.slider .slider__item:not(.active img) { ... }
td:not(.row + td) { ... }
/* применим стили ко всем элементам div, расположенных непосредственно в .message, за исключением .alert-warning и .alert-danger */
.message > div:not(.alert-warning):not(.alert-danger) { ... }
// этот селектор выберет все элементы p, которые не содержат класс alert
p:not(.alert) {
...
}
Псевдокласс :empty
div:empty {
...
}
Псевдокласс :root
:root {
--text-info: hotpink;
--text-warning: hotpink;
--aside-padding: 10px 15px;
}
Псевдокласс :target
<h2 id="header-1">...</h2>
<h2 id="header-2">...</h2>
:target {
color: red;
}
Группировка селекторов
/* селектор h3, h4 выберет все элементы на странице, имеющих тег h3 и h4 */
h3, h4 {
font-size: 20px;
margin-top: 15px;
margin-bottom: 10px;
}
Комбинирование селекторов
.modal.open {
...
}
.btn[data-toggle="collapse"]:first-child { ... }
Селекторы отношений
-
родитель– элемент, непосредственно в котором находится рассматриваемый элемент;
-
предок– это элемент, который расположен на одном из уровней иерархии элементов, до которого можно дойти двигаясь от рассматриваемого элемента к его родителю, от его родителя к родителю его родителя и т.д.
-
дети– это элементы, непосредственно расположенные в текущем рассматриваемом элементе;
-
потомки (дочерние элементы)– это любые элементы, которые находятся в текущем элементе вне зависимости от уровня иерархии, в котором они расположены;
-
соседи (сиблинги)– это элементы, расположенные на том же уровне вложенности (иерархии), что и рассматриваемый элемент; или другими словами — это все другие элементы, которые имеют того же родителя что и текущий рассматриваемый элемент.

Селектор X Y (для выбора вложенных или дочерних элементов)
Селектор X > Y
Селектор X + Y
Селектор X ~ Y
Приоритет селекторов
-
универсальный селектор (не добавляет вес) – 0,0,0,0;
-
селекторы по тегу, псевдоэлемент добавляют единичку к четвёртой цифре – 0,0,0,1;
-
селекторы по классу и по атрибуту, псевдоклассы добавляют единичку ко третьей цифре – 0,0,1,0;
-
селектор по идентификатору добавляют единичку ко второй цифре – 0,1,0,0;
*– 0,0,0,0;
li– 0,0,0,1;
li::before– 0,0,0,2;
ul > li– 0,0,0,2;
div input+label– 0,0,0,3;
h1 + div[data-target]– 0,0,1,2;
.btn.show– 0,0,2,0;
ul li a.item– 0,0,1,3;
#aside div.show– 0,1,1,1;
style="..."– 1,0,0,0;
<div class="alert-warning" style="background-color: #ffc107;"> ... </div>
.alert-warning {
background-color: #ffa000 !important;
}
<p id="message" style="font-size: 20px !important;">...</p>
p#message {
font-size: 16px !important;
}
Каких селекторов нет в CSS
Слова, часто используемые в CSS-классах
Изображения
image, img, picture, pic
— картинка
icon — иконка
logo — логотип
userpic, avatar — юзерпик, маленькая картинка пользователя
thumbnail, thumb — миниатюра, уменьшенное изображение
Текст
title, subject, heading, headline, caption — заголовок
subtitle — подзаголовок
slogan — слоган
lead, tagline — лид-абзац в тексте
text — текстовый контент
desc — описание, вариант текстового контента
excerpt — отрывок текста, обычно используется перед ссылкой «Читать далее...»
quote, blockquote — цитата
snippet — пример кода
link — ссылка
copyright, copy — копирайт
Списки
list, items — список
item — элемент списка
Блоки
page — корневой элемент страницы
header — шапка (страницы или элемента)
footer — подвал (страницы или элемента)
section — раздел контента (один из нескольких)
main, body — основная часть (страницы или элемента)
content — содержимое элемента
sidebar — боковая колонка (страницы или элемента)
aside — блок с дополнительной информацией
widget — виджет, например, в боковой колонке
Раскладка
wrapper, wrap — обёртка, обычно внешняя
inner — внутренняя обёртка
container, holder, box — контейнер
grid — раскладка (страницы или элемента) в виде сетки (обычно содержит в себе row и col)
row — контейнер в виде строки
col, column — контейнер в виде столбца
Элементы управления
button, btn — кнопка, например, для отправки формы
control — элемент управления, например, стрелки «Вперёд/назад» в фотогалерее, кнопки управления слайдером
dropdown — выпадающий список
Медиавыражения
phone, mobile — мобильные устройства
phablet — телефоны с большим экраном (6-7")
tablet — планшеты
notebook, laptop — ноутбуки
desktop — настольные компьютеры
Размеры
tiny, xs — маленький, крохотный
small, sm — небольшой
medium, base — средний
big, large, lg — большой
huge, xl — огромный
narrow — узкий
wide — широкий
Разное
search — поиск
socials — блок иконок соцсетей
advertisement, adv, commercial, promo — рекламный блок (режутся Адблоком, не рекомендуется использовать такие классы для блоков с внутренней рекламой)
features, benefits — список основных особенностей товара, услуги
slider, carousel — слайдер, интерактивный элемент с прокруткой содержимого
pagination — постраничная навигация
user, author — пользователь, автор записи или комментария
meta — блок с дополнительной информацией, например, блок тегов и даты в посте
cart, basket — корзина
breadcrumbs — навигационная цепочка, «хлебные крошки»
more, all — ссылка на полную информацию
modal — модальное (диалоговое) окно
popup — всплывающее окно
tooltip, tip — всплывающее подсказки
preview — анонс, отрывок, например новости или поста, может состоять из заголовка, описания и картинки. Предполагается ссылка на полную версию
overlay — перекрывающий слой, например, для затемнения изображений или создания модальных окон
Состояния
active, current — активный элемент, например, текущий пункт меню
visible — видимый элемент
hidden — скрытый элемент
error — статус ошибки
warning — статус предупреждения
success — статус успешного выполнения задачи
pending — состояние ожидания, например, перед сменой статуса на error или success
Примеры использования
Простой список
<ul class="list">
<li class="item">Первое</li>
<li class="item">Второе</li>
<li class="item">Третье</li>
</ul>
Картинка пользователя (юзерпик)
<div class="user">
<img class="user__img" src="userpic.png" alt="Дормидонт Петрович">
<a class="user__link" href="#">Дормидонт Петрович</a>
</div>
Галерея
<div class="gallery">
<ul class="gallery__list">
<li class="gallery__item">
<img class="gallery__img" src="flowers.jpg" alt="Цветём как в последний раз">
</li>
<li class="gallery__item">
<img class="gallery__img" src="trees.jpg" alt="Парк «Три сосны»">
</li>
</ul>
</div>
Навигация
<nav class="nav">
<a class="nav__link nav__link--active">Главная</a>
<a class="nav__link" href="#">Второстепенная</a>
<a class="nav__link" href="#">Третья с конца</a>
<a class="nav__link" href="#">Предпоследняя</a>
<a class="nav__link" href="#">Совсем конец</a>
</nav>
<nav class="nav">
<ul class="nav__list">
<li class="nav__item nav__item--current">
<a class="nav__link">Главная</a>
</li>
<li class="nav__item">
<a class="nav__link" href="#">Статьи</a>
</li>
<li class="nav__item">
<a class="nav__link" href="#">Фотогалерея</a>
</li>
<li class="nav__item">
<a class="nav__link" href="#">Контакты</a>
</li>
</ul>
</nav>
Виджет в боковой колонке
<div class="widget">
<h4 class="widget__title">Выращиваем желе</h4>
<div class="widget__content">
<p>Чтобы вырастить общительное дружелюбное желе,
нам потребуется рулон поролона, два килограмма сахара,
три яйца и пол чайной чашки ацетона.</p>
<a class="widget__link" href="#">Не читать дальше...</a>
</div>
</div>
Блок новостей
<div class="news">
<h3 class="news__title">Вчерашние новости</h3>
<ul class="news__list">
<!-- к классу элемента добавляем класс блока,
чтобы создать новое пространство имён -->
<li class="news__item item-news">
<h4 class="item-news__title">Соревнования среди воблы по конькобежному спорту</h4>
<div class="item-news__text">
<p>Победила команда килек из Петрозаводска</p>
<a href="#" class="item-news__link">Читать дальше</a>
</div>
</li>
<li class="news__item item-news">
<h4 class="item-news__title">Учёные уточнили роль напильника в уходе за ногтями</h4>
<div class="item-news__text">
<p>Британские учёные высоко оценили вклад
напильника в отращивание полутораметровых ногтей.</p>
<a href="#" class="item-news__link">Не читать дальше</a>
</div>
</li>
</ul>
</div>
Статья или пост в блоге (простой вариант)
<article class="article">
<h3 class="article__title">Нащупываем чакры у пучка петрушки</h3>
<time class="article__datetime">32 мая, 10:87</time>
<div class="article__author author-article">
<img class="author-article__img" src="userpic.png" alt="Клешня Андреевна">
<a class="author-article__link" href="#">Клешня Андреевна Долгорукая</a>
<div class="author-article__desc">Наш эксперт по чакрам</div>
</div>
<div class="article__content">
Сходите на рынок и купите у старушек пучок петрушки грамм на 100.
Как следует переберите, очистите от жуков и гусениц. Жуков отдайте поиграться
коту, гусениц поселите в горшок с кактусами, пусть одна будет Джоном,
вторая Билли, а у вас в горшке теперь будет Дикий Запад. Вернитесь
к пучку петрушки. Ласково взгляните на него и как следует почешите
за ухом, можно себе или коту. Перевяжите атласной ленточкой,
непременно завяжите бант. Поздравляем! Теперь у вас есть полностью
одомашненный пучок петрушки, который будет весело бегать за вами
по пятам и проращивать свои семена в ваших тапках.
</div>
</article>
Статья или пост в блоге (сложный вариант)
<article class="entry">
<header class="entry__header">
<h3 class="entry__title title-entry">
<a class="title-entry__link" href="#">Резиновые уточки как способ самопознания</a>
</h3>
<time class="entry__datetime">32 мая, 10:87</time>
</header>
<div class="entry__author author-entry">
<img class="author-entry__img" src="userpic.png" alt="Василиса Сергеевич">
<a class="author-entry__link" href="#">Василиса Сергеевич</a>
</div>
<div class="entry__content">
Достаньте с чердака коробку с полусотней резиновых уточек,
оставшихся после празднования нового года. Из уточек
и горящих свечей выложите пентаграмму на полу комнаты.
Сядьте посередине в позу лотоса, в каждую руку возьмите
по немецко-бразильскому словарю, прокашляйтесь, наберите
полную грудь воздуха и громко и уверенно,
с полной самоотдачей скажите "Кря!"
</div>
<div class="entry__tags tags-entry">
<h4 class="tags-entry__title">Метки</h4>
<ul class="tags-entry__list">
<li class="tags-entry__item">
<a class="tags-entry__link" href="#">хоровод своими руками</a>
</li>
<li class="tags-entry__item">
<a class="tags-entry__link" href="#">фарфоровые тапки</a>
</li>
<li class="tags-entry__item">
<a class="tags-entry__link" href="#">гуталин в кулинарии</a>
</li>
</ul>
</div>
<div class="entry__actions actions-entry">
<ul class="actions-entry__list">
<li class="actions-entry__item actions-entry__item--read">
<a class="actions-entry__link" href="#">238 ответов</a>
</li>
<li class="actions-entry__item actions-entry__item--write">
<a class="actions-entry__link" href="#">Написать в спортлото</a>
</li>
<li class="actions-entry__item actions-entry__item--share">
<a class="actions-entry__link" href="#">Поделиться</a>
</li>
</ul>
</div>
</article>
Список всех Селекторов в CSS
|
Селектор
|
Пример
|
Описание примера
|
|---|---|---|
|
*
|
*
|
Все элементы.
|
|
#id
|
#firstname
|
Элемент с id="firstname".
|
|
.class
|
.intro
|
Все элементы с class="intro".
|
|
.class1.class2
|
.name1.name2
|
Все элементы с class="name1 name2".
|
|
.class1 .class2
|
.name1 .name2
|
Все элементы с class="name2"у которых родитель с class="name1".
|
|
tag
|
p
|
Все <p>элементы.
|
|
tag.class
|
p.intro
|
Все <p>элементы с class="intro".
|
|
tag, tag
|
div, p
|
Все <div>и все <p>элементы.
|
|
tag tag
|
div p
|
Все <p>внутри всех <div>.
|
|
tag > tag
|
div > p
|
Все <p>прямой родитель которых <div>.
|
|
tag + tag
|
div + p
|
<p>который находятся сразу после <div>.
|
|
tag ~ tag
|
div ~ p
|
Все <p>которые находятся после <div>.
|
|
[attribute]
|
[target]
|
Все элементы с target="что-либо".
|
|
[attribute = value]
|
[target=_blank]
|
Все элементы с target="_blank".
|
|
[attribute ^= value]
|
a[href^="https"]
|
Каждый <a>атрибут hrefкоторого начинается с "https".
|
|
[attribute $= value]
|
a[href$=".pdf"]
|
Каждый <a>атрибут hrefкоторого заканчивается ".pdf".
|
|
[attribute *= value]
|
a[href*="w3schools"]
|
Каждый <a>атрибут hrefкоторого содержит подстроку "w3schools".
|
|
[attribute ~= value]
|
[title~=flower]
|
Все элементы в атрибуте titleкоторых есть слово "flower".
|
|
[attribute |= value]
|
[lang|=en]
|
Все элементы атрибут langкоторых начинается с "en".
|
|
:active
|
a:active
|
Активная ссылка.
|
|
::after
|
p::after
|
Вставляет псевод-элемент в начале каждого <p>элемента.
|
|
::before
|
p::before
|
Вставляет псевод-элемент в конце каждого <p>элемента.
|
|
:checked
|
input:checked
|
Все выбранные <input type="checkbox">элементы.
|
|
:default
|
input:default
|
Все <input>элементы.
|
|
:disabled
|
input:disabled
|
Все <input disabled>элементы.
|
|
:empty
|
p:empty
|
Все пустые <p>, в которых нет пробелом, текста или других элементов.
|
|
:enabled
|
input:enabled
|
Все активные (не disabled) элементы <input>.
|
|
:first-child
|
p:first-child
|
Первый элемент в списке родительского элемента.
|
|
:first-of-type
|
p:first-of-type
|
Первый <p>элемент в списке родительского элемента.
|
|
::first-letter
|
p::first-letter
|
Первая буква каждого <p>элемента.
|
|
::first-line
|
p::first-line
|
Первая линия каждого <p>элемента.
|
|
:focus
|
input:focus
|
<input>в котором находится курсор.
|
|
:focus-visible
|
a:focus-visible
|
Фокус сработает, только если на кнопку перешли с клавиатуры через TAB.
|
|
:focus-within
|
div:focus-within
|
Сработает на блоке, когда его внутренний элемент находится в фокусе.
|
|
:hover
|
a:hover
|
Сслыка на которую наведена мышка.
|
|
:in-range
|
input:in-range
|
Все <input>со значением в пределах указанного диапазона.
|
|
:indeterminate
|
input:indeterminate
|
Все <input>в статусе indeterminate.
|
|
:invalid
|
input:invalid
|
Все <input>с недопустимым значением.
|
|
:lang(language)
|
p:lang(it)
|
Все <p>с lang="it".
|
|
:last-child
|
p:last-child
|
Последний элемент в списке родительского элемента.
|
|
:last-of-type
|
p:last-of-type
|
Последний <p>в списке родительского элемента.
|
|
:link
|
a:link
|
Все непосещенные ссылки.
|
|
:not(selector)
|
:not(p)
|
Все не <p>элементы.
|
|
:not(:only-child)
|
div:not(:only-child)
|
Все <div>внутри которых больше одного элемента.
|
|
:nth-child(n)
|
p:nth-child(2)
|
Второй элемент в списке родительского элемента.
|
|
:nth-of-type(n)
|
p:nth-of-type(2)
|
Второй <p>в списке родительского элемента.
|
|
:nth-last-child(n)
|
p:nth-last-child(2)
|
Второй элемент в списке родительского элемента (счет идет с конца).
|
|
:nth-last-of-type(n)
|
p:nth-last-of-type(2)
|
Второй <p>в списке родительского элемента (счет идет с конца).
|
|
:only-child
|
p:only-child
|
Единственный <p>у родителя (других элементов быть не может).
|
|
:only-of-type
|
p:only-of-type
|
Один <p>у родителя (других элементы могут быть).
|
|
:optional
|
input:optional
|
Все <input>у которых нет артибута "required".
|
|
:required
|
input:required
|
Все <input>у которых указан атрибут "required".
|
|
:out-of-range
|
input:out-of-range
|
Все <input>со значением выходящим за указанный рэндж.
|
|
::placeholder
|
input::placeholder
|
Все <input>у которых указан атрибут "placeholder".
|
|
:read-only
|
input:read-only
|
Все <input>у которых указан атрибут "readonly".
|
|
:read-write
|
input:read-write
|
Все <input>у которых не указан атрибут "readonly".
|
|
:root
|
:root
|
Корен документа.
|
|
::selection
|
::selection
|
Выберет текущее выделение текста мышкой.
|
|
:target
|
#news:target
|
Выберет элемент с id="news"когда к нему пришил по клику.
|
|
:valid
|
input:valid
|
Все <input>с валидным значением.
|
|
:visited
|
a:visited
|
Все посещенные ссылки.
|
Описание CSS селекторов
*
* { margin:0; padding:0; }
#container * { border: 1px solid black; }
.class
<div class="error">
.error { color: red; }
#id
<div id="container">
#container { width: 960px; margin: auto; }
tag
a { color: red; }
ul { margin-left: 0; }
X, Y
h2,
li a { color: red; }
X Y
Х > Y
.parent > li{ border: 1px solid red; }
<ul class="parent">
<li> список1
<ul class="child">
<li>список11</li>
<li>список12</li>
</ul>
</li><!-- затронет -->
<li>список2</li><!-- затронет -->
<li>список3</li><!-- затронет -->
</ul>
Х ~ Y
div ~ p { color: red; }
Окрасит "текст 2" и "текст 3":
<div>текст</div>
<p>текст 2</p><!-- color: red; -->
<p>текст 3</p><!-- color: red; -->
Х + Y
div + p { color: red; }
Получим:
<div>текст</div>
<p>текст 2</p><!-- color: red; -->
<p>текст 3</p>
a:link, a:visited, a:hover, a:active, a:focus
-
a:link— выбирает обычную (не посещенную) ссылку. Обычно этот селектор записывается просто как a.
-
a:visited— выбирает уже посещенную ссылку.
-
a:hover— выбирает ссылку на которую наведена мышка (под курсором).
-
a:active— выбирает активную ссылку (на которую был сделан клик, пока еще никуда не кликали или когда на ссылку переключились при передвижении табом с клавиатуры).
-
a:focus— выбирает активную ссылку (на которую кликнули, но еще не отпустили кнопку мышки).
[attr]
a[title] { color: green; }
<a href="" title="описание">текст</a>
<a href="">текст 2</a>
[attr = value]
a[href="http://example.com"] { color: red; }
Окрасит только "текст":
<a href="http://example.com">текст</a><!-- color: red; -->
<a href="http://example.com/article">текст 2</a>
[attr *= value]
a[href*="example"] { color: red; }
<a href="http://example.com">текст</a><!-- color: red; -->
<a href="http://example.com/article">текст 2</a><!-- color: red; -->
<a href="http://xxx.ru/article">текст 2</a>
[attr ^= value]
a[href^="http"] {
background: url(path/to/external/icon.png) no-repeat;
padding-left: 10px;
}
<a href="http://example.com">текст</a>
<a href="/article">текст 2</a>
[attr $= value]
a[href$=".jpg"] { color: red; }
<a href="http://example.com/foto.jpg">текст</a>
<a href="http://example.com/foto2.png">текст 2</a>
[attr ~= value]
-
*=— ищет homeв любом месте значения. Найдет homeland.
-
~=— ищет homeразделеный пробелом. Найдет home land.
a[data-info ~= "external"] { color: red; }
a[data-info ~= "image"] { border: 1px solid black; }
<a href="http://example.com" data-info="external">текст</a><!-- окрасит в красный -->
<a href="http://nettuts.com">текст 2</a><!-- не тронет -->
<a href="http://example.com" data-info="external image">текст 3</a><!-- окрасит и установит рамку -->
<a href="http://example.com" data-info="image">текст 4</a><!-- установит рамку -->
[attr |= value]
:target
:target { color: red; }
<a href="#anchor1">Перейти на якорь 1</a>
<a href="#anchor2">Перейти на якорь 2</a>
<!-- При клике по этим ссылкам выберется соответствующий элемент ниже -->
<p id="anchor1">Элемент 1</p>
<p id="anchor2">Элемент 2</p>
:checked
input[type=radio]:checked { border:1px solid black; }
:default
<form>
<input type="submit"><!-- будет выбран -->
<input type="submit">
<input type="reset">
</form>
-
<option>считается дефолтным (:default), если это элемент с атрибутом selectedили первый enabled(NOT disabled) элемент по порядку DOM элементов. Для <select multiple>каждый selectedэлемент будет считаться дефолтным.
-
<input type="checkbox"> и <input type="radio"> считаются дефолтными, если они выбраны (имеют атрибут checked).
-
<button> считается дефолтной, если это базовая кнопка сабмита формы (<form>) — это первая в форме кнопка по порядку DOM элементов. Это также справедливо и для типов <input type="submit">.
:disabled
Примеры
<form action="#">
<legend>Shipping address</legend>
<input type="text" placeholder="Name">
<input type="text" placeholder="Address">
<input type="text" placeholder="Zip Code">
</form>
input[type="text"]:disabled {
background: #dddddd;
}
select.country:disabled {
background: #dddddd;
}
:enabled
Примеры
<form action="#">
<legend>Shipping address</legend>
<input type="text" placeholder="Name" disabled="disabled">
<input type="text" placeholder="Address">
<input type="text" placeholder="Zip Code">
</form>
input[type="text"]:enabled {
background: #fff;
}
input[type="text"]:disabled {
background: #dddddd;
}
:empty
.box {
background: red;
height: 200px;
width: 200px;
}
.box:empty {
background: lime;
}
<div class="box"><!-- пустой --></div>
<div class="box">Я буду красным</div>
<div class="box">
<!-- Я буду красным, так как перед комментарием стоят пробелы -->
</div>
::before
li:before {
content: '-';
display: inline-block;
margin-right: .5em;
}
-
элемент 1
-
элемент 2
::after
.clear:after {
content: '';
display: table;
clear: both;
}
:focus
input:focus {
background-color: yellow;
}
a:focus {
outline: 2px solid yellow;
}
input[type=text] {
width: 100px;
transition: ease-in-out, width .35s ease-in-out;
}
input[type=text]:focus {
width: 250px;
}
:focus-visible
:focus-within
div:focus-within {
background: cyan;
}
<form>
<label for="given_name">Given Name:</label>
<input id="given_name" type="text">
<br>
<label for="family_name">Family Name:</label>
<input id="family_name" type="text">
</form>
form {
border: 1px solid;
color: gray;
padding: 4px;
}
form:focus-within {
background: #ff8;
color: black;
}
input {
margin: 4px;
}
:hover
a:hover { border-bottom: 1px solid black; }
div:hover { background: #e3e3e3; }
:not(selector)
:not(:not(...)).
*:not(p) { color: green; }
ul li:not(.last) { color: blue; }
<ul>
<li>элемент 1</li>
<li>элемент 2</li>
<li class="last">элемент 3</li>
</ul>
::first-line, ::first-letter
-
::first-line стилизует начальную (первую) строку.
-
::first-lette rстилизует начальную (первую) букву. Изменяются только шрифт, цвет текста, фон и т.д. привязан к множеству параметров: ширина окна браузера, язык, шрифт и т.п.
#1 Выбираем первую букву в параграфе
p::first-letter {
float: left;
font-size: 2em;
font-weight: bold;
font-family: cursive;
padding-right:2px;
}
#2 Выбираем первую строку в абзаце
p::first-line {
font-weight: bold;
font-size: 1.2em;
}
:nth-child(n)
<h1>Заголовок</h1>
<p>Первый параграф.</p><!-- p:nth-child(2) -->
<p>Второй параграф.</p><!-- p:nth-of-type(2) -->
-
odd— нечетные.
-
even— четные.
-
число— порядковый номер с 1.
-
выражение с nan+b — a и b целые числа, n— счетчик от 0 до 999...
n = odd / even
p:nth-child( odd ) {
background: red;
}
p:nth-child( even ) {
background: blue;
}
<h1>Заголовок</h1>
<p>Первый параграф.</p><!-- blue -->
<p>Второй параграф.</p><!-- red -->
<p>Третий параграф.</p><!-- blue -->
n = число
p:nth-child(2) { color: red; }
<h1>Заголовок</h1>
<p>Первый параграф.</p><!-- red -->
<p>Второй параграф.</p>
<p>Третий параграф.</p>
n = выражение
-
в селекторе :nth-child(2)указана только "а".
-
:nth-child(odd) можно заменить на :nth-child(2n+1) - 1, 3, 5, 7 ...
-
:nth-child(even) можно заменить на :nth-child(2n) - 2, 4, 6, 8 ...
-
:nth-child(3n+4) - 4, 7, 10, 13 ...
-
:first-childможно заменить на :nth-child(0n+1) или :nth-child(1)
p:nth-child(3n) { background: red; }
<h1>Заголовок</h1>
<p>Параграф 1</p>
<p>Параграф 2</p><!-- background: red -->
<p>Параграф 3</p>
<p>Параграф 4</p>
<p>Параграф 5</p><!-- background: red -->
<p>Параграф 6</p>
<p>Параграф 7</p>
<p>Параграф 8</p><!-- background: red -->
<p>Параграф 9</p>
:nth-last-child(n)
-
odd— нечетные.
-
even— четные.
-
число— порядковый номер с 1.
-
выражение с nan+b— a и b целые числа, n— счетчик от 0 до 999...
Следующий код установит красным цветом второй с конца параграф:
li:nth-last-child(2) { color: red; }
<h1>Заголовок</h1>
<p>Первый параграф.</p>
<p>Второй параграф.</p><!-- red -->
<p>Третий параграф.</p>
:nth-of-type(n)
<h1>Заголовок</h1>
<p>Первый параграф.</p><!-- p:nth-child(2) -->
<p>Второй параграф.</p><!-- p:nth-of-type(2) -->
-
odd— нечетные.
-
even— четные.
-
число— порядковый номер с 1.
-
выражение с nan+b— a и b целые числа, n— счетчик от 0 до 999...
#1 n = add / even
p:nth-of-type(odd) { background: red; }
p:nth-of-type(even) { background: blue; }
<h1>Заголовок</h1>
<p>Первый параграф.</p><!-- red -->
<p>Второй параграф.</p><!-- blue -->
<p>Третий параграф.</p><!-- red -->
#2 n = число
li:nth-of-type(2) { color: red; }
<h1>Заголовок</h1>
<p>Первый параграф.</p>
<p>Второй параграф.</p><!-- red -->
<p>Третий параграф.</p>
#3 n = выражение
-
в селекторе :nth-of-type(2) указана только "а".
-
:nth-of-type(odd) можно заменить на :nth-of-type(2n+1)- 2, 4, 6, 8 ...
-
:nth-of-type(even) можно заменить на :nth-of-type(2n)- 1, 3, 5, 7 ...
-
:nth-of-type(3n+4) - 4, 7, 10, 13 ...
-
:first-of-type можно заменить на :nth-of-type(0n+1) или просто :nth-of-type(1)
p:nth-of-type(3n) { background: red; }
<h1>Заголовок</h1>
<p>Параграф 1</p>
<p>Параграф 2</p>
<p>Параграф 3</p><!-- background: red -->
<p>Параграф 4</p>
<p>Параграф 5</p>
<p>Параграф 6</p><!-- background: red -->
<p>Параграф 7</p>
<p>Параграф 8</p>
<p>Параграф 9</p><!-- background: red -->
:nth-last-of-type(n)
<h1>Заголовок</h1>
<p>Параграф 1</p><!-- background: red -->
<p>Параграф 2</p>
<p>Параграф 3</p>
<p>Параграф 4</p><!-- background: red -->
<p>Параграф 5</p>
<p>Параграф 6</p>
<p>Параграф 7</p><!-- background: red -->
<p>Параграф 8</p>
<p>Параграф 9</p>
:first-child
#1 Пример: обратимся к первому элементу в блоке #container
#container div:first-child{ color:red; }
<div id="container">
<div>элемент 1</div><!-- color:red; -->
<div>элемент 2</div>
</div>
<div id="container">
<h1>Заголовок</h1>
<div>элемент 1</div><!-- не выделит -->
<div>элемент 2</div>
</div>
#2 Обнуление границы
ul li:first-child { border-top: none; }
:last-child
#1 Пример: обратимся к первому с конца элементу в блоке #container
#container div:last-child{ color:red; }
<div id="container">
<div>элемент 1</div>
<div>элемент 2</div><!-- color:red; -->
</div>
<div id="container">
<div>элемент 1</div>
<div>элемент 2</div><!-- не выделит -->
<p>параграф</p>
</div>
#2 Покрасим последний элемент li в списке ul в зеленый:
ul > li:last-child { color: green; }
<ul>
<li>список 1</li>
<li>список 2</li>
<li>список 3</li><!-- color: green; -->
</ul>
:first-of-type, :last-of-type
#1 Пример: обратимся к первому элементу div в блоке #container
#container div:first-of-type{ color:red; }
<div id="container">
<h1>Заголовок</h1>
<div>элемент 1</div><!-- color:red; -->
<div>элемент 2</div>
</div>
#2 Обнуление границы
ul li:first-of-type { border-top: none; }
<ul>
<span>текст</span>
<li>элемент 1</li><!-- border-top: none; -->
<li>элемент 2</li>
<li>элемент 3</li>
</ul>
:only-child
Выберем элемент, если он единственный в блоке:
p:only-child { background: red; }
<div>
<p>параграф</p><!-- background: red; -->
</div>
<div>
<span>параграф</span><!-- не выберет, потому что X=p а не span -->
</div>
<div>
<p>текст</p><!-- не выберет, потому что на этом уровне 2 элемента -->
<span>параграф</span>
</div>
:not(:only-child)
li:not(:only-of-type) {
font-size: 1.25em;
}
<ul>
<li></li><!-- не будет выбран -->
</ul>
<ul>
<li></li><!-- будет выбран -->
<li></li><!-- будет выбран -->
</ul>
:only-of-type
p:only-of-type { background: red; }
<div>
<p>параграф</p><!-- background: red; -->
</div>
<div>
<span>параграф</span><!-- не выделится, потому что X=p а не span -->
</div>
<div>
<span>параграф</span>
<p>текст</p><!-- background: red; -->
</div>
#1 Выберем ulтолько с одним элементом в списке.
ul > li:only-of-type { font-weight: bold; }
Немного практики
#1 Сложное выделение
<div>
<p>параграф</p>
<ul>
<li>Список 1 </li>
<li>Список 2 </li>
</ul>
<ul>
<li>Список 3 </li>
<li>Список 4 </li>
</ul>
</div>
Решение 1
ul:first-of-type > li:nth-child(2) { font-weight: bold; }
Решение 2
p + ul li:last-child { font-weight: bold; }
Решение 3
ul:first-of-type li:nth-last-of-type(1) { font-weight: bold; }
Наглядное пособие по селекторам типа :nth-child
Считаем элементы в блоке с помощью nth-child
Выбор диапазона элементов
ol li:nth-child(n+7):nth-child(-n+14) {
background: lightpink;
}

Справочник атрибутов CSS
|
Атрибут CSS
|
Функция
|
|---|---|
|
background
|
Атрибут фона
|
|
background-attachment
|
Как ведет себя фон при прокручивании страницы
|
|
background-color
|
Цвет фона
|
|
background-image
|
Фоновый рисунок
|
|
background-position
|
Положение фонового рисунка
|
|
background-repeat
|
Повторение фона
|
|
border
|
Форматирование границ (бордюра) элемента
|
|
border-collapse
|
Слияние границ таблицы
|
|
border-color
|
Цвет границ элемента
|
|
border-spacing
|
Расстояние между границами ячеек таблицы
|
|
border-style
|
Вид рамки элемента
|
|
border-width
|
Ширина линии рамки
|
|
bottom
|
Положение нижней границы элемента
|
|
caption-side
|
Положение заголовка таблицы
|
|
clear
|
Отмена обтекания элемента текстом
|
|
color
|
Цвет
|
|
cursor
|
Курсор
|
|
direction
|
Направление вывода текста
|
|
display
|
Вид отображаемого элемента
|
|
empty-cells
|
Границы и фон пустых ячеек таблицы
|
|
float
|
Стороны смещения и обтекания элемента
|
|
font
|
Шрифт
|
|
font-family
|
Семейство шрифта
|
|
font-size
|
Кегль (размер) шрифта
|
|
font-style
|
Начертание шрифта
|
|
font-variant
|
Малые прописные буквы
|
|
font-weight
|
Насыщенность шрифта
|
|
height
|
Высота
|
|
left
|
Расстояние от левого края
|
|
letter-spacing
|
Межсимвольный интервал
|
|
line-height
|
Межстрочный интервал
|
|
list-style
|
Вид списочного маркера
|
|
list-style-image
|
Адрес файла картинки, используемой в качестве списочного маркера
|
|
list-style-position
|
Положение маркера
|
|
list-style-type
|
Вид маркера
|
|
margin
|
Внешний отступ
|
|
max-height
|
Максимальная высота
|
|
max-width
|
Максимальная ширина
|
|
min-height
|
Минимальная высота
|
|
min-width
|
Минимальная ширина
|
|
overflow
|
Управление выводом содержания блочного элемента
|
|
padding
|
Внутренний отступ
|
|
position
|
Положение элемента
|
|
right
|
Расстояние от правого края
|
|
table-layout
|
Подгонка ячеек таблицы по высоте и ширине
|
|
text-align
|
Выравнивание по горизонтали
|
|
text-decoration
|
Оформление текста
|
|
text-indent
|
Красная строка
|
|
text-transform
|
Преобразование текста
|
|
top
|
Расстояние от верхнего края
|
|
vertical-align
|
Выравнивание по вертикали
|
|
visibility
|
Видимость
|
|
white-space
|
Отделение слов друг от друга
|
|
width
|
Ширина
|
|
word-spacing
|
Интервал между словами
|
|
z-index
|
Порядок вывода слоев
|
Строка поиска <input type="number"> name имя ключа параметра value значение ключа
Строка поиска <input type="number">
|
имя ключа параметра |
|
|
|
заблокировано изменение пользователем |
|
заблокированы доступ, изменение пользователем и передача данных текущего параметра |
|
поле не может быть пустым |
|
|
|
|
|
|
|
подсказка-заглушка |
|
|
|
автозаполнение. Можно его отключить или сделать более конкретизированным. |
|
список рекомендованных значений |
|
|
<form>
<input type="number">
<input type="submit">
</form>
- Поле
<input type="number">не подходит для текстовых строк, состоящих из 16 и более цифр, например, номера пластиковой карты, так как длинные числа от 9007199254740991 могут округляться.
Количество товара
-
увеличение и уменьшение значения числового поля с помощью кнопок пошагового изменения;
-
сообщение об ошибке при вводе букв и дробных чисел;
-
минимальное значение 1 шт.
<form><input type="number" min="1" value="1"> шт</form>
Чётные положительные целые числа
<form><input type="number" step="2" min="2"></form>
Нечётные положительные целые числа
<form><input type="number" step="2" min="1"></form>
Круглые числа
<form><input type="number" step="10"></form>
Десятичная дробь с плавающей запятой
<form><input type="number" step="any"></form>
Денежный формат цены: «рубли,копейки» с двумя знаками после запятой ₽
<form><input type="number" step="0.01" min="0" placeholder="0,00"> ₽</form>
Ограничить количество символов в поле до 5
<form><input type="number" min="-9999" max="99999"></form>
Уменьшить длину <input type=number>
Атрибуты minlength, maxlength и size не работают.
Необходимое количество символов в поле определяется атрибутами min, max и step:
<!-- Достаточно выделить место на 6 символов -->
<input type="number" min="0" max="100" step="0.01"/>
Указать ширину в CSS (свойство width):
<style>
#dva {
width: 6em;
}
</style>
<input type="number" min="0" max="100" step="any" id="dva"/>
Стрелки у <input type=number>
Чтобы стрелочки были изначально, а не только при :hover и :focus в Chrome
<style>
#pyat::-webkit-inner-spin-button,
#pyat::-webkit-outer-spin-button {
opacity: 1;
}
</style>
<input type="number" id="pyat"/>
Убрать стрелки
<style>
.raz {
-moz-appearance: textfield;
}
.raz::-webkit-inner-spin-button {
display: none;
}
</style>
<input type="number" class="raz"/>
Стилизация стрелок «вверх»/«вниз» CSS
<style>
#raz {
position: relative;
display: inline-block;
}
#raz input {
font-size: 1em;
-moz-appearance: textfield;
}
#raz input::-webkit-inner-spin-button {
display: none;
}
#raz span {
position: absolute;
}
@supports (clip-path: polygon(50% 30%, 10% 90%, 90% 90%)) {
#raz input {
padding-right: 1em;
}
#raz span {
right: 0;
width: 1em;
height: 50%;
background: rgb(70,70,70);
cursor: pointer;
}
#raz span:hover {
background: red;
}
#raz span:nth-of-type(1) {
top: 0;
clip-path: polygon(50% 30%, 10% 90%, 90% 90%);
}
#raz span:nth-of-type(2) {
bottom: 0;
clip-path: polygon(50% 70%, 10% 10%, 90% 10%);
}
}
</style>
<span id="raz">
<input type="number" value="0">
<span onclick="this.previousElementSibling.stepUp()"></span>
<span onclick="this.previousElementSibling.previousElementSibling.stepDown()"></span>
</span>
Запретить ввод в поле, чтобы можно было пользоваться только кнопками редактирования
<style>
.raz {
all: unset;
-moz-appearance: textfield;
width: 3em;
text-align: center;
}
.raz::-webkit-inner-spin-button {
display: none;
}
</style>
<button type="button" onclick="this.nextElementSibling.stepDown()">-</button>
<input type="number" min="0" max="100" value="1" readonly class="raz">
<button type="button" onclick="this.previousElementSibling.stepUp()">+</button>
Вместо <input type="number"> использовать <input type="text">
Виртуальная клавиатура с дробно-числовым вводом
Атрибут inputmode плохо поддерживается браузерами.
<input inputmode="decimal">
На IOS (iPhone) если атрибут patternимеет значение [0-9]* или \d*, то на мобильном телефоне будет дана цифровая клавиатура.
Для отправки формы, поле должно содержать только цифры
<form><input inputmode="decimal" pattern="-?(\d+|\d+.\d+|.\d+)([eE][-+]?\d+)?"></form>
Функционал с JavaScript
При наборе не числа value возвратит пустое значение. Браузер может позволить/вынудить пользователя набрать число с запятой «20,5», но value примет значение с точкой «20.5», искл., IE.
value (строка) =""; valueAsNumber (число) ="";
Запретить ввод букв
<input type="number" id="check" step="any"/>
<script>
document.getElementById('check').onkeydown = function (e) {
return !(/^[А-Яа-яA-Za-z ]$/.test(e.key)); // IE > 9
}
</script>
Только одна точка или одна запятая
<input type="number" step="any" id="shest2"/>
<script>
document.getElementById('shest2').onkeydown = function (e) {
if (e.currentTarget.value.indexOf(".") != '-1' || e.currentTarget.value.indexOf(",") != '-1') {
return !(/[.,]/.test(e.key));
}
}
</script>
Ограничить ввод двумя знаками после запятой
Цифры, вносимые после 2-го символа после запятой, сразу обрезаются, дабы не совершать лишних телодвижений.
<input type="number" oninput="up(this)" step="0.01"/>
<script>
function up(e) {
if (e.value.indexOf(".") != '-1') {
e.value=e.value.substring(0, e.value.indexOf(".") + 3);
}
}
</script>
Обрезать последний лишний символ
<input type="number" step="any" id="shest1"/>
<script>
document.getElementById('shest1').oninput = function () {
if (this.value.length > 7) this.value = this.value.substr(0, 7); // в поле можно ввести только 7 символов
}
</script>
Разделение цифр пробелом
Наберите любое многозначное число
<input oninput="this.nextElementSibling.innerHTML = new Intl.NumberFormat('ru').format(this.valueAsNumber)" type="number">
<output> </output>