2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Inhaltsverzeichnis
Vergleich zwischen SCSS und CSS
Standardvariablen unterscheiden
Unterscheiden Sie zwischen globalen Variablen und lokalen Variablen
Referenz zum verschachtelten übergeordneten Selektor (&)
Überlegungen zur Verschachtelung
Verschachtelung von Eigenschaften
Grundlegende Attributverschachtelung
Überlegungen zur Verschachtelung
Vorteile und anwendbare Szenarien
Vorteile und anwendbare Szenarien
SCSS verwendet bedingte Anweisungen
@else- und @else if-Anweisungen
Verschachtelung bedingter Anweisungen
Drei Arten von Schleifen in SCSS
Benutzerdefinierte Funktionen und Verwendung
Definieren Sie benutzerdefinierte Funktionen
Verwenden Sie benutzerdefinierte Funktionen
SCSS (Sassy CSS) ist eine Präprozessorsprache für CSS. Sie bietet mehr Funktionen und Flexibilität auf Basis von CSS und macht das Schreiben und Verwalten von Stylesheets effizienter und komfortabler.
Hier sind einige Vorteile von SCSS:
Zusammenfassend lässt sich sagen, dass SCSS nicht nur alle Funktionen von CSS beibehält, sondern auch erweiterte Funktionen wie Variablen, Verschachtelung, Mischen, Importieren usw. einführt. Diese Funktionen ermöglichen es Entwicklern, Stylesheets effizienter zu schreiben und zu verwalten und werden häufig in modernen Front-Office-Anwendungen verwendet. Ende der Entwicklung.
Grammatik:
Lesbarkeit und Wartbarkeit:
Funktionserweiterung:
Kompatibilität:
Lernkurve:
Zusammenfassend lässt sich sagen, dass SCSS im Vergleich zu gewöhnlichem CSS mehr Tools und Funktionen bietet, um das Schreiben und Verwalten von Stylesheets zu vereinfachen, und sich besonders für die Entwicklung großer und komplexer Projekte eignet. Für kleine Projekte oder einfache Styling-Anforderungen kann jedoch einfaches CSS einfacher und bequemer sein.
Bevor Sie scss lernen, installieren Sie zunächst zwei Plug-Ins in vscode, um scss für das spätere Lernen in normale CSS-Dateien zu konvertieren!
Suchen Sie im Plug-In-Store nach Sass, laden Sie die folgenden beiden Plug-Ins herunter und starten Sie vscode neu!
Das Deklarieren von Variablen in SCSS ist sehr einfach. Sie können das $-Symbol zum Definieren von Variablen verwenden.
Hier ist ein einfaches Beispiel, das zeigt, wie Variablen in SCSS deklariert und verwendet werden:
- // 定义变量
- $primary-color: #3498db;
- $secondary-color: #2ecc71;
-
- // 使用变量
- body {
- background-color: $primary-color;
- }
-
- a {
- color: $secondary-color;
- }
Im obigen Beispiel haben wir zwei Variablen $primary-color und $secondary-color definiert, um die Primärfarbe bzw. die Sekundärfarbe zu speichern. Wir können diese Variablen dann in Stilregeln verwenden, um die Farben im gesamten Stylesheet konsistent und leicht zu ändern zu halten.
Wenn eine SCSS-Datei in eine normale CSS-Datei kompiliert wird, werden alle Variablen durch ihre entsprechenden Werte ersetzt, sodass die endgültig generierte CSS-Datei keine Variablendeklarationen enthält.
In SCSS können Sie Standardvariablen verwenden, um sicherzustellen, dass eine Variable einen alternativen Wert hat, wenn sie nicht definiert ist. Dies ist besonders nützlich, wenn Sie mit Themen arbeiten oder Stile konfigurieren.
Hier ist ein Beispiel für die Deklaration und Verwendung von Standardvariablen:
- // 声明变量,并设置默认值
- $primary-color: #3498db !default;
- $secondary-color: #2ecc71 !default;
-
- // 使用变量
- body {
- background-color: $primary-color;
- }
-
- a {
- color: $secondary-color;
- }
Im obigen Beispiel haben wir das Tag !default verwendet, um den Standardwert zu definieren. Das heißt, wenn $primary-color oder $secondary-color vor der Einführung in diese SCSS-Datei nicht an anderer Stelle definiert werden, verwenden sie die angegebenen Standardwerte (#3498db und #2ecc71). Wenn diese Variablen vor dem Importieren der Datei definiert wurden, werden die Standardwerte ignoriert.
Der Vorteil der Verwendung von Standardvariablen besteht darin, dass Sie alternative Werte für Variablen bereitstellen können, ohne bereits definierte Variablen zu überschreiben. Dies ist besonders nützlich, um Themen zu erstellen oder Variablen über mehrere Stildateien hinweg zu teilen.
Hinweis: Lokale Variablen überschreiben globale Variablen
Wenn eine Variable mit demselben Namen wie eine globale Variable in einem lokalen Bereich erneut deklariert wird, überschreibt die lokale Variable den Wert der globalen Variablen. Dadurch können unterschiedliche Variablenwerte für einen bestimmten Selektor oder Mixer definiert werden, ohne dass sich dies auf die globale Situation auswirkt.
Verwenden Sie das Schlüsselwort !global, um lokale Variablen in globale Variablen umzuwandeln
SCSS stellt das Schlüsselwort !global bereit, um lokale Variablen explizit als globale Variablen zu deklarieren. Dadurch wird der Wert einer lokalen Variablen in den globalen Bereich hochgestuft, in dem er deklariert wird, und alle vorhandenen globalen Variablen mit demselben Namen überschreiben.
Beispiel:
- // 全局变量
- $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
- }
Im ersten Beispiel überschreibt die lokale Variable $primary-color im .button-Selektor den Wert der globalen Variablen. Im zweiten Beispiel werden mithilfe des Schlüsselworts !global die lokalen Variablen im .button-Selektor in globale Variablen umgewandelt und wirken sich so auf die Variablenwerte im globalen Bereich aus.
Durch die Verschachtelung von Selektoren können Stilregeln für untergeordnete Selektoren in übergeordneten Selektoren verschachtelt werden, zum Beispiel:
- // 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;
- }
- }
- }
- }
- }
Im obigen Code enthält der .navbar-Selektor einen verschachtelten ul, li und einen Unterselektor. Diese verschachtelte Struktur macht Stilregeln klarer und einfacher zu verwalten.
In SCSS wird das &-Symbol verwendet, um auf einen übergeordneten Selektor zu verweisen, was besonders nützlich im Fall von Pseudoklassen oder Pseudoelementen ist. Verwenden Sie beispielsweise &:hover, um auf den übergeordneten Selektor des aktuellen Selektors zu verweisen und einen :hover-Statusstil hinzuzufügen.
- .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 ermöglicht mehrere Ebenen der Selektorverschachtelung, zum Beispiel:
- .container {
- .row {
- .col {
- width: 100%;
- }
- }
- }
In SCSS gibt es neben der Selektorverschachtelung auch die Funktion der Attributverschachtelung, eine weitere Funktion, die Stylesheets übersichtlicher und einfacher zu verwalten macht. Durch die Verschachtelung von Eigenschaften können zusammengehörige Eigenschaften ähnlich der Form eines Objekts organisiert werden.
Durch die Verschachtelung von Eigenschaften können verwandte Eigenschaften innerhalb eines Codeblocks platziert werden, zum Beispiel:
- .navbar {
- font: {
- family: Arial, sans-serif;
- size: 16px;
- weight: bold;
- }
- margin: {
- top: 10px;
- bottom: 15px;
- }
- padding: {
- left: 20px;
- right: 20px;
- }
- }
Im obigen Beispiel enthalten die Schriftart-, Rand- und Füllblöcke verwandte Attribute. Diese Organisation macht die Eigenschaften innerhalb jedes Blocks klarer und einfacher zu ändern und zu verwalten.
In SCSS ist die Vererbung (Extend) eine sehr nützliche Funktion, die es einem Selektor ermöglicht, die Stilregeln eines anderen Selektors zu erben. Diese Funktion reduziert doppelten CSS-Code und macht Stylesheets modularer und einfacher zu warten.
Die Selektorvererbung kann mit dem Schlüsselwort @extend erreicht werden. Zum Beispiel:
- %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;
- }
Im obigen Beispiel ist %message-shared ein Platzhalterselektor, der einen gemeinsamen Satz von Stilen definiert. .success-message und .error-message erben jeweils den Stil von %message-shared und fügen ihre eigenen Hintergrundfarben hinzu.
Die Vererbung eignet sich besonders für Selektoren mit gemeinsamen Merkmalen, wie z. B. Schaltflächenkomponenten, Meldungsfelder usw. Durch Vererbung können Sie dieselben Stilregeln in verschiedenen Szenarien wiederverwenden und gleichzeitig Ihren Code sauber und wartbar halten.
Zusammenfassend lässt sich sagen, dass die Vererbung in SCSS ein leistungsstarkes Tool ist, das Ihnen helfen kann, Stilduplizierungen zu vermeiden und die Modularität und Klarheit Ihres Codes beizubehalten. Bei der Verwendung müssen Sie jedoch auf die Reihenfolge und Position der Selektoren sowie auf die Angemessenheit achten Verwendung von Platzhaltern, um die Wirkung zu maximieren.
Der Platzhalter % ist ein spezieller Selektor in SCSS, der häufig zum Definieren von Stilregeln verwendet wird, die vererbt werden können, aber keine tatsächliche CSS-Ausgabe generieren. Speziell:
- %placeholder-selector {
- // 样式规则
- }
Im obigen Beispiel ist %placeholder-selector ein Platzhalterselektor, der mit % beginnt. Es definiert eine Reihe von Stilregeln, der entsprechende Selektorname wird jedoch nicht im kompilierten CSS angezeigt.
- .some-class {
- @extend %placeholder-selector;
- // 可选的额外样式
- }
Durch die Verwendung des Schlüsselworts @extend kann .some-class den Stil von %placeholder-selector erben. Dies bedeutet, dass .some-class alle in %placeholder-selector definierten Stilregeln anwendet und eine entsprechende CSS-Ausgabe generiert.
Zusammenfassend ist der Platzhalterselektor % ein leistungsstarkes Tool in SCSS, das Entwicklern dabei helfen kann, die Wiederverwendbarkeit und Wartbarkeit von Stylesheets zu verbessern und gleichzeitig unnötige CSS-Redundanz zu reduzieren.
Mixins sind eine weitere sehr leistungsstarke Funktion in SCSS, die es ermöglicht, eine Reihe von Stilregeln in einem wiederverwendbaren Codeblock zu kapseln und dann bei Bedarf darauf zu verweisen. Im Gegensatz zum Platzhalterselektor % können Mixins direkt CSS-Ausgaben generieren und eignen sich daher für Situationen, in denen derselbe Stil an mehreren Stellen verwendet werden muss.
- @mixin mixin-name($parameter1, $parameter2, ...) {
- // 样式规则使用参数
- }
Im obigen Beispiel definiert das Schlüsselwort @mixin ein Mixin namens mixin-name, das mehrere Argumente akzeptieren kann (falls erforderlich) und darin eine Reihe von Stilregeln definiert.
- .some-class {
- @include mixin-name(value1, value2, ...);
- // 可选的额外样式
- }
Verwenden Sie das Schlüsselwort @include, um das Mixin im Selektor aufzurufen und ihm Parameter zu übergeben. Auf diese Weise wendet .some-class die im Mixin definierten Stilregeln an und wendet die übergebenen Parameterwerte auf die entsprechenden Parametervariablen an.
- @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);
- }
Zusammenfassend ist mix @mixin ein leistungsstarkes Tool zum Kapseln und Wiederverwenden von Stilregeln in SCSS. Es kann die Wartbarkeit und Flexibilität von CSS erheblich verbessern und eignet sich für verschiedene komplexe und wiederholte Stilanforderungen.
In SCSS ermöglichen bedingte Anweisungen die dynamische Generierung von CSS-Stilen basierend auf bestimmten Bedingungen. Bedingte Anweisungen in SCSS ähneln bedingten Anweisungen in anderen Programmiersprachen, einschließlich @if, @else if und @else.
Mit der @if-Anweisung können Stile basierend auf einer Bedingung generiert werden. Die Syntax lautet wie folgt:
- $use-rounded-corners: true;
-
- .button {
- @if $use-rounded-corners {
- border-radius: 4px;
- }
- }
Wenn im obigen Beispiel der Wert der Variablen $use-rounded-corners true ist, wird der Stil der .button-Klasse generiert, einschließlich border-radius: 4px;. Wenn die Bedingung falsch ist, wird dieser Teil des Stils nicht generiert.
Zusätzlich zu @if können Sie auch @else if und @else verwenden, um weitere bedingte Zweige hinzuzufügen.
- $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 diesem Beispiel werden abhängig vom Wert der Variablen $button-size unterschiedliche Füllwerte ausgewählt, die auf die Klasse .button angewendet werden. Wenn es keine passende Bedingung gibt, wird der Codeblock in @else ausgeführt.
Bedingte Anweisungen können auch verschachtelt werden, um komplexere Logik zu verarbeiten.
- $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 diesem Beispiel werden basierend auf den Werten von $button-style und $button-size verschiedene Stile zur Anwendung ausgewählt. Dieser verschachtelte Ansatz ermöglicht die Generierung komplexer Stilregeln basierend auf mehreren Bedingungen.
Durch die Verwendung von bedingten Anweisungen können Sie eine flexiblere und dynamischere Stildefinition in SCSS erreichen und unterschiedliche CSS-Regeln basierend auf unterschiedlichen Bedingungen generieren, wodurch die Wartbarkeit und Skalierbarkeit des Stylesheets verbessert wird.
In SCSS gibt es drei Hauptschleifenkonstrukte, die zum Generieren wiederholter CSS-Regeln verwendet werden können: @for, @each und @while.
Die @for-Schleife wird verwendet, um Stile gemäß bestimmten Schritten und Bedingungen wiederholt zu generieren.
Grundgrammatik:
- @for $i from <start> through <end> {
- // 循环体
- }
Beispiel:
- @for $i from 1 through 3 {
- .item-#{$i} {
- width: 100px * $i;
- }
- }
Im obigen Beispiel werden drei Klassen .item-1, .item-2 und .item-3 generiert, wobei die Breiten auf 100 Pixel, 200 Pixel bzw. 300 Pixel eingestellt sind.
Die @each-Schleife wird verwendet, um Listen- oder Kartentypdaten zu durchlaufen und Stile für jedes Element zu generieren.
Grundgrammatik:
- @each $var in <list or map> {
- // 循环体
- }
Beispiel:
- $colors: (red, green, blue);
-
- @each $color in $colors {
- .text-#{$color} {
- color: $color;
- }
- }
In diesem Beispiel werden drei Klassen .text-red, .text-green und .text-blue generiert und ihre Textfarben auf entsprechende Farbwerte gesetzt.
Die @while-Schleife generiert wiederholt Stile basierend auf einer Bedingung, bis die Bedingung nicht erfüllt ist.
Grundgrammatik:
- $i: 1;
- @while $i < 4 {
- // 循环体
- $i: $i + 1; // 更新条件
- }
Beispiel:
- $i: 1;
- @while $i < 4 {
- .item-#{$i} {
- width: 100px * $i;
- }
- $i: $i + 1;
- }
Dieser Code generiert drei Klassen .item-1, .item-2 und .item-3 und legt ihre Breiten auf 100px, 200px bzw. 300px fest.
Die drei SCSS-Schleifenstrukturen @for, @each und @while werden verwendet, um eine Schleife nach Index durchzuführen, Listen- oder Kartentypdaten zu durchlaufen und Stile basierend auf bedingten Schleifen zu generieren. Diese Schleifenstrukturen machen SCSS leistungsfähiger und flexibler und können je nach Bedarf komplexe CSS-Regeln generieren.
In SCSS können Stylesheets mit benutzerdefinierten Funktionen erweitert werden, die Parameter akzeptieren und verarbeitete Werte zurückgeben.
Verwenden Sie in SCSS das Schlüsselwort @function, um Funktionen zu definieren, die Parameter und Rückgabewerte haben können. Beispielsweise definieren wir eine Funktion, um die Gesamtbreite des Boxmodells eines Elements zu berechnen:
- @function total-width($padding, $border, $margin, $content-width) {
- @return $padding + $border + $margin + $content-width;
- }
Im obigen Beispiel:
Sobald eine Funktion definiert ist, kann sie in Stilen verwendet werden, um die erforderlichen Werte zu berechnen und zu generieren. Zum Beispiel:
- .element {
- width: total-width(10px, 1px, 5px, 100px);
- }
In diesem Beispiel wird die Funktion „total-width“ mit den Parametern 10px, 1px, 5px und 100px aufgerufen. Das von der Funktion zurückgegebene Ergebnis (116px) wird auf die width-Eigenschaft von .element angewendet.
Verwenden Sie SCSS, um das Schwarz-Weiß-Thema der Seite zu wechseln
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');
- });