Kaip stilizuoti žymės langelius su CSS be bibliotekų?
sobes.tech AI
Atsakymas iš AI
Be be būdų, kaip stilizuoti žymės langelį be bibliotekų, galima naudoti standartinio elemento paslėpimą ir pseudo-elementų ::before arba ::after stilizavimą, kurie yra susiję su tėviniu <label>.
-
Standartinio žymės langelio paslėpimas:
input[type="checkbox"] { display: none; /* arba visibility: hidden; height: 0; width: 0; */ } -
Sukurti stilizuotą "kvadratą" naudojant pseudo-elementą
<label>:input[type="checkbox"] + label::before { content: ''; /* Būtina pseudo elemento rodymui */ display: inline-block; width: 1em; /* Kvadrato dydis */ height: 1em; /* Kvadrato dydis */ border: 1px solid #ccc; /* Kvadrato rėmelis */ margin-right: 0.5em; /* Atskirtimas nuo žymės teksto */ vertical-align: middle; /* Vertikalus išlyginimas */ /* Kiti stiliai: background-color, border-radius, box-shadow */ } -
Stilius pažymėtam būsenai:
Naudojame
checkedselektoriųinputir atitinkamai keičiame pseudo elementolabelstilių.input[type="checkbox"]:checked + label::before { background-color: #007bff; /* Pažymėto langelio fonas */ border-color: #007bff; /* Pažymėto langelio rėmelio spalva */ /* Kiti stiliai pagal poreikį */ } -
Pridėti "varnelę" (ar kitą indikatorių):
Galite naudoti antrą pseudo-elementą (
::after) arba stilizuoti esamą::beforenaudojantbackground-image(svg, data-url) arbaborderstilizaciją.Pavyzdys su
borderkuriant varnelę:input[type="checkbox"]:checked + label::after { content: ''; display: inline-block; width: 0.4em; /* Varnelės linijos plotis */ height: 0.7em; /* Varnelės linijos aukštis */ border-right: 2px solid white; /* Dešinė varnelės dalis */ border-bottom: 2px solid white; /* Apatinė varnelės dalis */ transform: rotate(45deg); /* Pasukimas formuojant varnelę */ position: absolute; /* Pozicionavimui viduje `::before` */ top: 0.1em; /* Pozicijos koregavimas */ left: 0.3em; /* Pozicijos koregavimas */ /* Tėvinis `label::before` gali reikėti `position: relative;` */ }
Norint, kad paskutinis pavyzdys veiktų teisingai, pridėkite position: relative; prie input[type="checkbox"] + label::before:
input[type="checkbox"] + label::before {
/* ... ankstesni stiliai ... */
position: relative; /* Skirtas `::after` pozicionavimui */
}
Šis požiūris užtikrina visišką kontrolę virš žymės langelio išvaizdos ir gerą prieinamumą, nes standartinis elementas vis dar egzistuoja ir reaguoja į naudotojo veiksmus (paspaudimas, fokusas). Svarbu susieti input su label naudojant id ir for atributus, kad veiktų teisingai paspaudus ant teksto.
<input type="checkbox" id="myCheckbox">
<label for="myCheckbox">Sutinku su sąlygomis</label>