моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Оглавление
Дифференцировать переменные по умолчанию
Различайте глобальные переменные и локальные переменные.
Ссылка на вложенный родительский селектор (&)
Преимущества и применимые сценарии
Преимущества и применимые сценарии
SCSS использует условные операторы
Вложенность условных операторов
Пользовательские функции и использование
Определить пользовательские функции
Используйте пользовательские функции
SCSS (Sassy CSS) — это язык препроцессора для CSS. Он предоставляет больше функций и гибкости на основе CSS, что делает написание таблиц стилей и управление ими более эффективным и удобным.
Вот некоторые преимущества SCSS:
Таким образом, SCSS не только сохраняет все функции CSS, но также предоставляет расширенные функции, такие как переменные, вложение, смешивание, импорт и т. д. Эти функции позволяют разработчикам более эффективно писать таблицы стилей и управлять ими и обычно используются в современных интерфейсах. конец развития.
грамматика:
Читабельность и ремонтопригодность:
Расширение функции:
совместимость:
кривая обучения:
Подводя итог, по сравнению с обычным CSS, SCSS предоставляет больше инструментов и функций для упрощения написания и обслуживания таблиц стилей и особенно подходит для разработки больших и сложных проектов. Однако для небольших проектов или простых задач по стилизации простой CSS может быть более простым и удобным.
Прежде чем изучать scss, сначала установите два плагина в vscode, чтобы конвертировать scss в обычные CSS-файлы для последующего обучения!
Найдите sass в магазине плагинов, загрузите следующие два плагина и перезапустите vscode!
Объявлять переменные в SCSS очень просто: для определения переменных можно использовать символ $.
Вот простой пример, демонстрирующий, как объявлять и использовать переменные в SCSS:
- // 定义变量
- $primary-color: #3498db;
- $secondary-color: #2ecc71;
-
- // 使用变量
- body {
- background-color: $primary-color;
- }
-
- a {
- color: $secondary-color;
- }
В приведенном выше примере мы определили две переменные $primary-color и $вторичный-цвет для хранения основного и вторичного цвета соответственно. Затем мы можем использовать эти переменные в правилах стиля, чтобы цвета были единообразными и их можно было легко изменить во всей таблице стилей.
Когда файл SCSS компилируется в обычный файл CSS, все переменные будут заменены соответствующими значениями, поэтому окончательный сгенерированный файл CSS не будет содержать никаких объявлений переменных.
В SCSS вы можете использовать переменные по умолчанию, чтобы гарантировать, что переменная имеет альтернативное значение, если она не определена. Это особенно полезно при работе с темами или настройкой стилей.
Вот пример того, как объявлять и использовать переменные по умолчанию:
- // 声明变量,并设置默认值
- $primary-color: #3498db !default;
- $secondary-color: #2ecc71 !default;
-
- // 使用变量
- body {
- background-color: $primary-color;
- }
-
- a {
- color: $secondary-color;
- }
В приведенном выше примере мы использовали тег !default для определения значения по умолчанию. Это означает, что если $primary-color или $вторичный-color не определены где-либо еще до введения в этот файл SCSS, они будут использовать указанные значения по умолчанию (#3498db и #2ecc71). Если эти переменные были определены до импорта файла, значения по умолчанию будут игнорироваться.
Преимущество использования переменных по умолчанию заключается в том, что они позволяют предоставлять альтернативные значения переменных без перезаписи уже определенных переменных. Это особенно полезно для создания тем или совместного использования переменных в нескольких файлах стилей.
Примечание: локальные переменные переопределяют глобальные переменные.
Когда переменная с тем же именем, что и глобальная переменная, переобъявляется в локальной области, локальная переменная перезаписывает значение глобальной переменной. Это позволяет определять разные значения переменных для конкретного селектора или микшера, не влияя на глобальную ситуацию.
Используйте ключевое слово !global, чтобы превратить локальные переменные в глобальные переменные.
SCSS предоставляет ключевое слово !global для явного объявления локальных переменных как глобальных. Это приводит к тому, что значение локальной переменной перемещается в глобальную область, где она объявлена, перезаписывая любую существующую глобальную переменную с тем же именем.
Пример:
- // 全局变量
- $primary-color: #3498db;
-
- .button {
- // 局部变量,覆盖全局变量
- $primary-color: #cc582e;
- background-color: $primary-color; // 使用局部变量值
- }
-
- // 使用 !global 将局部变量变为全局变量
- $primary-color: #cddb34;
-
- .button {
- // 使用 !global 将局部变量变为全局变量
- $primary-color: #2ecc71 !global;
- }
-
- body {
- background-color: $primary-color; // 这里使用的是已变为全局的 $primary-color
- }
В первом примере локальная переменная $primary-color внутри селектора .button переопределяет значение глобальной переменной. Во втором примере с помощью ключевого слова !global локальные переменные внутри селектора .button преобразуются в глобальные переменные, тем самым влияя на значения переменных в глобальной области видимости.
Вложенность селекторов позволяет вкладывать правила стиля для дочерних селекторов в родительские селекторы, например:
- // SCSS代码
- .navbar {
- background-color: #333;
- padding: 10px;
-
- ul {
- list-style: none;
- margin: 0;
- padding: 0;
-
- li {
- display: inline-block;
- margin-right: 10px;
-
- a {
- text-decoration: none;
- color: #fff;
-
- &:hover {
- text-decoration: underline;
- }
- }
- }
- }
- }
В приведенном выше коде селектор .navbar содержит вложенные ul, li и подселектор. Эта вложенная структура делает правила стиля более понятными и простыми в управлении.
В SCSS символ & используется для обозначения родительского селектора, что особенно полезно в случае псевдоклассов или псевдоэлементов. Например, используйте &:hover для ссылки на родительский селектор текущего селектора и добавьте стиль состояния :hover.
- .button {
- background-color: #3498db;
- color: #fff;
- padding: 8px 16px;
- border: none;
- text-align: center;
- text-decoration: none;
- display: inline-block;
-
- &:hover {
- background-color: #2980b9;
- }
- }
SCSS допускает несколько уровней вложенности селекторов, например:
- .container {
- .row {
- .col {
- width: 100%;
- }
- }
- }
В SCSS, помимо вложения селекторов, есть еще функция вложения атрибутов, которая делает таблицы стилей более понятными и простыми в управлении. Вложенность свойств позволяет организовывать связанные свойства вместе, подобно форме объекта.
Вложенность свойств можно использовать для размещения связанных свойств в блоке кода, например:
- .navbar {
- font: {
- family: Arial, sans-serif;
- size: 16px;
- weight: bold;
- }
- margin: {
- top: 10px;
- bottom: 15px;
- }
- padding: {
- left: 20px;
- right: 20px;
- }
- }
В приведенном выше примере блоки шрифта, полей и отступов содержат связанные атрибуты. Такая организация делает свойства внутри каждого блока более понятными и простыми для изменения и обслуживания.
В SCSS наследование (Extend) — очень полезная функция, позволяющая одному селектору наследовать правила стиля другого селектора. Эта функция уменьшает дублирование кода CSS и делает таблицы стилей более модульными и простыми в обслуживании.
Наследование селектора может быть достигнуто с помощью ключевого слова @extend. Например:
- %message-shared {
- border: 1px solid #ccc;
- padding: 10px;
- color: #333;
- }
-
- .success-message {
- @extend %message-shared;
- background-color: lightgreen;
- }
-
- .error-message {
- @extend %message-shared;
- background-color: lightcoral;
- }
В приведенном выше примере %message-shared — это селектор-заполнитель, определяющий общий набор стилей. .success-message и .error-message соответственно наследуют стиль %message-shared и добавляют свои собственные цвета фона.
Наследование особенно подходит для селекторов с общими характеристиками, таких как компоненты кнопок, окна сообщений и т. д. Благодаря наследованию вы можете повторно использовать одни и те же правила стиля в разных сценариях, сохраняя при этом чистоту и удобство обслуживания вашего кода.
Подводя итог, наследование в SCSS — это мощный инструмент, который может помочь вам избежать дублирования стилей и сохранить модульность и ясность вашего кода. Однако при его использовании вам необходимо обращать внимание на разумный порядок и положение селекторов. использование заполнителей для максимизации его эффекта.
Заполнитель % — это специальный селектор в SCSS, который часто используется для определения правил стиля, которые могут быть унаследованы, но не генерируют фактический вывод CSS. Конкретно:
- %placeholder-selector {
- // 样式规则
- }
В приведенном выше примере %placeholder-selector — это селектор-заполнитель, начинающийся с %. Он определяет набор правил стиля, но соответствующее имя селектора не будет отображаться в скомпилированном CSS.
- .some-class {
- @extend %placeholder-selector;
- // 可选的额外样式
- }
Использование ключевого слова @extend позволяет .some-class наследовать стиль %placeholder-selector. Это означает, что .some-class будет применять все правила стиля, определенные в %placeholder-selector, и генерировать соответствующий вывод CSS.
Подводя итог, можно сказать, что селектор заполнителей% — это мощный инструмент в SCSS, который может помочь разработчикам улучшить возможность повторного использования и обслуживания таблиц стилей, одновременно уменьшая ненужную избыточность CSS.
Миксины — еще одна очень мощная функция SCSS, которая позволяет инкапсулировать набор правил стиля в повторно используемый блок кода, а затем ссылаться там, где это необходимо. В отличие от селектора-заполнителя %, миксины могут напрямую генерировать выходные данные CSS, поэтому они подходят для тех ситуаций, когда один и тот же стиль необходимо использовать в нескольких местах.
- @mixin mixin-name($parameter1, $parameter2, ...) {
- // 样式规则使用参数
- }
В приведенном выше примере ключевое слово @mixin определяет примесь с именем mixin-name, которая может принимать несколько аргументов (при необходимости), и определяет внутри нее набор правил стиля.
- .some-class {
- @include mixin-name(value1, value2, ...);
- // 可选的额外样式
- }
Используйте ключевое слово @include, чтобы вызвать миксин в селекторе и передать ему параметры. Таким образом, .some-class будет применять правила стиля, определенные в миксине, и применять переданные значения параметров к соответствующим переменным параметров.
- @mixin button-style($background-color, $text-color) {
- display: inline-block;
- padding: 10px 20px;
- border: none;
- border-radius: 4px;
- background-color: $background-color;
- color: $text-color;
- text-align: center;
- text-decoration: none;
- font-size: 16px;
- cursor: pointer;
- transition: background-color 0.3s ease;
-
- &:hover {
- background-color: darken($background-color, 10%);
- }
- }
- .button-primary {
- @include button-style(#3498db, #fff);
- }
-
- .button-secondary {
- @include button-style(#2ecc71, #fff);
- }
Подводя итог, можно сказать, что mix @mixin — это мощный инструмент для инкапсуляции и повторного использования правил стиля в SCSS. Он может значительно улучшить удобство сопровождения и гибкость CSS и подходит для различных сложных и повторяющихся требований к стилю.
В SCSS условные операторы позволяют динамически генерировать стили CSS на основе определенных условий. Условные операторы в SCSS аналогичны условным операторам в других языках программирования, включая @if, @else if и @else.
Оператор @if позволяет создавать стили на основе условия. Синтаксис следующий:
- $use-rounded-corners: true;
-
- .button {
- @if $use-rounded-corners {
- border-radius: 4px;
- }
- }
В приведенном выше примере, если значение переменной $use-rounded-corners истинно, генерируется стиль класса .button, включая border-radius: 4px;. Если условие ложно, эта часть стиля не будет сгенерирована.
В дополнение к @if вы также можете использовать @else if и @else для добавления дополнительных условных ветвей.
- $button-size: medium;
-
- .button {
- @if $button-size == small {
- padding: 5px 10px;
- } @else if $button-size == medium {
- padding: 10px 25px;
- } @else if $button-size == large {
- padding: 15px 30px;
- } @else {
- padding: 10px 20px; // 默认值
- }
- }
В этом примере, в зависимости от значения переменной $button-size, выбираются разные значения заполнения для применения к классу .button. Если условие соответствия отсутствует, будет выполнен блок кода в @else.
Условные операторы также могут быть вложенными для обработки более сложной логики.
- $button-style: flat;
- $button-size: medium;
-
- .button {
- @if $button-style == flat {
- background-color: transparent;
- color: #333;
- border: 1px solid #333;
-
- @if $button-size == small {
- padding: 5px 10px;
- } @else if $button-size == medium {
- padding: 10px 25px;
- } @else if $button-size == large {
- padding: 15px 30px;
- } @else {
- padding: 10px 20px; // 默认值
- }
- } @else if $button-style == raised {
- background-color: #3498db;
- color: #fff;
- padding: 10px 20px;
- border-radius: 4px;
- } @else {
- // 默认样式
- background-color: #db6334;
- color: #fff;
- padding: 10px 20px;
- }
- }
В этом примере для применения выбираются разные стили на основе значений $button-style и $button-size. Этот вложенный подход позволяет создавать сложные правила стиля на основе множества условий.
Используя условные операторы, вы можете добиться более гибкого и динамичного определения стиля в SCSS и генерировать различные правила CSS на основе разных условий, тем самым улучшая удобство обслуживания и масштабируемость таблицы стилей.
В SCSS есть три основные конструкции цикла, которые можно использовать для создания повторяющихся правил CSS: @for, @each и @ while.
Цикл @for используется для многократного создания стилей в соответствии с определенными шагами и условиями.
базовая грамматика:
- @for $i from <start> through <end> {
- // 循环体
- }
Пример:
- @for $i from 1 through 3 {
- .item-#{$i} {
- width: 100px * $i;
- }
- }
В приведенном выше примере создаются три класса .item-1, .item-2 и .item-3 с шириной, установленной на 100 пикселей, 200 пикселей и 300 пикселей соответственно.
Цикл @each используется для обхода данных типа списка или карты и создания стилей для каждого элемента.
базовая грамматика:
- @each $var in <list or map> {
- // 循环体
- }
Пример:
- $colors: (red, green, blue);
-
- @each $color in $colors {
- .text-#{$color} {
- color: $color;
- }
- }
В этом примере создаются три класса .text-red, .text-green и .text-blue, а их цветам текста присваиваются соответствующие значения цвета.
Цикл @ while неоднократно генерирует стили на основе условия до тех пор, пока условие не будет выполнено.
базовая грамматика:
- $i: 1;
- @while $i < 4 {
- // 循环体
- $i: $i + 1; // 更新条件
- }
Пример:
- $i: 1;
- @while $i < 4 {
- .item-#{$i} {
- width: 100px * $i;
- }
- $i: $i + 1;
- }
Этот код генерирует три класса .item-1, .item-2 и .item-3 и устанавливает для них ширину 100 пикселей, 200 пикселей и 300 пикселей соответственно.
Три структуры цикла SCSS @for, @each и @ while используются для цикла по индексу, обхода данных по списку или типу карты и генерации стилей на основе условных циклов соответственно. Эти циклические структуры делают SCSS более мощным и гибким, способным генерировать сложные правила CSS в соответствии с потребностями.
В SCSS таблицы стилей можно расширить с помощью пользовательских функций, которые принимают параметры и возвращают обработанные значения.
В SCSS используйте ключевое слово @function для определения функций, которые могут иметь параметры и возвращаемые значения. Например, мы определяем функцию для расчета общей ширины блочной модели элемента:
- @function total-width($padding, $border, $margin, $content-width) {
- @return $padding + $border + $margin + $content-width;
- }
В приведенном выше примере:
После определения функции ее можно использовать в стилях для расчета и генерации необходимых значений. Например:
- .element {
- width: total-width(10px, 1px, 5px, 100px);
- }
В этом примере функция общей ширины будет вызываться с параметрами 10px, 1px, 5px и 100px. Результат, возвращаемый функцией (116 пикселей), будет применен к свойству ширины .element.
Используйте SCSS для переключения черно-белой темы страницы.
html
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <link rel="stylesheet" href="main.css">
- <title>黑白色主题切换</title>
- </head>
- <body>
- <div class="container">
- <button id="theme-toggle">切换主题</button>
- <div class="box">
- <div class="content">
- <p>这是一些文本内容。</p>
- <p>这是一些文本内容。</p>
- <p>这是一些文本内容。</p>
- <p>这是一些文本内容。</p>
- <p>这是一些文本内容。</p>
- <p>这是一些文本内容。</p>
- <p>这是一些文本内容。</p>
- </div>
- </div>
- </div>
-
- <script src="main.js"></script>
- </body>
- </html>
сцс
- // 定义轻主题的样式变量
- $light-theme: (
- background-color: white,
- text-color: black,
- highlight-color: #f0f0f0
- );
-
- // 定义暗主题的样式变量
- $dark-theme: (
- background-color: black,
- text-color: white,
- highlight-color: #333333
- );
-
- // 定义一个混合(mixin)来应用主题样式
- // 参数 $theme: 要应用的主题,是一个包含背景色、文本颜色和高亮颜色的映射(map)
- @mixin theme($theme) {
- background-color: map-get($theme, background-color);
- color: map-get($theme, text-color);
-
- // 为 .box 类应用主题的高亮颜色
- .box {
- background-color: map-get($theme, highlight-color);
- }
- }
-
- // 应用轻主题样式到 body 元素,并添加过渡效果
- body {
- @include theme($light-theme);
- transition: all 0.3s ease;
- }
-
- // 为 body 的 dark 类应用暗主题样式
- body.dark {
- @include theme($dark-theme);
- }
-
- // 设置容器的文本居中和顶部间距
- .container {
- text-align: center;
- margin-top: 20px;
- }
-
- // 配置主题切换按钮的样式
- #theme-toggle {
- padding: 10px 20px;
- cursor: pointer;
- border: none;
- outline: none;
- background-color: #007bff;
- color: white;
- font-size: 16px;
- border-radius: 5px;
- }
-
- // 鼠标悬停在主题切换按钮上时改变背景色
- #theme-toggle:hover {
- background-color: #0056b3;
- }
-
- // 定义 .box 类的基本样式和过渡效果
- .box {
- margin: 20px auto;
- padding: 20px;
- width: 50%;
- border: 1px solid #ccc;
- transition: all 0.3s ease;
-
- // 内容区域的样式配置
- .content {
- p {
- margin: 10px 0;
- }
- }
- }
js
- /**
- * 为主题切换按钮添加点击事件监听器
- * 当按钮被点击时,切换文档主体的黑暗主题样式
- *
- * 该函数通过toggle方法动态切换body元素的'dark'类,从而实现主题的切换。
- * 如果body已经应用了'dark'类,那么点击按钮将移除这个类,反之亦然。
- * 这种方式允许用户在黑暗主题和默认主题之间自由切换。
- */
- document.getElementById('theme-toggle').addEventListener('click', () => {
- document.body.classList.toggle('dark');
- });