2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Table des matières
Différencier les variables par défaut
Distinguer les variables globales et les variables locales
Référence du sélecteur parent imbriqué (&)
Considérations sur l'imbrication
Imbrication d'attributs de base
Considérations sur l'imbrication
Avantages et scénarios applicables
Avantages et scénarios applicables
SCSS utilise des instructions conditionnelles
@else et @else if instructions
Imbrication d'instructions conditionnelles
Trois types de boucles dans SCSS
Fonctions personnalisées et utilisation
Définir des fonctions personnalisées
Utiliser des fonctions personnalisées
SCSS (Sassy CSS) est un langage de préprocesseur pour CSS. Il offre plus de fonctions et de flexibilité basées sur CSS, rendant l'écriture et la gestion des feuilles de style plus efficaces et plus pratiques.
Voici quelques avantages du SCSS :
En résumé, SCSS conserve non seulement toutes les fonctions de CSS, mais introduit également des fonctionnalités avancées telles que les variables, l'imbrication, le mélange, l'importation, etc. Ces fonctions permettent aux développeurs d'écrire et de gérer des feuilles de style plus efficacement et sont couramment utilisées dans les fronts modernes. le développement final est l'un des outils.
grammaire:
Lisibilité et maintenabilité :
Extension de fonction :
compatibilité:
courbe d'apprentissage:
En résumé, par rapport au CSS ordinaire, SCSS fournit plus d'outils et de fonctionnalités pour simplifier l'écriture et la maintenance des feuilles de style, et est particulièrement adapté au développement de projets volumineux et complexes. Cependant, pour les petits projets ou les besoins de style simples, le CSS simple peut être plus simple et plus pratique.
Avant d'apprendre scss, installez d'abord deux plug-ins dans vscode pour convertir scss en fichiers CSS ordinaires pour un apprentissage ultérieur !
Recherchez sass dans le magasin de plug-ins, téléchargez les deux plug-ins suivants et redémarrez vscode !
Déclarer des variables dans SCSS est très simple, vous pouvez utiliser le symbole $ pour définir des variables.
Voici un exemple simple montrant comment déclarer et utiliser des variables dans SCSS :
- // 定义变量
- $primary-color: #3498db;
- $secondary-color: #2ecc71;
-
- // 使用变量
- body {
- background-color: $primary-color;
- }
-
- a {
- color: $secondary-color;
- }
Dans l'exemple ci-dessus, nous avons défini deux variables $primary-color et $secondary-color pour stocker respectivement la couleur primaire et la couleur secondaire. Nous pouvons ensuite utiliser ces variables dans les règles de style pour garder les couleurs cohérentes et faciles à modifier dans toute la feuille de style.
Lorsqu'un fichier SCSS est compilé dans un fichier CSS normal, toutes les variables seront remplacées par leurs valeurs correspondantes, de sorte que le fichier CSS final généré ne contiendra aucune déclaration de variable.
Dans SCSS, vous pouvez utiliser des variables par défaut pour garantir qu'une variable a une valeur alternative si elle n'est pas définie. Ceci est particulièrement utile lorsque vous travaillez avec des thèmes ou configurez des styles.
Voici un exemple de comment déclarer et utiliser des variables par défaut :
- // 声明变量,并设置默认值
- $primary-color: #3498db !default;
- $secondary-color: #2ecc71 !default;
-
- // 使用变量
- body {
- background-color: $primary-color;
- }
-
- a {
- color: $secondary-color;
- }
Dans l'exemple ci-dessus, nous avons utilisé la balise !default pour définir la valeur par défaut. Cela signifie que si $primary-color ou $secondary-color ne sont pas définis ailleurs avant d'être introduits dans ce fichier SCSS, ils utiliseront les valeurs par défaut spécifiées (#3498db et #2ecc71). Si ces variables ont été définies avant l'importation du fichier, les valeurs par défaut seront ignorées.
L'avantage de l'utilisation de variables par défaut est qu'elle vous permet de fournir des valeurs alternatives pour les variables sans écraser les variables déjà définies. Ceci est particulièrement utile pour créer des thèmes ou partager des variables sur plusieurs fichiers de style.
Remarque : les variables locales remplacent les variables globales
Lorsqu'une variable portant le même nom qu'une variable globale est redéclarée dans une portée locale, la variable locale écrase la valeur de la variable globale. Cela permet de définir différentes valeurs de variables pour un sélecteur ou un mélangeur spécifique sans affecter la situation globale.
Utilisez le mot-clé !global pour transformer des variables locales en variables globales
SCSS fournit le mot-clé !global pour déclarer explicitement les variables locales comme variables globales. Cela entraîne la promotion de la valeur d'une variable locale dans la portée globale où elle est déclarée, écrasant ainsi toute variable globale existante portant le même nom.
Exemple:
- // 全局变量
- $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
- }
Dans le premier exemple, la variable locale $primary-color à l'intérieur du sélecteur .button remplace la valeur de la variable globale. Dans le deuxième exemple, en utilisant le mot-clé !global, les variables locales à l'intérieur du sélecteur .button sont converties en variables globales, affectant ainsi les valeurs des variables dans la portée globale.
L'imbrication des sélecteurs permet d'imbriquer les règles de style des sélecteurs enfants dans les sélecteurs parents, par exemple :
- // 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;
- }
- }
- }
- }
- }
Dans le code ci-dessus, le sélecteur .navbar contient un ul, un li imbriqués et un sous-sélecteur. Cette structure imbriquée rend les règles de style plus claires et plus faciles à gérer.
En SCSS, le symbole & est utilisé pour désigner un sélecteur parent, particulièrement utile dans le cas de pseudo-classes ou de pseudo-éléments. Par exemple, utilisez &:hover pour référencer le sélecteur parent du sélecteur actuel et ajoutez un style d'état :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 permet plusieurs niveaux d'imbrication de sélecteurs, par exemple :
- .container {
- .row {
- .col {
- width: 100%;
- }
- }
- }
Dans SCSS, en plus de l'imbrication des sélecteurs, il existe également la fonctionnalité d'imbrication des attributs, qui est une autre fonctionnalité qui rend les feuilles de style plus propres et plus faciles à gérer. L'imbrication des propriétés permet d'organiser les propriétés associées, de la même manière que la forme d'un objet.
L'imbrication de propriétés peut être utilisée pour placer des propriétés associées dans un bloc de code, par exemple :
- .navbar {
- font: {
- family: Arial, sans-serif;
- size: 16px;
- weight: bold;
- }
- margin: {
- top: 10px;
- bottom: 15px;
- }
- padding: {
- left: 20px;
- right: 20px;
- }
- }
Dans l'exemple ci-dessus, les blocs de police, de marge et de remplissage contiennent des attributs associés. Cette organisation rend les propriétés de chaque bloc plus claires et plus faciles à modifier et à maintenir.
Dans SCSS, l'héritage (Extend) est une fonctionnalité très utile qui permet à un sélecteur d'hériter des règles de style d'un autre sélecteur. Cette fonctionnalité réduit le code CSS en double et rend les feuilles de style plus modulaires et plus faciles à maintenir.
L'héritage du sélecteur peut être obtenu à l'aide du mot-clé @extend. Par exemple:
- %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;
- }
Dans l'exemple ci-dessus, %message-shared est un sélecteur d'espace réservé qui définit un ensemble commun de styles. .success-message et .error-message héritent respectivement du style de %message-shared et ajoutent leurs propres couleurs d'arrière-plan.
L'héritage est particulièrement adapté aux sélecteurs ayant des caractéristiques communes, tels que les composants de boutons, les boîtes de message, etc. Grâce à l'héritage, vous pouvez réutiliser les mêmes règles de style dans différents scénarios tout en gardant votre code propre et maintenable.
Pour résumer, l'héritage dans SCSS est un outil puissant qui peut vous aider à éviter la duplication de style et à maintenir la modularité et la clarté de votre code. Cependant, lorsque vous l'utilisez, vous devez faire attention à l'ordre et à la position des sélecteurs, ainsi qu'au caractère raisonnable. utilisation d’espaces réservés pour maximiser son effet.
L'espace réservé % est un sélecteur spécial dans SCSS qui est souvent utilisé pour définir des règles de style qui peuvent être héritées mais qui ne génèrent pas de sortie CSS réelle. Spécifiquement:
- %placeholder-selector {
- // 样式规则
- }
Dans l'exemple ci-dessus, %placeholder-selector est un sélecteur d'espace réservé commençant par %. Il définit un ensemble de règles de style, mais le nom du sélecteur correspondant n'apparaîtra pas dans le CSS compilé.
- .some-class {
- @extend %placeholder-selector;
- // 可选的额外样式
- }
L'utilisation du mot-clé @extend permet à .some-class d'hériter du style de %placeholder-selector. Cela signifie que .some-class appliquera toutes les règles de style définies dans %placeholder-selector et générera la sortie CSS correspondante.
En résumé, le placeholder selector% est un outil puissant dans SCSS qui peut aider les développeurs à améliorer la réutilisabilité et la maintenabilité des feuilles de style tout en réduisant la redondance CSS inutile.
Les mixins sont une autre fonctionnalité très puissante de SCSS qui permet d'encapsuler un ensemble de règles de style dans un bloc de code réutilisable, puis de le référencer partout où cela est nécessaire. Contrairement au sélecteur d'espace réservé %, les mixins peuvent générer directement une sortie CSS, il convient donc aux situations où le même style doit être utilisé à plusieurs endroits.
- @mixin mixin-name($parameter1, $parameter2, ...) {
- // 样式规则使用参数
- }
Dans l'exemple ci-dessus, le mot-clé @mixin définit un mixin appelé mixin-name qui peut accepter plusieurs arguments (si nécessaire) et définit un ensemble de règles de style en son sein.
- .some-class {
- @include mixin-name(value1, value2, ...);
- // 可选的额外样式
- }
Utilisez le mot-clé @include pour appeler le mixin dans le sélecteur et lui transmettre des paramètres. De cette façon, .some-class appliquera les règles de style définies dans le mixin et appliquera les valeurs de paramètres transmises aux variables de paramètres correspondantes.
- @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);
- }
En résumé, mix @mixin est un outil puissant pour encapsuler et réutiliser des règles de style dans SCSS. Il peut améliorer considérablement la maintenabilité et la flexibilité de CSS et convient à diverses exigences de style complexes et répétées.
Dans SCSS, les instructions conditionnelles permettent de générer dynamiquement des styles CSS en fonction de conditions spécifiques. Les instructions conditionnelles dans SCSS sont similaires aux instructions conditionnelles dans d'autres langages de programmation, notamment @if, @else if et @else.
L'instruction @if permet de générer des styles en fonction d'une condition. La syntaxe est la suivante :
- $use-rounded-corners: true;
-
- .button {
- @if $use-rounded-corners {
- border-radius: 4px;
- }
- }
Dans l'exemple ci-dessus, si la valeur de la variable $use-rounded-corners est vraie, le style de la classe .button est généré, y compris border-radius: 4px;. Si la condition est fausse, cette partie du style ne sera pas générée.
En plus de @if, vous pouvez également utiliser @else if et @else pour ajouter davantage de branches conditionnelles.
- $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; // 默认值
- }
- }
Dans cet exemple, en fonction de la valeur de la variable $button-size, différentes valeurs de remplissage sont sélectionnées pour être appliquées à la classe .button. S'il n'y a aucune condition correspondante, le bloc de code dans @else sera exécuté.
Les instructions conditionnelles peuvent également être imbriquées pour gérer une logique plus complexe.
- $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;
- }
- }
Dans cet exemple, différents styles sont sélectionnés à appliquer en fonction des valeurs de $button-style et $button-size. Cette approche imbriquée permet de générer des règles de style complexes basées sur plusieurs conditions.
En utilisant des instructions conditionnelles, vous pouvez obtenir une définition de style plus flexible et dynamique dans SCSS et générer différentes règles CSS basées sur différentes conditions, améliorant ainsi la maintenabilité et l'évolutivité de la feuille de style.
Dans SCSS, il existe trois constructions de boucles principales qui peuvent être utilisées pour générer des règles CSS répétées : @for, @each et @while.
La boucle @for est utilisée pour générer des styles à plusieurs reprises selon certaines étapes et conditions.
grammaire de base:
- @for $i from <start> through <end> {
- // 循环体
- }
Exemple:
- @for $i from 1 through 3 {
- .item-#{$i} {
- width: 100px * $i;
- }
- }
Dans l'exemple ci-dessus, trois classes .item-1, .item-2 et .item-3 sont générées, avec des largeurs définies respectivement sur 100px, 200px et 300px.
La boucle @each est utilisée pour parcourir les données de type liste ou carte et générer des styles pour chaque élément.
grammaire de base:
- @each $var in <list or map> {
- // 循环体
- }
Exemple:
- $colors: (red, green, blue);
-
- @each $color in $colors {
- .text-#{$color} {
- color: $color;
- }
- }
Dans cet exemple, trois classes .text-red, .text-green et .text-blue sont générées et leurs couleurs de texte sont définies sur les valeurs de couleur correspondantes.
La boucle @while génère à plusieurs reprises des styles basés sur une condition jusqu'à ce que la condition ne soit pas remplie.
grammaire de base:
- $i: 1;
- @while $i < 4 {
- // 循环体
- $i: $i + 1; // 更新条件
- }
Exemple:
- $i: 1;
- @while $i < 4 {
- .item-#{$i} {
- width: 100px * $i;
- }
- $i: $i + 1;
- }
Ce code génère trois classes .item-1, .item-2 et .item-3 et définit leurs largeurs respectivement à 100 px, 200 px et 300 px.
Les trois structures de boucle SCSS @for, @each et @while sont utilisées pour boucler par index, parcourir des données de type liste ou carte et générer des styles basés respectivement sur des boucles conditionnelles. Ces structures de boucles rendent SCSS plus puissant et flexible, capable de générer des règles CSS complexes en fonction des besoins.
Dans SCSS, les feuilles de style peuvent être améliorées avec des fonctions personnalisées qui acceptent des paramètres et renvoient des valeurs traitées.
Dans SCSS, utilisez le mot-clé @function pour définir des fonctions qui peuvent avoir des paramètres et des valeurs de retour. Par exemple, nous définissons une fonction pour calculer la largeur totale du modèle de boîte d'un élément :
- @function total-width($padding, $border, $margin, $content-width) {
- @return $padding + $border + $margin + $content-width;
- }
Dans l'exemple ci-dessus :
Une fois qu'une fonction est définie, elle peut être utilisée dans des styles pour calculer et générer les valeurs requises. Par exemple:
- .element {
- width: total-width(10px, 1px, 5px, 100px);
- }
Dans cet exemple, la fonction largeur totale sera appelée avec les paramètres 10px, 1px, 5px et 100px. Le résultat renvoyé par la fonction (116px) sera appliqué à la propriété width de .element.
Utilisez SCSS pour changer le thème noir et blanc de la page
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>
SCSS
- // 定义轻主题的样式变量
- $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');
- });