Über die Verwendung von benutzerdefinierten CSS3-Variablen in Projekten aus einer Projektrekonstruktion sprechen

Über die Verwendung von benutzerdefinierten CSS3-Variablen in Projekten aus einer Projektrekonstruktion sprechen

Informationen zu CSS3-Variablen

Fügen Sie beim Deklarieren einer Variablen vor dem Variablennamen zwei Bindestriche ( -- ) hinzu.

Körper{
    --Farbe: rot;
}

Im obigen Code wird im Body-Selektor eine benutzerdefinierte Variable deklariert: --color .

Es unterscheidet sich in keiner Weise von formalen Attributen wie etwa der Farbe, außer dass es keine Standardbedeutung hat. Deshalb werden CSS-Variablen auch als „benutzerdefinierte CSS-Eigenschaften“ bezeichnet – denn Variablen und benutzerdefinierte CSS-Eigenschaften sind eigentlich dasselbe.
Darüber hinaus können alle möglichen Werte in CSS-Variablen „eingefügt“ werden und CSS-Variablen können „überall“ platziert werden .

Natürlich gibt es im Internet eine Menge ähnlicher Einführungen, also lassen wir das jetzt einmal beiseite und kommen wir zur Sache!

Einige grundlegende Anwendungen, wie z. B. globale universelle Farb-/Größenwerte, Webseiten-Skins usw., werden in diesem Artikel jedoch nicht behandelt. Sie können diese selbst erkunden.


Ursache - Refactoring von „Tabs“

Ich erinnere mich, dass es in einem Projekt, das ich für eine Community-Website erstellt habe, eine „Tab“-Komponente für Werbung gab:

Zeige1

<div Klasse="main-left-bottoms">
    <div id="Tabulatoren">
        <ul>
            <li class="on"><a name="anchor">Clubaktivitäten</a></li>
            <li>Gemeinschaftsrichtung</li>
            <li>Botschaft des Präsidenten</li>
            <li>Talentstrategie</li>
        </ul>
        <div>
            <p>Seit seiner Gründung hat der YouC Club zahlreiche Aktivitäten durchgeführt, um das außerschulische Leben der Clubmitglieder zu bereichern und das Ziel zu erreichen, Arbeit und Freizeit zu verbinden. Die Fakten haben bewiesen, dass dies tatsächlich effektiv ist. <br>
                Zum Beispiel,
            <ol>
                <li>Am Muttertag veranstalteten wir <a href="http://www.50004.com/play52/fabebbfffcfa/XMzYwMzUwNjM4MA==/">
                    Veranstaltung „Kindespflicht·Muttertag“</a> (das Laden des Videos kann etwas langsam sein) und war ein großer Erfolg;</li>
                <li>Während der Wintersonnenwende veranstalteten wir mit der Schule und den Wohnheimen eine <a href="http://sfxy.nyist.edu.cn/info/1068/3802.htm">Aktivität „Knödel zur Wintersonnenwende backen“. Alle hatten großen Spaß.</li>
                <li>In unserer Freizeit nahmen wir auch aktiv an der vom Krankenhaus organisierten Aktivität <a href="https://max.book118.com/html/2018/0513/166191393.shtm">„Besuch im Pflegeheim“ teil und hatten eine tolle Erfahrung;</li>
            </ol>
        </div>
        <div Klasse="ausblenden">
            <p>YouC Studio wurde 2009 gegründet und blickt auf eine <span id="fffffyear"></span>-jährige Geschichte zurück. <br>&nbsp;&nbsp;Nach diesen Jahren der Entwicklung hat die Community Talente in verschiedenen Bereichen hervorgebracht, darunter PHP, Java, JavaWeb,
                Big Data und so weiter. . . <font color="red">Die aktuelle Mainstream-Lernrichtung dieses Clubs ist JavaWeb, also die Back-End-Implementierung, die eher auf die Website-Entwicklung ausgerichtet ist. </font> <br>&nbsp;&nbsp;Die Community rundet die Entwicklung eines Projektes häufig durch entsprechende Austauschaktivitäten ab.
                Um ihr Wissen zu erweitern, nehmen die Mitglieder gelegentlich an Wettbewerben teil und erzielen dabei gute Ergebnisse. <br><br>
                <font color="#ff7f50">Für spezifische persönliche Pläne scannen Sie bitte den QR-Code auf der rechten Seite, um Senioren zu fragen! </font></p>
        </div>
        <Skript>
            document.getElementById('fffffyear').innerHTML = (new Date().getFullYear() - 2009) + '';
        </Skript>
        <div Klasse="ausblenden">
            <br><br>
            <p>Auch wenn ständig Leute hinzukommen und gehen, ist YouC immer noch da und wartet auf Sie, und ich bin fest davon überzeugt, dass die Zukunft von YouC noch besser sein wird! </p> <p>——Wunsch des Präsidenten</p>
        </div>
        <div Klasse="ausblenden">
            <br>
            <p>Machen Sie mit, machen Sie mit bei YouC. Hier können Sie ein wunderbares Wissenserlebnis haben. Senioren mit großer Vorstellungskraft werden Sie dazu anleiten, Wissen zu erforschen, Fähigkeiten zu erlernen, praktische Projekte durchzuführen und sich auf Vorstellungsgespräche vorzubereiten. </font><br>
                Hier können Sie ein Glück finden, das Ihre Vorstellungskraft übersteigt! ! ! </p>
        </div>
    </div>
</div>
.main-left-bottoms{Breite: 100%;Mindesthöhe: 280px;Top-Rand: 10px;}
.main-left-bottoms h1{Farbe: orangerot;Schriftart: kursiv;}
.main-left-bottoms #tabs{width: 99%;padding:5px;min-height: 280px;}
.main-left-bottoms #tabs ul{list-style:none;display:block;min-height:30px;line-height:30px;border-bottom:2px rot durchgezogen;}
.main-left-bottoms #tabs ul li{cursor:pointer;float:left;list-style:none;height:28px;line-height:28px;margin:0 3px;border:2px groove orangered;border-bottom:none;display:inline-block;width:65px;text-align:center;font-weight: bold;color: black;padding: 0 10px;}
.main-left-bottoms #tabs ul li.on{border-bottom:2px solid skyblue;}
.main-left-bottoms #tabs div{min-height: 199px;line-height:25px;border-top:none;padding:0.3125em;overflow:hidden;}
#tabs div p{Schriftgröße: 0,838rem;}
#tabs div ol li{font-size: 0.875rem;margin-top: 5px;}
#tabs div ol li a{Farbe: Hellkoralle;Textdekoration: keine;}
#tabs div ol li a:hover{color: orange;}
.main-left-bottoms .hide{display:none;}

Verwenden Sie dann JS, um den Klassennamen „hide“ zu den (auf derselben Ebene liegenden) Elementen außerhalb des Div-Click-Elements hinzuzufügen. Das ist ganz einfach.

Später, als ich mehr lernte und der „Benutzererfahrung“ immer mehr Aufmerksamkeit schenkte, dachte ich: Was wäre, wenn sich der Browser „merken“ könnte, wo der Benutzer vor dem Beenden gesurft hat, sei es eine Seite, ein Tab oder eine Liste? Das wäre großartig.
Daher habe ich versucht, mithilfe von Ajax die Statusliste des Browsers zu unterstützen und den Umschalt- und Speichereffekt auf der gesamten Seite zu erzielen (hier klicken). Dies ist zwar eine gute Methode, aber nachdem ich nach und nach die CSS-Artikelserie gestartet hatte, wurde ich „gieriger“: Kann ich diesen Effekt ohne JavaScript erzielen? -- ::Ziel !

(Ich werde später einen speziellen Artikel veröffentlichen, um dies zu besprechen. Es würde den Rahmen sprengen, es hier zu erwähnen ...)


Später führte CSS3 das Attribut „benutzerdefinierte Variable“ ein. Es kam vor, dass die offizielle Website-Seite mit Vue neu erstellt wurde, also dachte ich darüber nach, CSS3-Variablen zu verwenden, um diesen Teil neu zu gestalten:

CSS3-Variablen zum Erzielen eines Tab-Wechsels

anzeigen2

Der scheinbar reibungslose Tab-Umschalteffekt oben ist eigentlich sehr einfach (erledigt mit vue+scss):
Sie sollten wissen: Es gibt 3 APIs in JS für Style-Operation-Variablen

  • Variablen lesen: elem.style.getPropertyValue()
  • Variablen festlegen: elem.style.setProperty()
  • Eine Variable entfernen: elem.style.removeProperty()
<div Klasse="Tab-Navigationsleiste">
    <Navigation>
        <a v-for="(v, i) in list" :key="v" :class="{ active: index === i }" @click="select(i)">Titel{{i + 1}}</a>
    </nav>
    <div>
        <ul ref="tabs" :style="`--tab-count: ${list.length}`">
            <li v-for="(v, i) in list" :key="v" :style="`--bg-color: ${v}`">Ich bin der Inhalt {{i + 1}}</li>
        </ul>
    </div>
</div>
.tab-navbar {
    Anzeige: Flex;
    Überlauf: versteckt;
    Rahmenradius: 10px;
    Breite: 300px;
    Höhe: 200px;
    Navigation {
        Anzeige: Flex;
        Höhe: 40px;
        Hintergrundfarbe: #f0f0f0;
        Zeilenhöhe: 40px;
        Textausrichtung: zentriert;
        A {
            biegen: 1;
            Cursor: Zeiger;
            Übergang: alle 300ms;
            &.aktiv {
                Hintergrundfarbe: #3c9;
                Farbe: #fff;
            }
        }
    }
    div {
        biegen: 1;
        ul {
            --tab-index: 0;
            --tab-width: berechnet (var (--tab-count) * 100 %);
            --tab-move: berechnen(var(--tab-index) / var(--tab-count) * -100%);
            Anzeige: Flex;
            Flex-Wrap: Nowrap;
            Breite: var(--tab-width);
            Höhe: 100%;
            transformieren: übersetzen3d(var(--tab-move), 0, 0);
            Übergang: alle 300ms;
        }
        li {
            Anzeige: Flex;
            Inhalt ausrichten: zentriert;
            Elemente ausrichten: zentrieren;
            biegen: 1;
            Hintergrundfarbe: var(--bg-color);
            Schriftstärke: fett;
            Schriftgröße: 20px;
            Farbe: #fff;
        }
    }
}

Definieren Sie --tab-index auf <ul> , um den aktuellen Index der Registerkarte anzugeben. Wenn auf die Schaltfläche geklickt wird, wird der Wert von --tab-index zurückgesetzt, sodass die angegebene Registerkarte angezeigt werden kann, ohne die Position von <ul> im DOM zu verschieben. Der Grund, warum <ul> verschoben werden kann, ohne dass DOM ausgeführt wird, liegt darin, dass --tab-move definiert ist. Die Beziehung zwischen --tab-index und --tab-move wird durch calc() berechnet, wodurch transform:translate3d() manipuliert wird, um <ul> zu verschieben.

Standard exportieren {
    Daten() {
        zurückkehren {
            Index: 0,
            Liste: ["#09f", "#f90", "#66f", "#f66"]
        };
    },
    Methoden: {
        auswählen(i) {
            dies.index = i;
            dies.$refs.tabs.style.setProperty("--tab-index", i);
        }
    }
};

Darüber hinaus ist die Definition --bg-color auf <li> zur Darstellung der Hintergrundfarbe des Tabs auch eine relativ prägnante Art der Vorlagenzuweisung, die immer besser aussieht, als <li :style="backgroundColor:${color}"> zu schreiben – wenn mehrere Attribute von einer Variablenzuweisung abhängen, ist es bequemer, die Variable für die Zuweisung zum Stil zu verwenden. Diese Attribute können in der CSS-Datei berechnet und zugewiesen werden, was JS dabei helfen kann, einige Attributberechnungsarbeiten zu teilen und die Rendering-Leistung erheblich zu verbessern.


Ich denke, der obige Fall wird Sie definitiv nicht zufriedenstellen, daher:

Benutzerdefinierte CSS3-Variablen zum Erstellen eines „alternativen“ Ladebalkens

anzeigen3

<ul Klasse="Streifen wird geladen">
	<li style="--line-index: 0"></li>
	<li style="--line-index: 1"></li>
	<li style="--line-index: 2"></li>
	<li style="--line-index: 3"></li>
	<li style="--line-index: 4"></li>
	<li style="--line-index: 5"></li>
</ul>

.strip-laden {
    Anzeige: Flex;
    Inhalt ausrichten: zentriert;
    Elemente ausrichten: zentrieren;
    Breite: 200px;
    Höhe: 200px;
    li {
        --Zeit: berechnet (var (--line-index) * 200 ms);
        Rahmenradius: 3px;
        Breite: 6px;
        Höhe: 30px;
        Hintergrundfarbe: #f66;
        Animation: Takt 1,5 s, Ein- und Ausschwingen, var(--time) unendlich;
        & + li {
            Rand links: 5px;
        }
    }
}
@keyframes schlagen {
    0%,
    100 % {
        transformieren: scaleY(1);
    }
    50 % {
        transformieren: scaleY(.5);
    }
}

Die Berechnungsfunktion var() wird mit benutzerdefinierten Variablen als Verzögerung der Animation verwendet, sodass jedes Element seine „eigene“ Verzögerungszeit hat – CSS3-Variablen vereinfachen die Code-Redundanz, die durch :nth-child(N) im vorherigen CSS verursacht wurde, erheblich.


Coole Maus-Tracking-Effekte

Zufällig schlug ein Senior aus dem Backend einer Community vor, einen coolen Button zu erstellen, um den ursprünglichen „Senden“-Button zu ersetzen, bevor ich diesen Artikel schrieb:

niedrig

Die Auswirkung nach der Änderung dürfte folgende sein:

anzeigen4

Eigentlich wurde für die Hintergrundfarbe der „ersten Version“ linearer Farbverlauf+Animation+Farbton-Rotation verwendet, aber der Vorgesetzte meinte, das sei zu ausgefallen … Hehe, das kannst du versuchen.

Tatsächlich ist die Idee relativ einfach. Zuerst legen Sie die Schaltflächen fest und färben sie ein, verwenden dann Pseudoelemente, um die Position der Maus zu markieren, definieren --x und --y , um die Koordinaten der Pseudoelemente in der Schaltfläche darzustellen, verwenden JS, um den offsetX und offsetY der Maus auf der Schaltfläche abzurufen und weisen sie jeweils --x und --y zu, und fügen dann dem Pseudoelement eine radial verlaufende Hintergrundfarbe hinzu, und fertig. Ein cooler Mouseover-Tracking-Effekt wird erstellt.

<button Klasse="track-btn">
	<span>Junger Mann, klick mich an und ich werde dir Kraft geben</span>
</button>
.track-btn {
	Rand: 0;
	Polsterung: 0;
	/*Benutzerdefinierter Rahmen*/
	Rand: 0;
	/*Beseitigt den standardmäßigen blauen Rahmeneffekt beim Klicken*/
	Gliederung: keine;
	-webkit-auftritt: keines;
	Überlauf: versteckt;
	Position: relativ;
	Rahmenradius: 25px;
	Höhe: 49,9px;
	Hintergrundfarbe: #66f;
	Cursor: Zeiger;
	Zeilenhöhe: 50px;
	Textausrichtung: zentriert;
	Schriftstärke: fett;
	Schriftgröße: 18px;
	Farbe: #fff;
	Polsterung: 0 20px;
	Spanne {
		Position: relativ;
		Zeigerereignisse: keine;
	}
	&::vor {
		--Größe: 0;
		Position: absolut;
		links: var(--x);
		oben: var(--y);
		Breite: var(--size);
		Höhe: var(--size);
		Hintergrundbild: radialer Farbverlauf (Kreis, der der nächsten Seite zugewandt ist, Nr. 09f, transparent);
		Inhalt: "";
		transformieren: übersetzen3d(-50 %, -50 %, 0);
		Übergang: Breite 200 ms mühelos, Höhe 200 ms mühelos;
	}
	&:hover::vor {
		--Größe: 200px;
	}
}
const btn = document.getElementsByClassName("track-btn")[0];

btn.addEventListener("Mausbewegung", e => {
	btn.style.setProperty("--x", `${e.offsetX}px`);
	btn.style.setProperty("--y", `${e.offsetY}px`);
});

Darüber hinaus können Sie noch mehr tolle Animationen hinzufügen!


Realität & Perspektiven

Wie bereits erwähnt: Sie können CSS3-Variablen überall platzieren – tatsächlich kann sogar das „weniger bekannte“ ::root als „reines Land“ verwendet werden, um Variablen separat zu speichern.

//Referenzieren/ändern Sie den CSS3-Variablenwert im Stil document.documentElement.style.setProperty("name", value)

Beachten Sie, dass es derzeit empfohlen wird, benutzerdefinierte Variablen in dasselbe „Ziel“ einzufügen, wenn Sie sie in CSS ändern möchten. Zum Beispiel:

#eckig {
	--eckig: "";
}
#angular:geprüft {
	 --angular: "eckig";
}

Die meisten Websites definieren heute Standardabstände zwischen Elementen in einem Layout sowie Standardpolster, Schriftgrößen und sogar Typografielayouts für alle verschiedenen Abschnitte der Seite basierend auf der Seitenreaktionsfähigkeit. Oftmals können wir jedoch nur zwischen verschiedenen „externen Link-CSS-Dateien“ wechseln oder alle entsprechenden Eigenschaftswerte in einem kleinen Bereich ändern. Dies führt jedoch zu einem Problem: Vor dem Erreichen des „nächsten medienkritischen Werts“ treten immer einige „zufällige“ Abstände auf, z. B.: Innerhalb eines bestimmten Bereichs von document.documentElement.clientWidth || document.body.clientWidth; ist der Abstand zwischen den Elementen groß, auf kleineren Bildschirmen reicht der Platz jedoch nicht aus, um zu viel Leerraum unterzubringen, und davor oder danach ändert sich der Abstand „plötzlich“.

:Wurzel { 
	--Größe: 1,5em; 
} 
@media (Mindestbreite: 30em) { 
	:Wurzel { 
		--Größe: 2em; 
	} 
} 
.Container {
	Rand: 0 automatisch; 
	maximale Breite: 60em; 
	Schriftgröße: var(--size); 
}

Wir können auch auf die Änderungen der Seitengröße in js hören, um den Wert von --size in Echtzeit zu ändern. Je mehr Variablen vorhanden sind, desto mehr Code kann gespart werden. —— In der Vergangenheit konnte dies nur durch die Einführung der scss/less-Bibliothek erreicht werden.

Benutzerdefinierte Eigenschaften füllen die Lücke in SCSS/LESS, wo Präprozessorvariablen in manchen Szenarien nicht richtig verwendet werden können. Unabhängig davon, ob es sich um Kompatibilitäts- oder aktuelle Entwicklungsperspektiven handelt, ist die Verwendung von Präprozessorvariablen in vielen Fällen immer noch die elegantere Wahl. Es ist wahrscheinlich, dass viele Websites noch einige Zeit lang eine Kombination aus beidem verwenden werden: benutzerdefinierte Eigenschaften für dynamische Designs und Präprozessorvariablen für statische Vorlagen.

Damit ist dieser Artikel über die Verwendung von benutzerdefinierten CSS3-Variablen in einem Projekt abgeschlossen, das mit einer Projektrekonstruktion beginnt. Weitere Informationen zur Verwendung von benutzerdefinierten CSS3-Variablen in Projekten finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

<<:  Einführung in den Installationsprozess von MySQL 8.0 in einer Linux-Umgebung

>>:  Lösung für das Problem der verstümmelten Webseiten, wenn die Kodierung auf UTF-8 eingestellt ist

Artikel empfehlen

MySQL-Batch löschen großer Datenmengen

MySQL-Batch löschen großer Datenmengen Angenommen...

Zusammenfassung der Situationen, in denen MySQL-Indizes nicht verwendet werden

Indextypen in MySQL Im Allgemeinen können sie in ...

Vue basierend auf einer Element-Button-Berechtigungsimplementierungslösung

Hintergrundanforderungen: Das ERP-System muss ein...

CUDA8.0 und CUDA9.0 koexistieren unter Ubuntu16.04

Vorwort Einige der früheren Codes auf Github erfo...

Vue+echarts realisiert gestapelte Balkendiagramme

In diesem Artikel wird der spezifische Code von V...

Docker verwendet Nextcloud, um eine private Baidu-Cloud-Festplatte zu erstellen

Plötzlich musste ich einen privaten Dienst für di...

Lösung zum Vergessen des MySQL-Datenbankkennworts unter MAC

Schnelle Lösung zum Vergessen des MySQL-Datenbank...

Detaillierte Erklärung eines einfachen Schneeeffektbeispiels mit JS

Inhaltsverzeichnis Vorwort Hauptimplementierungsc...

JavaScript-Implementierung eines Karussellbeispiels

In diesem Artikel wird der spezifische Code für J...

HTML+CSS+JavaScript zum Erstellen eines einfachen Tic-Tac-Toe-Spiels

Inhaltsverzeichnis Implementieren von HTML CSS hi...

JavaScript-Beispielcode zum Ermitteln, ob eine Datei vorhanden ist

1. Geschäftsszenario Ich habe kürzlich Entwicklun...