Chciałbym dodać styl do pola wyboru za pomocą pseudo: after (aby nadać styl mojemu polu wyboru z 2 częściami i bez obrazów). Oto kod HTML:
<select name="">
<option value="">Test</option>
</select>
I to nie działa. Nie wiem dlaczego i nie znalazłem odpowiedzi w specyfikacji W3C. Oto CSS:
select {
-webkit-appearance: none;
background: black;
border: none;
border-radius: 0;
color: white;
}
select:after {
content: " ";
display: inline-block;
width: 24px; height: 24px;
background: blue;
}
Czy to normalne, czy jest jakaś sztuczka?
Odpowiedzi:
Nie sprawdzałem tego dokładnie, ale mam wrażenie, że nie jest to (jeszcze?) Możliwe, ze względu na sposób, w jaki
select
elementy są generowane przez system operacyjny, na którym działa przeglądarka, a nie przez samą przeglądarkę.źródło
Szukałem tego samego, ponieważ tło mojego zaznaczenia jest takie samo jak kolor strzałki. Jak wspomniano wcześniej, nie można jeszcze dodać niczego za pomocą: before lub: after na wybranym elemencie. Moim rozwiązaniem było utworzenie elementu wrapper, na którym dodałem: przed kodem.
I to mój wybór
Użyłem FontAwesome.io do mojej nowej strzały, ale możesz użyć wszystkiego, co chcesz. Oczywiście nie jest to idealne rozwiązanie, ale w zależności od potrzeb może wystarczyć.
źródło
Z mojego doświadczenia wynika, że po prostu nie działa, chyba że zechcesz zawinąć go
<select>
w jakieś opakowanie. Ale zamiast tego możesz użyć obrazu tła SVG. Na przykładTylko uważaj na prawidłowe kodowanie adresów URL ze względu na IE. Musisz używać
charset=utf8
(nie tylkoutf8
), nie używać podwójnych cudzysłowów (") do oddzielania wartości atrybutów SVG, zamiast tego użyj apostrofów ('), aby uprościć sobie życie. Kodowanie adresów URL (% 3E). Na wypadek, gdybyś musiał drukować wszelkie znaki spoza ASCII, które musisz uzyskać, aby uzyskać ich reprezentację UTF-8 (np. BabelMap może ci w tym pomóc), a następnie podać tę reprezentację w postaci zakodowanej w adresie URL - np. dla ▾ (U+25BE
CZARNY MAŁY TRÓJKĄT WSKAZUJĄCY W DÓŁ) Reprezentacja UTF-8 jest\xE2\x96\xBE
czyli w%E2%96%BE
przypadku zakodowania adresu URL.źródło
Ten post może pomóc http://bavotasan.com/2011/style-select-box-using-only-css/
Używa zewnętrznego elementu div z klasą do rozwiązania tego problemu.
źródło
W obliczu tego samego problemu. Prawdopodobnie mogłoby to być rozwiązanie:
źródło
To rozwiązanie jest podobne do tego z sroy, ale z trójkątem CSS zamiast czcionki internetowej:
źródło
A jeśli modyfikowanie znaczników nie wchodzi w grę?
Oto rozwiązanie, które nie ma wymagań dotyczących opakowania: wykorzystuje plik SVG w obrazie tła. Może być konieczne użycie dekodera encji HTML, aby zrozumieć, jak zmienić kolor wypełnienia.
Ściągnięte z CSS-Tricks .
źródło
To nowoczesne rozwiązanie, które stworzyłem używając font-awesome . Rozszerzenia dostawców zostały pominięte ze względu na zwięzłość.
HTML
SCSS
Jeśli wybrany element ma zdefiniowany kolor tła, to nie zadziała, ponieważ ten fragment zasadniczo umieszcza ikonę Chevron za wybranym elementem (aby umożliwić kliknięcie na górze ikony, aby nadal zainicjować akcję zaznaczania).
Możesz jednak nadać styl opakowaniom typu select taki sam rozmiar jak element zaznaczenia i stylizować jego tło, aby uzyskać ten sam efekt.
Sprawdź mój CodePen, aby zobaczyć działające demo, które pokazuje ten fragment kodu zarówno na ciemnym, jak i jasnym polu wyboru przy użyciu zwykłej etykiety i etykiety „zastępczej” oraz innych wyczyszczonych stylów, takich jak obramowanie i szerokość.
PS To jest odpowiedź, którą wysłałem na inne, zduplikowane pytanie na początku tego roku.
źródło
Zamiast stylizacji select, dlaczego nie dodajesz elementu div poza zaznaczeniem.
a następnie styl w CSS
źródło