What does & mean in SCSS?

Guide til SCSS Operatorer: Fra & til +

20/08/2009

Rating: 4.95 (14300 votes)

SCSS (Sassy CSS) har revolutioneret den måde, udviklere skriver stylesheets på. Ved at introducere variabler, nesting, mixins og operatorer, omdanner SCSS CSS fra et simpelt styling-sprog til et dynamisk og programmerbart værktøj. En af de mest fundamentale, men ofte misforståede, aspekter af SCSS er dets brug af operatorer. Disse symboler giver os mulighed for at udføre alt fra simple matematiske beregninger til komplekse logiske sammenligninger direkte i vores stilark. At mestre disse operatorer, især det allestedsnærværende ampersand-symbol (&), er nøglen til at skrive mere effektiv, læsbar og vedligeholdelsesvenlig kode. Denne artikel vil fungere som din komplette guide til at forstå og anvende SCSS's mange operatorer.

What is the issue with the division operator in Sass?
Although it's not common practice, CSS allows the character to be used to separate numbers, so Sass must respect that and cannot use it as a division operator. Unfortunately, the requirement that Sass be compatible with CSS syntax complicates the algebraic operators in a couple of ways.
Indholdsfortegnelse

Den Magtfulde Ampersand (&): Mere End Bare et Symbol

Hvis du har kigget på SCSS-kode skrevet af andre, er du uden tvivl stødt på ampersand-symbolet (&). Det er et af de mest kraftfulde og tidsbesparende værktøjer i SCSS, men det kan også være en kilde til forvirring for nye brugere. Grundlæggende bruges '&' til at referere til den overordnede (parent) selector i en indlejret (nested) regel.

Forståelsen af Nesting og Selektor-Hierarki

For at forstå '&' fuldt ud, skal vi først have styr på forskellen mellem to grundlæggende CSS-selektorer. Overvej følgende to eksempler:

Eksempel 1: Med et mellemrum

.klasse1 .klasse2 { color: blue;}

Mellemrummet i CSS er en efterkommer-selektor (descendant selector). Denne regel vil matche ethvert element med klassen .klasse2, der er et barn, barnebarn eller et hvilket som helst andet efterkommer-element af et element med klassen .klasse1. HTML-strukturen ville se sådan ud:

<div class="klasse1"> <p> <span class="klasse2">Denne tekst er blå.</span> </p></div>

Eksempel 2: Uden et mellemrum

.klasse1.klasse2 { color: red;}

Uden et mellemrum kombineres de to klasser til en enkelt selektor. Denne regel vil kun matche et element, der har både klassen .klasse1 og klassen .klasse2 på samme tid. HTML-strukturen ville være:

<div class="klasse1 klasse2">Denne tekst er rød.</div>

Hvordan '&' Simplificerer Koden

Nu hvor vi forstår forskellen, lad os se, hvordan '&' passer ind. I SCSS giver '&' os mulighed for at bygge videre på den overordnede selektor uden at skulle gentage den. Det er især nyttigt til pseudo-klasser, pseudo-elementer eller når man bruger navngivningskonventioner som BEM (Block, Element, Modifier).

Uden '&':

.knap { background-color: #3498db;}.knap:hover { background-color: #2980b9;}.knap--advarsel { background-color: #e74c3c;}

Med '&':

.knap { background-color: #3498db; &:hover { background-color: #2980b9; } &--advarsel { background-color: #e74c3c; }}

I dette eksempel erstatter SCSS-kompilatoren '&' med .knap. Resultatet er, at &:hover bliver til .knap:hover, og &--advarsel bliver til .knap--advarsel. Dette gør koden mere organiseret og lettere at læse, da alle stilarter relateret til .knap er samlet ét sted. Dette princip om nesting er en hjørnesten i SCSS.

SCSS Operatorer: Fra Logik til Matematik

Udover det specielle '&'-symbol, understøtter SassScript en bred vifte af operatorer, der ligner dem, man finder i traditionelle programmeringssprog. Disse kan opdeles i flere kategorier.

Ligestillings- og Booleske Operatorer

Disse operatorer er essentielle, når du arbejder med kontrol-direktiver som @if. De returnerer altid en boolesk værdi (true eller false).

  • Ligestilling:== (lig med) og != (ikke lig med). Sass sammenligner både værdi og datatype. For eksempel er 10 == "10" falsk, fordi den ene er et tal og den anden en streng.
  • Boolesk logik:and, or, og not. Disse fungerer som forventet. true and false returnerer false, mens true or false returnerer true. not true returnerer false.
$tema: mørkt;$tekstfarve: if($tema == mørkt, white, black); // Bruger == til at sammenligne.body { color: $tekstfarve;}

Numeriske Operatorer: Regnestykket bag dit Design

SassScript kan udføre grundlæggende aritmetik, hvilket er utroligt nyttigt til at skabe responsive layouts, beregne proportioner og meget mere.

  • Addition (+):10px + 5px bliver til 15px.
  • Subtraktion (-):2em - 0.5em bliver til 1.5em.
  • Multiplikation (*):1.5 * 10px bliver til 15px.
  • Modulus (%):10 % 3 bliver til 1 (resten af divisionen).

Dog er der et par faldgruber, man skal være opmærksom på grundet Sass' krav om at være kompatibel med standard CSS-syntaks.

Udfordringen med Division (/)

I almindelig CSS kan skråstregen (/) bruges som en separator i værdier (f.eks. i font: 16px / 1.5 sans-serif;). For at undgå tvetydighed, vil Sass ikke altid udføre division. Hvis du skriver width: 100px / 2;, vil det blive kompileret direkte til width: 100px / 2; i din CSS, hvilket ikke er en gyldig beregning.

Does Sass support a special operator?
Sass supports a special = operator that’s only allowed in function arguments, which just creates an unquoted string with its two operands separated by =. This exists for backwards-compatibility with very old IE -only syntax.

Løsningen er at signalere til Sass, at du ønsker at udføre en matematisk operation. Dette kan gøres på flere måder:

  1. Brug parenteser: width: (100px / 2); vil korrekt blive til width: 50px;.
  2. Brug en variabel: $bredde: 100px; width: $bredde / 2; fungerer også.
  3. Inkluder divisionen i en større beregning: width: 5px + 100px / 2; vil blive beregnet korrekt.

Pas på med Subtraktion (-)

Minustegnet (-) kan betyde både subtraktion og negation. Sass bruger mellemrum til at skelne mellem dem. 5px - 2px (med mellemrum) er subtraktion. 5px-2px (uden mellemrum) er også subtraktion. Men 5px -2px (kun mellemrum før) fortolkes som en liste med to værdier: 5px og -2px. Vær konsekvent med din brug af mellemrum for at undgå fejl.

Tabel over Numeriske Operatorer

OperatorNavnEksempelResultatBemærkning
+Addition10px + 5px15pxSimpel og ligetil.
-Subtraktion20% - 5%15%Vær opmærksom på mellemrum for at undgå at skabe lister.
*Multiplikation2 * 1.2rem2.4remFungerer som forventet.
/Division(100% / 3)33.33333%Kræver ofte parenteser for at blive fortolket som matematik.
%Modulus10 % 42Nyttig i avancerede grid-systemer.

Strengoperatorer: Sammenkædning og Interpolation

Sass understøtter kun én operator for strenge: + til sammenkædning. For eksempel vil "Hej " + "Verden" resultere i strengen "Hej Verden". Sass er intelligent omkring anførselstegn; hvis den første streng er i anførselstegn, vil resultatet også være det.

En endnu mere kraftfuld funktion er interpolation, som bruger syntaksen #{}. Dette giver dig mulighed for at indsætte resultatet af et udtryk eller en variabel direkte i en streng.

$billede-sti: "/images/";$ikon-navn: "user-icon";.bruger-ikon { background-image: url("#{$billede-sti}#{$ikon-navn}.svg");}

Dette kompileres til:

.bruger-ikon { background-image: url("/images/user-icon.svg");}

Farveoperatorer

Du kan også udføre aritmetiske operationer på farver. Sass udfører operationen komponent-for-komponent (rød, grøn, blå). For eksempel vil #102030 + #010203 resultere i #112233 (fordi 10+1=11, 20+2=22, 30+3=33). Selvom dette er teknisk muligt, er det ofte mere praktisk og intuitivt at bruge Sass' indbyggede farvefunktioner som lighten(), darken() eller mix().

Ofte Stillede Spørgsmål (FAQ)

Hvad er den største fordel ved at bruge '&' i SCSS?

Den største fordel er forbedret læsbarhed og vedligeholdelse. Ved at gruppere relaterede selektorer (som hover-tilstande, modificeringsklasser og børne-elementer) under en enkelt forælder-selektor, afspejler din SCSS-kode den faktiske HTML-struktur og gør det nemmere at finde og redigere stilarter.

Hvorfor skal jeg bruge parenteser omkring division i SCSS?

Du skal bruge parenteser for at fjerne tvetydighed. Fordi / er en gyldig separator i standard CSS, antager Sass som udgangspunkt, at det er en separator og ikke en matematisk operator. Parenteser, eller brug af variabler, tvinger Sass til at fortolke det som en division og udføre beregningen.

Hvad er forskellen på '+' for tal og strenge?

Operatoren + er kontekstafhængig. Hvis begge operander er tal (med kompatible enheder), udfører den addition (f.eks. 10px + 5px). Hvis en eller begge operander er strenge, udfører den sammenkædning (f.eks. font-family: sans + "-serif" bliver til sans-serif).

Konklusion

Operatorer i SCSS er langt mere end blot syntaktisk sukker. De er fundamentale værktøjer, der muliggør dynamisk, logisk og vedligeholdelsesvenlig stylesheet-udvikling. Fra den elegante enkelhed i '&'-symbolet, der rydder op i din selektor-struktur, til den matematiske kraft i de numeriske operatorer, der muliggør komplekse beregninger, giver en dyb forståelse af disse værktøjer dig mulighed for at skrive kode, der ikke kun er funktionel, men også skalerbar og let at arbejde med for dig selv og dit team. Ved at mestre disse koncepter kan du udnytte det fulde potentiale af SCSS og løfte kvaliteten af din frontend-kode markant.

Hvis du vil læse andre artikler, der ligner Guide til SCSS Operatorer: Fra & til +, kan du besøge kategorien Sundhed.

Go up