
Stylování <select>u
Roletový seznam nabízí omezené možnosti v úpravách vzhledu. Které to jsou a jak je rozšířit?
Odsazení padding
Funguje od Exploreru 8 na značce <select>, na <option>u umí padding jen Firefox.
Barvy
Obarvení <select>u je možné ve všech prohlížečích. Je možné barvit i konkrétní <option> položky. Pokud se tak neučiní, převezmou položky barvu <select>u.
Jak je vidět z ukázky, nastavení pozadí (background) způsobí přepnutí na oldschool vzhled, téhož je možné docílit vlastností border.
Rámeček border
S rámečky není problém. Firefox je umí i pro jednotlivé položky.
V prohlížečích, které podporují kulaté rohy přes border-radius, není problém ani zakulacení.
Šířka a výška
- Přenastavení rozměrů je taktéž široce podporováno.
- Problém je s výškou, kdy různé prohlížeče text různě zarovnávají (není možné použít
line-height). - Zarovnat text u širokého
<select>u pomocítext-align: centerfunguje jen v Opeře 12. - Firefox jako jediný umí nastavit výšku i pro položky výběru.
Písmo
Ohledně písma lze nastavit prakticky vše — tučné písmo, kursivu apod., velikost, barvu (jak je zmíněno výše), atd.
Opět to je možné kromě Firefoxu jen pro celý výběr, tj. pro <select>.
Zvýraznění položky
Při najetí na <select> lze klasicky aplikovat :hover. Otevřený <select> získává :focus.
- V Explorerech do verse 9 včetně nefunguje
:hover, do verse 8 včetně ani:focus. - Nastavit vlastní styl pro
:hoverjednotlivých položek se zdá být nemožné.
Vlastní styl šipky
Standardním způsobem není možné změnit styl šipky znázorňující rozevření seznamu (například jí změnit barvu).
Existují ale způsoby, jak to obejít:
appearance: none
CSS vlastnost appearance nastavená na hodnotu none dokáže vypnout výchozí styl formulářového políčka. Tím se mimo jiné docílí, že se nezobrazí šipka pro rozevření.
Vlastní šipku jde potom snadno absolutně naposicovat na požadované místo. Šipka jde vytvořit i přímo v CSS:
Aby na místě posicované šipky šlo <select> prokliknout, je třeba přidat pointer-events: none.
Závěr
Jak je vidět, stylování je docela omezené. Pro plnou kontrolu je třeba použít atrapu a <select> ovládat JavaScriptem. Problém je, že vytvořit funkčnost shodnou s obyčejným formulářem je docela komplikované. A hotová řešení často věci jako ovládání klávesnicí apod. neumožňují.
Problémům se stylováním se jde často úplně vyhnout, protože selectbox není úplně ideální formulářový prvek a často jde nahradit uživatelsky příjemnějším ovládacím prvkem:
Odkazy jinam
Co si myslíte o tomto článku?
Diskuse
Související články
CSS item-pack: balance – vyvážené rozložení flex položek
Vlastnost item-pack: balance rozděluje flex položky rovnoměrně mezi řádky, podobně jako text-wrap: balance vyvažuje řádky textu.
CSS Container Queries – responsivní komponenty
Jak pomocí @container, container-type a container-name vytvářet komponenty, které se přizpůsobí velikosti svého rodiče místo viewportu.
CSS Anchor Positioning – posicování elementů relativně k jiným
Jak pomocí anchor-name, position-anchor a funkce anchor() posicovat elementy relativně k jiným bez JavaScriptu.
Centrování na webových stránkách
Moderní způsoby vertikálního i horizontálního centrování v CSS. Flexbox, Grid, margin auto a další techniky.