Знаете ли вы?
В этой статье приведены нестандартные и неоднозначные решения тех или иных проблем, связанных с вёрсткой.
Знаете ли вы, что картинки можно хранить прямо в css-файле?
Небольшие картинки, используемые, например, в свойстве background-image, можно хранить прямо в css. Лучше всего это работает с SVG-графикой. Для того, чтобы вставить картинку в css, нам придется воспользоваться простеньким энкодером, который, к тому же, сразу же сгенерирует код для вставки в css.
Если же у вас растровая иконка и вы используете LESS, то обратите внимание на функцию data-uri, которая принимает в качестве параметра путь к файлу с картинкой, а скомпилированный css-файл уже будет содержать закодированную картинку.
Знаете ли вы, что можно совмещать CSS-variables с HSL и calc?
Мы можем создавать темы для сайта, основанные на CSS-переменных. Это будет выглядеть так: все цвета мы задаём на сайте не конкретно, а абстрактно, задавая формулу, по которой в дальнейшем будет вычисляться цвет. Так, изменяя всего три CSS-переменные, мы можем полностью перекрасить весь сайт. Цвета можно изменять на основе времени суток на часах пользователя или же в зависимости от его особенностей зрения. Для нас главная возможность — упростить с этим нашу работу. Задать три переменные проще, чем подключить огромный CSS-файл, который может содержать ошибки по сравнению с главной темой.
Чуть больше конкретики. Цвета в CSS можно задавать при помощи HEX-палитры (#c00), RGB-палитры (rgb(204,0,0)) и HSL-палитры (hsl(0,100%,40%)). Нас интересует сейчас именно палитра HSL. Она позволяет задавать цвет на основе трёх составляющих: Hue, Saturation и Lightness. Hue изменяет цвет от красного до фиолетового, Saturation изменяет насыщенность цвета, Lightness изменяет яркость цвета.
.theme-1 { --primary-h: 0; --primary-s: 75; --primary-l: 60; } .theme-2 { --primary-h: 200; --primary-s: 100; --primary-l: 65; } .palette { --primary: hsl( var(--primary-h), calc(var(--primary-s) * 1%), calc(var(--primary-l) * 1%) ); --primary-100: hsl( var(--primary-h), calc(var(--primary-s) * 1.4 * 1%), calc(var(--primary-l) * 1.4 * 1%) ); --primary-200: hsl( var(--primary-h), calc(var(--primary-s) * 1.3 * 1%), calc(var(--primary-l) * 1.3 * 1%) ); --primary-300: hsl( var(--primary-h), calc(var(--primary-s) * 1.2 * 1%), calc(var(--primary-l) * 1.2 * 1%) ); --primary-400: hsl( var(--primary-h), calc(var(--primary-s) * 1.1 * 1%), calc(var(--primary-l) * 1.1 * 1%) ); --primary-500: var(--primary); --primary-600: hsl( var(--primary-h), calc(var(--primary-s) * 0.9 * 1%), calc(var(--primary-l) * 0.9 * 1%) ); --primary-700: hsl( var(--primary-h), calc(var(--primary-s) * 0.8 * 1%), calc(var(--primary-l) * 0.8 * 1%) ); --primary-800: hsl( var(--primary-h), calc(var(--primary-s) * 0.7 * 1%), calc(var(--primary-l) * 0.7 * 1%) ); --primary-900: hsl( var(--primary-h), calc(var(--primary-s) * 0.6 * 1%), calc(var(--primary-l) * 0.6 * 1%) ); } ul { display: flex; list-style: none; padding: 0; margin: 0 0 20px; } ul li { display: block; padding: 20px; margin-right: 5px; color: white; text-shadow: 0 0 5px black; }
<div class="theme-1"> Theme 1 <ul class="palette"> <li style="background: var(--primary-100)">100</li> <li style="background: var(--primary-200)">200</li> <li style="background: var(--primary-300)">300</li> <li style="background: var(--primary-400)">400</li> <li style="background: var(--primary-500)">500</li> <li style="background: var(--primary-600)">600</li> <li style="background: var(--primary-700)">700</li> <li style="background: var(--primary-800)">800</li> <li style="background: var(--primary-900)">900</li> </ul> </div> <div class="theme-2"> Theme 2 <ul class="palette"> <li style="background: var(--primary-100)">100</li> <li style="background: var(--primary-200)">200</li> <li style="background: var(--primary-300)">300</li> <li style="background: var(--primary-400)">400</li> <li style="background: var(--primary-500)">500</li> <li style="background: var(--primary-600)">600</li> <li style="background: var(--primary-700)">700</li> <li style="background: var(--primary-800)">800</li> <li style="background: var(--primary-900)">900</li> </ul> </div>