le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Sommario
Differenziare le variabili predefinite
Distinguere tra variabili globali e variabili locali
Riferimento del selettore principale nidificato (&)
Considerazioni sulla nidificazione
Nidificazione degli attributi di base
Considerazioni sulla nidificazione
Vantaggi e scenari applicabili
Vantaggi e scenari applicabili
SCSS utilizza istruzioni condizionali
Annidamento di istruzioni condizionali
Funzioni e utilizzo personalizzati
Definire funzioni personalizzate
Utilizza funzioni personalizzate
SCSS (Sassy CSS) è un linguaggio preprocessore per CSS Fornisce più funzioni e flessibilità basate su CSS, rendendo la scrittura e la gestione dei fogli di stile più efficienti e convenienti.
Ecco alcuni vantaggi di SCSS:
In sintesi, SCSS non solo mantiene tutte le funzioni dei CSS, ma introduce anche funzionalità avanzate come variabili, nidificazione, miscelazione, importazione, ecc. Queste funzioni consentono agli sviluppatori di scrivere e gestire i fogli di stile in modo più efficiente e sono comunemente utilizzate nei moderni front- sviluppo finale.
grammatica:
Leggibilità e manutenibilità:
Estensione della funzione:
Compatibilità:
curva di apprendimento:
In sintesi, rispetto ai CSS ordinari, SCSS fornisce più strumenti e funzionalità per semplificare la scrittura e la manutenzione dei fogli di stile, ed è particolarmente adatto per lo sviluppo di progetti grandi e complessi. Tuttavia, per piccoli progetti o semplici esigenze di stile, i semplici CSS possono essere più semplici e convenienti.
Prima di imparare scss, installa prima due plug-in in vscode per convertire scss in normali file CSS per il successivo apprendimento!
Cerca sass nello store dei plug-in, scarica i due plug-in seguenti e riavvia vscode!
Dichiarare le variabili in SCSS è molto semplice, puoi utilizzare il simbolo $ per definire le variabili.
Ecco un semplice esempio che mostra come dichiarare e utilizzare le variabili in SCSS:
- // 定义变量
- $primary-color: #3498db;
- $secondary-color: #2ecc71;
-
- // 使用变量
- body {
- background-color: $primary-color;
- }
-
- a {
- color: $secondary-color;
- }
Nell'esempio precedente, abbiamo definito due variabili $primary-color e $secondary-color per memorizzare rispettivamente il colore primario e il colore secondario. Possiamo quindi utilizzare queste variabili nelle regole di stile per mantenere i colori coerenti e facili da modificare in tutto il foglio di stile.
Quando un file SCSS viene compilato in un normale file CSS, tutte le variabili verranno sostituite con i valori corrispondenti, quindi il file CSS finale generato non conterrà alcuna dichiarazione di variabile.
In SCSS è possibile utilizzare variabili predefinite per garantire che una variabile abbia un valore alternativo se non è definita. Ciò è particolarmente utile quando si lavora con temi o si configurano stili.
Ecco un esempio di come dichiarare e utilizzare le variabili predefinite:
- // 声明变量,并设置默认值
- $primary-color: #3498db !default;
- $secondary-color: #2ecc71 !default;
-
- // 使用变量
- body {
- background-color: $primary-color;
- }
-
- a {
- color: $secondary-color;
- }
Nell'esempio precedente, abbiamo utilizzato il tag !default per definire il valore predefinito. Ciò significa che se $primary-color o $secondary-color non sono definiti altrove prima di essere introdotti nel file SCSS, utilizzeranno i valori predefiniti specificati (#3498db e #2ecc71). Se queste variabili sono state definite prima dell'importazione del file, i valori predefiniti verranno ignorati.
Il vantaggio dell'utilizzo delle variabili predefinite è che consente di fornire valori alternativi per le variabili senza sovrascrivere le variabili già definite. Ciò è particolarmente utile per creare temi o condividere variabili su più file di stile.
Nota: le variabili locali sovrascrivono le variabili globali
Quando una variabile con lo stesso nome di una variabile globale viene dichiarata nuovamente in un ambito locale, la variabile locale sovrascrive il valore della variabile globale. Ciò consente di definire diversi valori variabili per un selettore o mixer specifico senza influenzare la situazione globale.
Utilizzare la parola chiave !global per trasformare le variabili locali in variabili globali
SCSS fornisce la parola chiave !global per dichiarare esplicitamente le variabili locali come variabili globali. Ciò fa sì che il valore di una variabile locale venga promosso all'ambito globale in cui è dichiarato, sovrascrivendo qualsiasi variabile globale esistente con lo stesso nome.
Esempio:
- // 全局变量
- $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
- }
Nel primo esempio, la variabile locale $primary-color all'interno del selettore .button sovrascrive il valore della variabile globale. Nel secondo esempio, utilizzando la parola chiave !global, le variabili locali all'interno del selettore .button vengono convertite in variabili globali, influenzando così i valori delle variabili nell'ambito globale.
La nidificazione dei selettori consente di annidare le regole di stile per i selettori secondari all'interno dei selettori principali, ad esempio:
- // 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;
- }
- }
- }
- }
- }
Nel codice precedente, il selettore .navbar contiene un ul, li e un sotto-selettore nidificati. Questa struttura nidificata rende le regole di stile più chiare e più facili da gestire.
In SCSS, il simbolo & viene utilizzato per fare riferimento a un selettore genitore, particolarmente utile nel caso di pseudo-classi o pseudo-elementi. Ad esempio, utilizza &:hover per fare riferimento al selettore principale del selettore corrente e aggiungi uno stile di stato :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 consente più livelli di annidamento dei selettori, ad esempio:
- .container {
- .row {
- .col {
- width: 100%;
- }
- }
- }
In SCSS, oltre all'annidamento dei selettori, c'è anche la funzione di annidamento degli attributi, che è un'altra caratteristica che rende i fogli di stile più puliti e facili da gestire. L'annidamento delle proprietà consente di organizzare insieme le proprietà correlate, in modo simile al modulo di un oggetto.
La nidificazione delle proprietà può essere utilizzata per inserire proprietà correlate all'interno di un blocco di codice, ad esempio:
- .navbar {
- font: {
- family: Arial, sans-serif;
- size: 16px;
- weight: bold;
- }
- margin: {
- top: 10px;
- bottom: 15px;
- }
- padding: {
- left: 20px;
- right: 20px;
- }
- }
Nell'esempio precedente, i blocchi di carattere, margine e riempimento contengono attributi correlati. Questa organizzazione rende le proprietà all'interno di ciascun blocco più chiare e più facili da modificare e mantenere.
In SCSS, l'ereditarietà (Estendi) è una funzionalità molto utile che consente a un selettore di ereditare le regole di stile di un altro selettore. Questa funzionalità riduce il codice CSS duplicato e rende i fogli di stile più modulari e più facili da mantenere.
L'ereditarietà del selettore può essere ottenuta utilizzando la parola chiave @extend. Per esempio:
- %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;
- }
Nell'esempio precedente, %message-shared è un selettore di segnaposto che definisce un insieme comune di stili. .success-message e .error-message ereditano rispettivamente lo stile di %message-shared e aggiungono i propri colori di sfondo.
L'ereditarietà è particolarmente adatta per selettori con caratteristiche comuni, come componenti di pulsanti, finestre di messaggio, ecc. Attraverso l'ereditarietà, puoi riutilizzare le stesse regole di stile in scenari diversi mantenendo il codice pulito e gestibile.
Per riassumere, l'ereditarietà in SCSS è uno strumento potente che può aiutarti a evitare la duplicazione dello stile e a mantenere la modularità e la chiarezza del tuo codice. Tuttavia, quando lo usi, devi prestare attenzione all'ordine e alla posizione dei selettori e alla ragionevolezza uso dei segnaposto.
Il segnaposto % è un selettore speciale in SCSS che viene spesso utilizzato per definire regole di stile che possono essere ereditate ma che non generano un effettivo output CSS. Nello specifico:
- %placeholder-selector {
- // 样式规则
- }
Nell'esempio precedente, %placeholder-selector è un selettore di segnaposto che inizia con %. Definisce un insieme di regole di stile, ma il nome del selettore corrispondente non apparirà nel CSS compilato.
- .some-class {
- @extend %placeholder-selector;
- // 可选的额外样式
- }
L'utilizzo della parola chiave @extend consente a .some-class di ereditare lo stile di %placeholder-selector. Ciò significa che .some-class applicherà tutte le regole di stile definite in %placeholder-selector e genererà l'output CSS corrispondente.
In sintesi, il selettore di segnaposto% è un potente strumento in SCSS che può aiutare gli sviluppatori a migliorare la riusabilità e la manutenibilità dei fogli di stile riducendo al contempo la ridondanza CSS non necessaria.
I mixin sono un'altra funzionalità molto potente di SCSS che consente di incapsulare un insieme di regole di stile in un blocco di codice riutilizzabile e quindi fare riferimento laddove necessario. A differenza del selettore segnaposto %, i mixin possono generare direttamente l'output CSS, quindi è adatto a quelle situazioni in cui lo stesso stile deve essere utilizzato in più posti.
- @mixin mixin-name($parameter1, $parameter2, ...) {
- // 样式规则使用参数
- }
Nell'esempio sopra, la parola chiave @mixin definisce un mixin chiamato nome-mixin che può accettare più argomenti (se necessario) e definisce un insieme di regole di stile al suo interno.
- .some-class {
- @include mixin-name(value1, value2, ...);
- // 可选的额外样式
- }
Utilizza la parola chiave @include per richiamare il mixin nel selettore e passargli i parametri. In questo modo, .some-class applicherà le regole di stile definite nel mixin e applicherà i valori dei parametri passati alle variabili dei parametri corrispondenti.
- @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);
- }
In sintesi, mix @mixin è un potente strumento per incapsulare e riutilizzare le regole di stile in SCSS. Può migliorare significativamente la manutenibilità e la flessibilità dei CSS ed è adatto a vari requisiti di stile complessi e ripetuti.
In SCSS, le istruzioni condizionali consentono di generare dinamicamente gli stili CSS in base a condizioni specifiche. Le istruzioni condizionali in SCSS sono simili alle istruzioni condizionali in altri linguaggi di programmazione, inclusi @if, @else if e @else.
L'istruzione @if consente di generare stili in base a una condizione. La sintassi è la seguente:
- $use-rounded-corners: true;
-
- .button {
- @if $use-rounded-corners {
- border-radius: 4px;
- }
- }
Nell'esempio precedente, se il valore della variabile $use-rounded-corners è vero, viene generato lo stile della classe .button, incluso border-radius: 4px;. Se la condizione è falsa, questa parte dello stile non verrà generata.
Oltre a @if, puoi anche utilizzare @else if e @else per aggiungere più rami condizionali.
- $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; // 默认值
- }
- }
In questo esempio, a seconda del valore della variabile $button-size, vengono selezionati diversi valori di riempimento da applicare alla classe .button. Se non esiste alcuna condizione corrispondente, verrà eseguito il blocco di codice in @else.
Le istruzioni condizionali possono anche essere annidate per gestire una logica più complessa.
- $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;
- }
- }
In questo esempio, vengono selezionati diversi stili da applicare in base ai valori di $button-style e $button-size. Questo approccio nidificato consente di generare regole di stile complesse basate su molteplici condizioni.
Utilizzando istruzioni condizionali, puoi ottenere una definizione di stile più flessibile e dinamica in SCSS e generare diverse regole CSS basate su condizioni diverse, migliorando così la manutenibilità e la scalabilità del foglio di stile.
In SCSS, ci sono tre principali costrutti di loop che possono essere utilizzati per generare regole CSS ripetute: @for, @each e @ while.
Il ciclo @for viene utilizzato per generare ripetutamente stili in base a determinati passaggi e condizioni.
grammatica di base:
- @for $i from <start> through <end> {
- // 循环体
- }
Esempio:
- @for $i from 1 through 3 {
- .item-#{$i} {
- width: 100px * $i;
- }
- }
Nell'esempio precedente, vengono generate tre classi .item-1, .item-2 e .item-3, con larghezze impostate rispettivamente su 100px, 200px e 300px.
Il ciclo @each viene utilizzato per attraversare elenchi o dati di tipo mappato e generare stili per ciascun elemento.
grammatica di base:
- @each $var in <list or map> {
- // 循环体
- }
Esempio:
- $colors: (red, green, blue);
-
- @each $color in $colors {
- .text-#{$color} {
- color: $color;
- }
- }
In questo esempio vengono generate tre classi .text-red, .text-green e .text-blue e i relativi colori del testo vengono impostati sui valori di colore corrispondenti.
Il ciclo @ while genera ripetutamente stili in base a una condizione finché la condizione non viene soddisfatta.
grammatica di base:
- $i: 1;
- @while $i < 4 {
- // 循环体
- $i: $i + 1; // 更新条件
- }
Esempio:
- $i: 1;
- @while $i < 4 {
- .item-#{$i} {
- width: 100px * $i;
- }
- $i: $i + 1;
- }
Questo codice genera tre classi .item-1, .item-2 e .item-3 e imposta le loro larghezze rispettivamente su 100px, 200px e 300px.
Le tre strutture di loop SCSS @for, @each e @ while vengono utilizzate per eseguire cicli per indice, attraversare elenchi o dati di tipo mappa e generare stili basati rispettivamente su cicli condizionali. Queste strutture ad anello rendono SCSS più potente e flessibile, capace di generare regole CSS complesse in base alle esigenze.
In SCSS, i fogli di stile possono essere migliorati con funzioni personalizzate che accettano parametri e restituiscono valori elaborati.
In SCSS, utilizzare la parola chiave @function per definire le funzioni, che possono avere parametri e restituire valori. Ad esempio, definiamo una funzione per calcolare la larghezza totale del box model di un elemento:
- @function total-width($padding, $border, $margin, $content-width) {
- @return $padding + $border + $margin + $content-width;
- }
Nell'esempio sopra:
Una volta definita una funzione, è possibile utilizzarla negli stili per calcolare e generare i valori richiesti. Per esempio:
- .element {
- width: total-width(10px, 1px, 5px, 100px);
- }
In questo esempio, la funzione larghezza totale verrà chiamata con i parametri 10px, 1px, 5px e 100px. Il risultato restituito dalla funzione (116px) verrà applicato alla proprietà width di .element.
Usa SCSS per cambiare il tema in bianco e nero della pagina
codice 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');
- });