Как сделать переменные в sass

Обновлено: 07.07.2024

В последние годы CSS превратился из написания простых наборов правил в мощный движок для создания прекрасного пользовательского опыта. Но по мере того, как проекты усложняются, как и CSS, который пишется, становится все труднее управлять и еще сложнее вносить изменения. В нативном CSS реализованы некоторые новые инструменты, такие как Grid и переменные, но препроцессоры CSS поднимают написание и управление CSS на следующий уровень.

Помимо написания гибких, повторно используемых наборов правил, препроцессоры CSS, такие как Sass, привносят мощную программную логику в CSS. Это верно - используя Sass, вы можете выполнять арифметические операции, писать функции ( @mixins ) и даже использовать управляющие структуры, такие как операторы if / else и циклы. В этой статье мы рассмотрим все способы написания программируемой логики в CSS. Синтаксис используется SCSS.

СОВЕТ: Если вы никогда ранее не использовали SCSS, я рекомендую ознакомиться с этим руководством, чтобы начать. Но не волнуйтесь! Если вы просто хотите увидеть , что SCSS может предложить, насколько логическая программа идет, вы можете сделать это в CodePen.io

Низко висящий фрукт: арифметические операторы

Самый простой способ начать программирование в SCSS - это заняться математикой. Вы можете выполнить пять арифметических операций:

  1. Дополнение с +
  2. Вычитание с -
  3. Умножение с *
  4. Отдел с /
  5. Получить остаток с %

Это позволяет использовать математику для определения размера шрифта или даже создавать приятные градиенты в стилях. Вот пример:

Благодаря простому делителю размеры шрифта вашего заголовка теперь масштабируются относительно друг друга. А позже вы увидите, как сделать это еще лучше.

Стоит отметить, что если вы можете использовать эти операторы только на аналогичных устройствах. Таким образом, вы не можете умножить px и em например. Вы можете использовать операторы на шестнадцатеричных цветах, чтобы сделать несколько интересных цветов! Как правило, я стараюсь использовать только цифры без единиц для математики в SCSS, когда могу.

Но использование математики в CSS - это только начало. Давайте посмотрим на еще более мощные функции программирования SCSS.

@mixins: функции SCSS

Повторяемый код является важным аспектом любого языка программирования, и SCSS ничем не отличается. Используя @mixin , вы можете создать набор кода, который можно использовать повторно. Вот простой пример:

В этом миксине у нас есть набор общих правил для всех кнопок. Затем, когда мы объявляем что-то, что должно иметь эти правила, мы можем использовать директиву @include для импорта этого набора правил.Но все становится лучше. Вы также можете передавать переменные в mixins. Допустим, например, что вы хотите контролировать цвет кнопки:

Наконец, если вы хотите изменить цвет по умолчанию, вы можете установить дополнительную переменную:

Вы можете себе представить, что это достаточно мощный инструмент для определения, управления и изменения набора общих стилей. Если общий стиль для всех кнопок когда-либо изменится, вам нужно всего лишь изменить его в @mixin .

Благодаря возможности обобщать код и делать его повторяемым, есть еще одна вещь, которую вы можете добавить в свой набор инструментов: принятие решений.

Управление потоком: использование операторов if для вашего CSS

Некоторые утверждают, что программирование в значительной степени принимает конкретные решения на основе определенных условий. И хотя я оставлю философские обсуждения для другой статьи, это правда, что принятие решений открывает много возможностей в коде для управления потоком программы.

В SCSS речь идет не столько о реагировании на взаимодействия в реальном времени (для этого нужны медиа-запросы), а о возможности консолидировать и лучше управлять большими блоками наборов правил. Давайте посмотрим на пример:

Таким образом, математика позволяет нам делать более точные вычисления для наших измерений, миксины позволяют нам обобщать наборы правил, чтобы сделать их более простыми для управления с высокого уровня, а операторы if/else позволяют нам сделать это управление еще одним шагом вперед, условно добавляя наборы правил и свойства по мере необходимости.

Но, возможно, самая большая экономия времени в логике программы SCSS - это циклы.

Повторение: создайте красивые стили с помощью циклов

Циклы позволяют вам повторять задачу, пока выполняется некоторое условие. В SCSS есть три типа циклов:

Цикл for

Цикл @for представляет собой простой цикл подсчета. Вы можете выполнить задачу определенное количество раз. Отличным примером этого является легкое создание масштабированных размеров заголовков, которые мы рассматривали ранее:

Итак, здесь мы используем, $i чтобы определить каждый из 6 тегов заголовка. Затем мы устанавливаем размер шрифта на основе $heading-size переменной. В конце цикла мы делим эту переменную на 1,25 , уменьшаем ее, а затем делаем то же самое для следующего тега заголовка. Таким образом, отрендеренный CSS выглядит так:

Хорошие, математически масштабированные размеры заголовков!

Цикл while

Циклы @while похожи, но мы не отнесены ни к одному инкрементору. Мы можем сделать что-то вроде создания масштабированного градиента, основываясь на некотором множителе:

В этом примере мы нацеливаемся p на элемент main и снижаем голубой градиент для каждого дочернего элемента. . У нас есть 2 счетчика: тот $gradient , который контролирует непрозрачность, и $i , который рассчитывает на nth-child .

Это также можно использовать для создания набора классов градиента или создания приятного визуального эффекта для длинного контента.

Цикл each

Возможно, самый интересный цикл в SCSS - это @each цикл. Это позволит вам пройтись по спискам переменных (версия массивов SCSS). Вы можете сделать некоторые изящные вещи с правильной комбинацией информации. Допустим, вы хотите серию предупреждений. Вы можете просмотреть массив цветов следующим образом:

Это говорит, что для каждой записи в $alerts списке, создайте класс с именем записи и установите запись в качестве цвета фона.

Вы можете сделать этот шаг еще дальше с помощью пар карт – key → value в списках. Если вы хотите больше описательных имен, вы можете сделать это:

Это эффективный способ быстро работать с большими наборами повторяющихся CSS. Вы можете представить собственный шрифт значка, который вы хотите использовать, где у вас есть карта с названием значка и значение Юникода для глифа.

Идите вперед и программируйте CSS!

С этим вы готовы начать кодировать свой собственный SCSS. Теперь у вас есть синтаксис, необходимый для выполнения математических операций if и циклов для ваших стилей. Для чего вы собираетесь использовать эту вновь обретенную силу? Дайте нам знать об этом в комментариях!

Ваш интерфейс загружает процессор ваших пользователей?

Поскольку веб-интерфейсы становятся все более сложными, жадные до ресурсов функции все больше требуют от браузера. Если вы заинтересованы в мониторинге и отслеживании использования ЦП на стороне клиента, использования памяти и многого другого для всех ваших пользователей, попробуйте LogRocket.


LogRocket похож на видеорегистратор для веб-приложений, записывая все, что происходит в вашем веб-приложении или на сайте. Вместо того, чтобы гадать, почему возникают проблемы, вы можете агрегировать и сообщать о ключевых показателях производительности внешнего интерфейса, воспроизводить сеансы пользователей вместе с состоянием приложения, регистрировать сетевые запросы и автоматически отображать все ошибки.

В папке src/assets откройте файл _default.scss. Я назвал его default, потому что в нем находятся базовые настройки для всего сайта.

Переменные SASS

Про наличие переменных в SASS я уже писал в уроках SASS.Gulp и SASS подробнее. В файле _default.scss в самом верху я перечислил все переменные, которые понадобятся в проекте. В комментариях я написал, какая группа переменных к чему относится: к семействам шрифтов, к размерам шрифтов и к цветам на сайте.

Далее в этом файле я сбросил стили для html и body, а потом написал стили по умолчанию для класса .container. После этого есть очень интересная группа стилей.

Я перечислил все медиа-запросы, которые будут на сайте. В каждом из них я прописал стили для .container. Это сделано, не просто для этого класса. Медиа-запросы с помощью gulp будут группироваться именно в таком порядке: сперва будет max-width: 1199px, а последним будет max-width: 575px. Сейчас объясню подробнее.

В разных файлах .scss по всему проекту будет встречаться @media (max-width: 1199px). Где-то для одного класса, потом для другого, для третьего, и так для нескольких классов. То есть в проекте будет несколько @media (max-width: 1199px). Но после сборки проекта с помощью gulp, в итоговом style.css будет только один @media (max-width: 1199px). Всё сгруппируется и будет внутри его фигурных скобок.

Группировка медиа-запросов это очень хорошо, ваш style.css будет меньше, и сайт будет работать чуть-чуть быстрее.

Кстати, группировка происходит с помощью инструмента gcmq(), который уже у вас установлен через package.json.

Как я уже написал, медиа-запросы будут группироваться в таком порядке: сперва будет max-width: 1199px, а последним будет max-width: 575px. Это потому, что они идут в таком порядке в файле _default.scss, а в style.scss он первый из тех, где есть медиа-запросы.

Дальше, из интересного в _default.scss, это стили для тега a:

Здесь применяются некоторые переменные из перечисленных выше. А также, применяется знак амперсанда (&), благодаря которому в style.css будет такая запись:

Миксины в SASS

Если в переменную вы можете задать только значение, то в миксин вы можете вписать сразу несколько стилей. Пример миксина:

Теперь этот миксин можно использовать где угодно в .scss с помощью директивы @include:

И этот код скомпилируется в:

То есть после компиляции поставились стили из миксина example.

Кстати, миксины еще часто называют примесями.

А теперь вернитесь в ваш _default.scss и посмотрите на участок кода:

Здесь сперва создается миксин под названием placeholder. А через директиву @include миксин вызывается. Этот код будет скомпилирован в:

То есть то, что было в миксине директивой @content заменилось тем, что было в директиве @include. Посмотрите на оба кода еще раз повнимательней.

С помощью переменных и миксинов можно значительно сократить код и ускорить его написание и редактирование.

Мапы (массивы) в SASS

Откройте файл _fonts.scss. В этом файле нужно подключать все шрифты, которые будут использовать в верстке. Подключаются шрифты через директиву @font-face, как это описано в уроке "Меню каталога, основное меню, баннер на главной странице". Но здесь в _fonts.scss Вы видите не только директиву @font-face. В нем Вы видите такой код:

Здесь $Raleway:(. ) это мап в SCSS. В программировании есть массивы. Они аналогичны переменным, только массив имеет не одно значение, а сразу несколько. SCSS это не язык программирования, но в нем тоже есть массивы, но называются они мапы.

Взгляните еще раз на мап:

Это мап $Raleway, и у него 2 значения: Roboto-Regular и Roboto-Bold.

Теперь посмотрите на следующий участок кода:

В итоговый CSS этот участок скомпилируется в такой код:

Таким образом, в SCSS благодаря мапу удалось написать директиву @font-face только один раз. Если шрифтов в верстке используется несколько, то это очень удобно.

Давайте подробнее разберем код:

По-русски он означает: для каждого (each переводится как "каждый") значения из мапа $Raleway использовать директиву @font-face. В этом коде $font используется как переменная, и вместо нее при компиляции в CSS будет подставлено значение из мапа $Raleway. Команда @each пройдется по каждому значению из мапа и запишет в CSS директиву @font-face для каждого этого значения.

Вот и получилось, что в SCSS у нас в $Raleway 2 значения: Roboto-Regular и Roboto-Bold. И в CSS будет 2 директивы @font-face:

sass

SCSS и SASS – это два препроцессора, которые имеют мощный функционал, но слегка разный синтаксис, во всех последующих постах мы будем рассматривать именно SCSS, т.к. его синтаксис максимально схож со стандартным CSS.

1. SCSS – синтаксис

Что касается синтаксиса, то на данном этапе скажу так: “Все, что вы напишите в scss файле на чистом css, будет им распознано и принято на ура!“.
SCSS полностью принимает стандартный синтаксис CSS, а что касается написание внутреннего функционала (миксы, переменные и т.д.), то его мы будем рассматривать по мере изучения 😉


Как мы видим из примера, если в scss файле написать чистый css, то все будет принято, это говорит о том что можно комбинировать ваш код и использовать преимущества scss, только в нужных вам местах. Вовсе не обязательно переводить весь ваш код во вложенный метод написания или заполонить все переменными, главное чтобы код оставался понятным, читабельным и гибким 😉

2. SCSS – вложенность

SCSS имеет отличную особенность – это вложенность, когда мы внутрь одного блока со свойствами вставляем еще один блок, то в чистом CSS вложенный блок добавит к названию своего блока – название родительского, подробнее на картинке:


Как вы заметили на этом примере я использую символ & в коде SCSS, этот символ говорит, что я хочу работать с родительским блоком (его названием), часто применяется для объявления состояния(:hover, :focus), например для ссылки.

3. SCSS – переменные

Как часто бывает, что вам необходимо изменить что-то в вашем коде, цвет или шрифт или еще что-то.
Приходится пользоваться поиском и автозаменой, в SCSS этот вопрос почти отпадает, т.к. мы можем вводить переменные, объявить их в самом начале и если нам придется изменить цвет, то мы просто изменим значение этой переменной и SCSS сделает все остальное за нас 🙂

Синтаксис объявления переменных:
Перед именем переменной ставим символ – $, потом название переменной (латинские буквы, цифры, -, _), потом двоеточие и значение, например
$linkFont: ‘Open Sans’, sans-serif;

Переменные стоит объявлять в самом начале (до того места где они будут использованы). После того, как вы задали переменные, вы можете их использовать, просто поставив их названия (с символом доллара) на месте объявления значений в вашем коде, смотрите пример на картинке ниже:


В примере (см. картинку выше) мы использовали переменные для задания семейства шрифтов и цвета, обратите ваше внимание на название переменных, желательно делать их понятными и универсальными.
Названия переменных типа: $red, может вас ограничить, в том плане если вам придется изменить значение цвета, на синий, то название переменной не будет соответствовать ее значению.
Подходите к выбору имени для переменных с умом 😉

Mobile developers can, and should, be thinking about how responsive design affects a user’s context and how we can be…

Featured | Tutorial

Use API Connect with a Node.js web application

February 1, 2018

Featured | Code Pattern

Build an image gallery app in the cloud

September 26, 2018

Featured | Article

Auto-fix and format your JavaScript with ESLint

There are no upcoming events for Web development.

About Web development

Use open-standards technologies to build modern web apps.

Blog Post

Top 5 reasons to use Node-RED right now

Article

Explore the UML sequence diagram

February 15, 2004

Code Pattern

Build a service desk database, server, and web app

October 29, 2020

Tutorial

Create a blog application using Django and PostgreSQL

September 25, 2020

Tutorial

Use API Connect with a Python web application

February 12, 2018

Tutorial

Learn the workings of Git, not just the commands

Article

Integrate ReactJS into a legacy Dojo application

December 17, 2021

Serpro Consulta CNPJ - National Register of Legal Entities Consultation

Avoid surprises! With the "Consulta CNPJ" you have access to the public information of the National Register of Legal Entities,…

Serpro NFe Consultation - Improves Brazilian credit rating quality

Whith your aplication integrated with Consulta NF-e, you are able to get strategical information from SPED databases, ensuring greater assertiveness…

Serpro Consulta CPF - Registration information of Individuals in Brazil

With the "CPF Consultation" you provide your company with information obtained directly from the bases of the Federal Revenue, which…

Читайте также: