Зачем нужны CSS-препроцессоры в 2024?

Валентин Ульянов

Зачем нужны
CSS-препроцессоры в 2024?

Логотип Стачки
27-28 сентября | Санкт-Петербург
Логотип секции Разработка | FrontEnd

Валентин Ульянов

Обложка

Обо мне

Фото Валентина Ульянова

Я и CSS-препроцессоры

Я и CSS-препроцессоры

Я и CSS-препроцессоры

Я и CSS-препроцессоры

Содержание

CSS vs Sass

Логотип Sass
Логотип Less
Логотип Stylus

Популярные возможности

Популярные возможности

Популярные возможности

Популярные возможности

Препроцессоры - build time

Переменные

Пример Sass переменные
Sass
Пример CSS переменные
CSS

Переменные в Sass

Переменные в Sass

Переменные в Sass

Переменные в Sass

Подойдут для статичных повторяющихся значений

Переменные в CSS

Переменные в CSS

Переменные в CSS

Переменные в CSS

Подойдут для констант и интерактивных значений

Мем: кастомные свойства vs Sass переменные

Вложенность

Пример CSS nesting

& - Родительский селектор

Вложенность в Sass

Вложенность в Sass

Вложенность в Sass

Вложенность в CSS

Вложенность в CSS

Вложенность в CSS

Цветовые функции

Пример цветовых функций Sass
Sass
Пример цветовых функций CSS
CSS

Цветовые функции

Возможность Sass CSS
Изменить на фикс. значение color.adjust() color()

Цветовые функции

Возможность Sass CSS
Изменить на фикс. значение color.adjust() color()
Плавно изменить на значение color.scale() 🟡

Цветовые функции

Возможность Sass CSS
Изменить на фикс. значение color.adjust() color()
Плавно изменить на значение color.scale() 🟡
Изменить значение компонента color.change() color()

Цветовые функции

Возможность Sass CSS
Изменить на фикс. значение color.adjust() color()
Плавно изменить на значение color.scale() 🟡
Изменить значение компонента color.change() color()
Смешать цвета color.mix() color-mix()

Цветовые функции

Возможность Sass CSS
Изменить на фикс. значение color.adjust() color()
Плавно изменить на значение color.scale() 🟡
Изменить значение компонента color.change() color()
Смешать цвета color.mix() color-mix()
Использовать custom properties

Цветовые функции

Возможность Sass CSS
Изменить на фикс. значение color.adjust() color()
Плавно изменить на значение color.scale() 🟡
Изменить значение компонента color.change() color()
Смешать цвета color.mix() color-mix()
Использовать custom properties
Новые цветовые пространства
Взять компонент цвета

Математика

Возможность Sass CSS
Арифметика: calc()
Сравнение: min(), max()
Округление: mod(), rem()
Тригонометрия: sin(), cos()
Степени: pow(), log()
Знак числа: abs(), sign()
Случайное число: random()

Импорты

Пример Sass импорт
Sass
Пример CSS импорт
CSS

Импорты в Sass

Полноценная модульная система:

Импорты в Sass

Полноценная модульная система:

Импорты в Sass

Полноценная модульная система:

Импорты в Sass

Полноценная модульная система:

Импорты в CSS

Импорты в CSS

Импорты в CSS

Мем: CSS vs Sass

Менее популярные возможности

Менее популярные возможности

Менее популярные возможности

Альтернативы препроцессоров

Логотип PostCSS

PostCSS

Инструмент, который трансформирует CSS с помощью JavaScript плагинов

Плагины для замены препроцессоров

Плагины для замены препроцессоров

Плагины для замены препроцессоров

Список PostCSS плагинов на сайте
Мем: PostCSS на могиле Sass

Миксины 🙂

Репозиторий postcss-mixins

Миксины 🥴

Пример postcss-mixins

Flow control правила 😢

Репозиторий postcss-conditionals

Свои функции 🥴

Репозиторий postcss-define-function

Свои функции 🥴

Пример postcss-define-function

Just migrate to LightningCSS

Андрей Ситник
Источник
Код CSS-in-JS

CSS-in-JS

CSS-in-JS

CSS-in-JS

CSS-in-JS

CSS-in-JS

*При рантайм решениях

Atomic CSS

Мем: хороним Sass

Не стоит хоронить Sass

Количество релизов Sass за последние полгода Количество скачиваний Sass за неделю
Обновление Sass: миксины первого класса
Sass playground

Продвинутые возможностиSass

Продвинутые возможности

Продвинутые возможности

Продвинутые возможности

Продвинутые возможности

Модульная система

Модульная система

Пример модуля Sass

Модульная система

Пример модуля Sass Пример использования модуля Sass

Модульная система

"Динамический" импорт

Динамический импорт модуля Sass

Миксины

Миксины и @content

Передача аргумента в @content миксина

Миксины и @content

Передача аргумента в @content миксина Передача аргумента в @content миксина
Мем: Bad Luck Brian

Объекты первого класса

Объекты первого класса

Объекты первого класса

Объекты первого класса

"First-class" в Sass

First-class миксины

First-class миксин

@at-root

Выносит правило

@at-root

At-root в Sass

Структуры данных

Структуры данных

Структуры данных

Все иммутабельные

List

Списки в Sass

List

List

List

List

Map

Словари в Sass

Map

Map

Map

Дикаприо Мем

Map

Словари как списки в Sass

Функции

Функции

Функции

Функции

Реализация find() в Sass

Функции

Работа с функциями в Sass

Кейсы

CSS modules
Демо пакета typed scss modules
mlut

Atomic CSS toolkit with Sass and ergonomics for creating styles of any complexity

Пример кода с Atomic CSS
На каких языках написан mlut

@:ah_O1_h

@:ah_O1_h =>

				@media (any-hover) {
				 
				 
				 
				}
			

@:ah_O1_h =>

				@media (any-hover) {
				  .\@\:ah_O1_h { 
				 
				  }
				}
			

@:ah_O1_h =>

				@media (any-hover) {
				  .\@\:ah_O1_h { 
				    opacity: 1
				  }
				}
			

@:ah_O1_h =>

				@media (any-hover) {
				  .\@\:ah_O1_h:hover {
				    opacity: 1
				  }
				}
			

mlut

Код at-rules settings

mlut

Код at-rules функций

mlut

Код миксина mk_ar

Pure CSS art

Pure CSS art

Pure CSS art

Pure CSS art

3D Фигура на CSS
3D фигура на CSS
Сложный код на Sass
Картина на CSS
Картина на CSS
Рисованная картинка на CSS
Рисованная картинка на CSS
Мультяшная анимация на CSS
Мультяшная анимация на CSS
Сотворение Адама на CSS
Сотворение Адама на CSS
Sass dash

Sassdash

Пример работы Sassdash

Sassdash

Пример работы Sassdash

Заключение

Зачем препроцессоры?

Зачем препроцессоры?

Зачем препроцессоры?

Выводы

Выводы

Выводы

Вопросы?

Валентин Ульянов Презентация: 150.lv/t/sass
Оцените доклад:
qr-код на обратную связь