Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés:
Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.
Figyelmeztetés
A ASP.NET Core ezen verziója már nem támogatott. További információt a .NET és a .NET Core támogatási szabályzatában talál. A jelen cikk .NET 9-es verzióját lásd az aktuális kiadásért .
Ez a cikk azt ismerteti, hogy a CSS elkülönítése hogyan terjed ki a CSS-nek az összetevőkre Razor , ami leegyszerűsítheti a CSS-t, és elkerülheti a más összetevőkkel vagy kódtárakkal való ütközéseket.
A CSS-stílusok elkülönítése az egyes lapokra, nézetekre és összetevőkre a csökkentés vagy az elkerülése érdekében:
- A globális stílusokkal kapcsolatos függőségek, amelyek fenntartása nehézkes lehet.
- Stílusütközések beágyazott tartalomban.
CSS-elkülönítés engedélyezése
Az összetevő-specifikus stílusok meghatározásához hozzon létre egy .razor.css olyan fájlt, amely megegyezik az adott mappában található összetevő fájljának nevével .razor . A .razor.css fájl hatókörrel rendelkező CSS-fájl.
A Example komponens számára az Example.razor fájlban hozzon létre egy fájlt, amely a Example.razor.css fájl mellett található. A Example.razor.css fájlnak ugyanabban a mappában kell lennie, mint az Example összetevőnek (Example.razor). A fájl "Example" alapneve nem érzékeny a kis- és nagybetűkre.
Example.razor:
@page "/example"
<h1>Scoped CSS Example</h1>
Example.razor.css:
h1 {
color: brown;
font-family: Tahoma, Geneva, Verdana, sans-serif;
}
A megadott Example.razor.css stílusok csak az összetevő renderelt kimenetére Example lesznek alkalmazva. A CSS-elkülönítés a megfelelő Razor fájl HTML-elemeire lesz alkalmazva. Az h1 alkalmazásban máshol definiált CSS-deklarációk nem ütköznek az Example összetevő stílusaival.
Megjegyzés:
A stíluselkülönítés garantálása érdekében a Razor kódblokkokban a CSS importálása nem támogatott.
CSS-elkülönítési csomagolás
A CSS elkülönítése a létrehozáskor történik.
Blazor újraírja a CSS-választókat, hogy megfeleljenek az összetevő által megjelenített jelölésnek. Az újraírt CSS-stílusok kötegelve vannak, és statikus objektumként jönnek létre. A stíluslapra a <head> címke hivatkozik (a <head> tartalom helye). A program a következő <link> elemet adja hozzá a projektsablonokból létrehozott alkalmazáshoz Blazor :
Blazor Web App:
<link href="@Assets["{PACKAGE ID/ASSEMBLY NAME}.styles.css"]" rel="stylesheet">
Különálló Blazor WebAssembly alkalmazások:
<link href="{PACKAGE ID/ASSEMBLY NAME}.styles.css" rel="stylesheet">
<link href="{PACKAGE ID/ASSEMBLY NAME}.styles.css" rel="stylesheet">
A {PACKAGE ID/ASSEMBLY NAME} helyőrző a projekt csomagazonosítója (<PackageId> a projektfájlban) egy alkalmazás kódtárának vagy szerelvénynevének.
Az alábbi példa egy üzemeltetett Blazor WebAssemblyClient alkalmazásból származik. Az alkalmazás szerelvényének neve BlazorSample.Client, és a projektsablon a <link> használatával hozzáadja a Blazor WebAssembly projekthez, amikor a Hostolt beállítással jön létre (-ho|--hosted opció használatával a .NET CLI-ben vagy az ASP.NET Core Hosted jelölőnégyzet segítségével a Visual Studioban):
<link href="BlazorSample.Client.styles.css" rel="stylesheet">
A csomagban lévő fájlban minden összetevő egy hatókör-azonosítóhoz van társítva. Minden stílusösszetevőhöz hozzáfűz egy HTML-attribútumot a formátummal b-{STRING}, ahol a {STRING} helyőrző egy tíz karakterből álló sztring, amelyet a keretrendszer hoz létre. Az azonosító minden alkalmazáshoz egyedi. A renderelt Counter összetevőben Blazor hozzáfűz egy hatókör-azonosítót az h1 elemhez:
<h1 b-3xxtam6d07>
A {PACKAGE ID/ASSEMBLY NAME}.styles.css fájl a hatókör azonosítójával csoportosít egy stílusdeklarációt annak összetevőjével. Az alábbi példa az előző elem stílusát <h1> ismerteti:
/* /Components/Pages/Counter.razor.rz.scp.css */
h1[b-3xxtam6d07] {
color: brown;
}
A létrehozáskor létrejön egy projektcsomag a konvencióval obj/{CONFIGURATION}/{TARGET FRAMEWORK}/scopedcss/projectbundle/{PACKAGE ID/ASSEMBLY NAME}.bundle.scp.css, ahol a helyőrzők a következők:
-
{CONFIGURATION}: Az alkalmazás buildkonfigurációja (példáulDebug,Release). -
{TARGET FRAMEWORK}: A cél keretrendszer (példáulnet6.0). -
{PACKAGE ID/ASSEMBLY NAME}: A projekt csomagazonosítója (<PackageId>a projektfájlban) egy alkalmazás kódtárának vagy szerelvénynevének (példáulBlazorSample).
Gyermekkomponens támogatás
A CSS-elkülönítés csak a formátumhoz {COMPONENT NAME}.razor.csstársított összetevőre vonatkozik, ahol a {COMPONENT NAME} helyőrző általában az összetevő neve. Ha módosításokat szeretne alkalmazni egy gyermekösszetevőre, használja a ::deeppszeudoelemet a szülőösszetevő fájljának bármely leszármazott elemére .razor.css . A ::deep pszeudoelem kiválasztja azokat az elemeket, amelyek egy elem létrehozott hatókör-azonosítójának leszármazottai .
Az alábbi példa egy Parent nevű szülőösszetevőt mutat be, amelyhez tartozik egy Child nevű gyermekösszetevő.
Parent.razor:
@page "/parent"
<div>
<h1>Parent component</h1>
<Child />
</div>
Child.razor:
<h1>Child Component</h1>
Frissítse a h1 deklarációt Parent.razor.css a ::deep pszeudoelemhez, hogy jelezze, a h1 stílusdeklarációnak vonatkoznia kell a szülőkomponensre és annak gyermekeire.
Parent.razor.css:
::deep h1 {
color: red;
}
A h1 stílus mostantól a Parent és Child komponensekhez vonatkozik, anélkül hogy külön hatókörű CSS-fájlt kellene létrehozni a gyermekkomponens számára.
A ::deep pszeudoelem csak a leszármazott elemekkel működik. Az alábbi jelölés a stílusokat az h1 összetevőkre a várt módon alkalmazza. A szülőösszetevő hatókörazonosítója az elemre div lesz alkalmazva, így a böngésző tudja, hogy a szülőösszetevő stílusokat örököl.
Parent.razor:
<div>
<h1>Parent</h1>
<Child />
</div>
Az elem kizárása div azonban eltávolítja a leszármazotti kapcsolatot. Az alábbi példában a stílus nem kerül alkalmazásra a gyermek komponensre.
Parent.razor:
<h1>Parent</h1>
<Child />
A ::deep pszeudoelem hatással van arra, hogy a hatókör attribútum hol van alkalmazva a szabályra. Ha CSS-szabályt határoz meg egy hatókörrel rendelkező CSS-fájlban, a hatókör a megfelelő legtöbb elemre lesz alkalmazva. Például: a div > a átalakul div > a[b-{STRING}] formára, ahol a {STRING} helyőrző egy tíz karakteres sztring, amelyet a keretrendszer hoz létre (például b-3xxtam6d07). Ha ehelyett azt szeretné, hogy a szabály egy másik választóra vonatkozzanak, a ::deep pszeudoelem ezt lehetővé teszi. Például div ::deep > a át lesz alakítva div[b-{STRING}] > a (például div[b-3xxtam6d07] > a).
A pszeudoelem bármely HTML-elemhez való csatolásával ::deep olyan hatókörű CSS-stílusokat hozhat létre, amelyek hatással vannak a más összetevők által renderelt elemekre, ha meg tudja határozni a renderelt HTML-címkék szerkezetét. Egy olyan összetevő esetében, amely egy hivatkozáscímkét (<a>) jelenít meg egy másik összetevőben, győződjön meg arról, hogy az összetevő egy div (vagy bármely más elembe) van csomagolva, és a szabály ::deep > a használatával hozzon létre egy stílust, amely csak az adott összetevőre vonatkozik, amikor a szülőösszetevő renderel.
Fontos
A hatókörrel rendelkező CSS csak a HTML-elemekre vonatkozik, az összetevőkre Razor és a címkesegítőkre nem, beleértve a címkesegítővel rendelkező elemeket is, például <input asp-for="..." />.
CSS-előfeldolgozó támogatása
A CSS-előfeldolgozók olyan funkciók használatával fejlesztik a CSS-fejlesztést, mint a változók, a beágyazás, a modulok, a mixins és az öröklés. Bár a CSS-elkülönítés natív módon nem támogatja a CSS-előfeldolgozókat( például Sass vagy Less), a CSS-előfeldolgozók integrálása zökkenőmentes, amíg az előfeldolgozó összeállítása megtörténik, mielőtt Blazor újraírja a CSS-választókat a buildelési folyamat során. A Visual Studio használatával, például konfigurálja a meglévő előprocesszor-fordítást a Build előtti feladatként a Visual Studio Feladatfuttató Böngészőjében.
Számos külső NuGet-csomag, például a AspNetCore.SassCompiler, képes SASS/SCSS-fájlokat lefordítani a buildelési folyamat elején, még a CSS elkülönítése előtt.
CSS-elkülönítés konfigurálása
A CSS-elkülönítés úgy lett kialakítva, hogy a beépített megoldáson kívül működjön, de konfigurációt biztosít bizonyos speciális forgatókönyvekhez, például ha függőségek vannak a meglévő eszközöktől vagy munkafolyamatoktól.
Hatókörazonosító formátumának testreszabása
A hatókör-azonosítók a formátumot b-{STRING}használják, ahol a {STRING} helyőrző a keretrendszer által létrehozott tíz karakteres sztring. A hatókörazonosító formátumának testreszabásához frissítse a projektfájlt egy kívánt mintára:
<ItemGroup>
<None Update="Components/Pages/Example.razor.css" CssScope="custom-scope-identifier" />
</ItemGroup>
Az előző példában a Example.razor.css számára generált CSS a tartományazonosítót b-{STRING}-ről custom-scope-identifier-re módosítja.
Hatókörazonosítók használatával érje el az öröklést hatókörrel rendelkező CSS-fájlokkal. A következő projektfájl-példában egy BaseComponent.razor.css fájl az összetevők gyakori stílusait tartalmazza. Egy DerivedComponent.razor.css fájl örökli ezeket a stílusokat.
<ItemGroup>
<None Update="Components/Pages/BaseComponent.razor.css" CssScope="custom-scope-identifier" />
<None Update="Components/Pages/DerivedComponent.razor.css" CssScope="custom-scope-identifier" />
</ItemGroup>
A helyettesítő karakter (*) operátorral több fájlban oszthat meg hatókör-azonosítókat:
<ItemGroup>
<None Update="Components/Pages/*.razor.css" CssScope="custom-scope-identifier" />
</ItemGroup>
A hatókör-azonosítók a formátumot b-{STRING}használják, ahol a {STRING} helyőrző a keretrendszer által létrehozott tíz karakteres sztring. A hatókörazonosító formátumának testreszabásához frissítse a projektfájlt egy kívánt mintára:
<ItemGroup>
<None Update="Pages/Example.razor.css" CssScope="custom-scope-identifier" />
</ItemGroup>
Az előző példában a Example.razor.css számára generált CSS a tartományazonosítót b-{STRING}-ről custom-scope-identifier-re módosítja.
Hatókörazonosítók használatával érje el az öröklést hatókörrel rendelkező CSS-fájlokkal. A következő projektfájl-példában egy BaseComponent.razor.css fájl az összetevők gyakori stílusait tartalmazza. Egy DerivedComponent.razor.css fájl örökli ezeket a stílusokat.
<ItemGroup>
<None Update="Pages/BaseComponent.razor.css" CssScope="custom-scope-identifier" />
<None Update="Pages/DerivedComponent.razor.css" CssScope="custom-scope-identifier" />
</ItemGroup>
A helyettesítő karakter (*) operátorral több fájlban oszthat meg hatókör-azonosítókat:
<ItemGroup>
<None Update="Pages/*.razor.css" CssScope="custom-scope-identifier" />
</ItemGroup>
Statikus webes objektumok alapútvonalának módosítása
A scoped.styles.css fájl az alkalmazás gyökerénél jön létre. A projektfájlban a <StaticWebAssetBasePath> tulajdonság használatával módosítsa az alapértelmezett elérési utat. Az alábbi példa a scoped.styles.css fájlt és az alkalmazás többi objektumát az _content elérési útra helyezi:
<PropertyGroup>
<StaticWebAssetBasePath>_content/$(PackageId)</StaticWebAssetBasePath>
</PropertyGroup>
Automatikus kötegelés letiltása
Ha le szeretné tiltani a Blazor hatókörben lévő fájlok futásidőben történő közzétételének és betöltésének módját, használja a tulajdonságot DisableScopedCssBundling . Ha ezt a tulajdonságot használja, az azt jelenti, hogy más eszközök vagy folyamatok felelősek az izolált CSS-fájlok címtárból való levételéért obj , valamint a futtatókörnyezetben való közzétételükért és betöltésükért:
<PropertyGroup>
<DisableScopedCssBundling>true</DisableScopedCssBundling>
</PropertyGroup>
CSS-elkülönítés letiltása
Kapcsolja ki a CSS elkülönítést egy projekthez úgy, hogy a projektfájlban az alkalmazás <ScopedCssEnabled> tulajdonságát false értékre állítja.
<ScopedCssEnabled>false</ScopedCssEnabled>
Razor osztálykódtár (RCL) támogatása
A NuGet-csomagban vagy Razor osztálytárban (RCL) lévő összetevők izolált stílusai automatikusan össze vannak csomagolva:
Az alkalmazás CSS-importálással hivatkozik az RCL csomagolt stílusára. Egy elnevezett
ClassLibosztálytár és egy Blazor stíluslaplal rendelkezőBlazorSample.styles.cssalkalmazás esetében a rendszer importálja az RCL stíluslapját az alkalmazás stíluslapjának tetején:@import '_content/ClassLib/ClassLib.bundle.scp.css';Az RCL csomagstílusai nem jelennek meg a stílusokat használó alkalmazás statikus webes objektumaként.
Az RCL-ekkel kapcsolatos további információkért tekintse meg a következő cikkeket:
- ASP.NET Core Razor összetevőinek felhasználása egy Razor osztálykódtárból (RCL)
- Újrahasználható Razor felhasználói felület osztálykönyvtárakban az ASP.NET Core segítségével