CSS-переменные / SCSS
CSS-переменные
/* Объявление переменных */
:root {
--my-custom-color: tomato;
--my-custom-size: 16px;
}
/* Применение */
.some-class {
color: var(--my-custom-color);
font-size: var(--my-custom-size);
}
/* Объявление внутри с переопределение */
.some-class {
color: var(--my-custom-color, red);
font-size: var(--my-custom-size, 14px);
}
/* Можно использовать математические операции с цифровыми значениями
с помощью функции calc() */
.some-class {
font-size: calc(var(--my-custom-size)*0.5);
}
SCSS
Импорт и расширение
@import "scss/vars"; // файл с переменными
@import "scss/mixins"; // файл с примесями
.some-class {
clear: left
float: left;
}
.content-box {
@extend .some-class; // расширить класс
color: $base-color;
border: 1px solid red;
}
Переменные
$navy: #1d365d;
.class { color: $navy; }
Вложенность
.super-class-name {
color: #fff;
a {
text-decoration: none;
span { font-size: 1em; }
}
}
Шорткат селектора (&)
// & - текущий селектор
.super-button {
&__text { font-size: $font-size; } // .super-button__text
&--red { color: red; } // .super-button--red
&--blue { color: blue; } // .super-button--blue
&:hover { ... }
&:active { ... }
& span { ... }
&[disabled] { ... }
&.some-class { ... }
}
Мат. операции
div {
padding-top: 10px + 20; // = 30px
padding-bottom: 100px - 50; // = 50px
font-size: 2em * 2; // = 4em
left: 50% / 2; // = 25%
rgb(10, 10, 10) + 10; // rgb(20, 20, 20)
// встроенные функции
ceil((16px + 2cm) / 2) // округ. в большую ст.
floor((16px + 2cm) / 2) // округ. в меньшую ст.
round((16px + 2cm) / 2) // округ. в ближ. ст.
}
Цветовые функции
div {
// цвет поверн. от красного на 90° по чаc.
color: spin(red, 90);
// цвет на 45° от #f0f против чаc.
border-color: spin(#f0f, -45);
// светлее red на 50%
color: lighten(red, 50%);
// темнее blue на 25%
color: darken(blue, 25%);
// green насыщеннее на 20%
color: saturate(green, 20%);
// blue бледнее на 50%
color: desaturate(blue, 50%);
// @color прозрачнее на 50%
color: fade(@color, 50%);
// SASS: $color прозрачнее на 50%
color: rgba($color, 0.5);
}
Миксины
/* объявление примеси */
@mixin white { color: white; }
/* применение примеси */
.text { @include white; }
// Примесь с параметром
@mixin margin(@value) {
margin-top: @value;
margin-bottom: @value;
}
// Примесь с несколькими параметрами
@mixin offset(@padding; @margin) {
padding: @padding;
margin: @margin;
}
.block1 {
@include margin(10px);
}
.block2 {
@include offset(5px; 10px);
}
Пример миксинов для адаптивности
// BREAKPOINTS (useWindowSize - используются тоже эти)
// DESKTOP [1201 - 1920] --> 1920 макет
$laptop: 1200px; // LAPTOP [1024 - 1200] --> 1024 макет
$tablet: 1023px; // TABLET [768 - 1023] --> 768 макет
$mobile: 767px; // MOBILE [0 - 767] --> 414 макет
@mixin laptop {
@media screen and (max-width: $laptop) {
@content;
}
}
@mixin tablet {
@media screen and (max-width: $tablet) {
@content;
}
}
@mixin mobile {
@media screen and (max-width: $mobile) {
@content;
}
}
customScrollBar
@mixin customScrollBar($color) {
// scrollbar track width
&::-webkit-scrollbar {
width: 4px;
}
// scrollbar track background (полоска)
&::-webkit-scrollbar-track {
background-color: transparent;
}
// scrollbar thumb (бегунок)
&::-webkit-scrollbar-thumb {
background-color: $color;
border-radius: 8px;
}
}