Записи с меткой "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;
}
}
Работа с изображениями в веб
Одно из решений, которые приходится принимать фронтенд-разработчику при создании сайта, касается выбора способа включения изображений в состав веб-страниц. Этот способ может заключаться в использовании 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>