No cóż, technicznie nie jest możliwe uzyskanie :before
i :after
pseudoelementy działają na input
elementach
Z W3C :
12.1: Przed i po pseudoelementach
Autorzy określają styl i lokalizację generowanej treści za pomocą pseudoelementów: before i: after. Jak wskazują ich nazwy, pseudoelementy: before i: after określają lokalizację zawartości przed i po zawartości drzewa dokumentu elementu. Właściwość „content” w połączeniu z tymi pseudoelementami określa, co zostanie wstawione.
Miałem więc projekt, w którym miałem przyciski przesyłania w postaci input
tagów iz jakiegoś powodu inni programiści ograniczyli mnie do używania <button>
tagów zamiast zwykłych przycisków wprowadzania, więc wpadłem na inne rozwiązanie, polegające na zawijaniu przycisków w span
zestawie do position: relative;
i całkowicie pozycjonowania ikonę za pomocą :after
pseudo.
Uwaga: skrzypce demonstracyjne używa kodu zawartości dla FontAwesome 3.2.1, więc może być konieczna odpowiednia zmiana wartości content
właściwości.
HTML
<span><input type="submit" value="Send" class="btn btn-default" /></span>
CSS
input[type="submit"] {
margin: 10px;
padding-right: 30px;
}
span {
position: relative;
}
span:after {
font-family: FontAwesome;
content: "\f004"; /* Value may need to be changed in newer version of font awesome*/
font-size: 13px;
position: absolute;
right: 20px;
top: 1px;
pointer-events: none;
}
Demo
Teraz wszystko tutaj jest zrozumiałe, dotyczy jednej właściwości, tzn. pointer-events: none;
Użyłem tego, ponieważ po najechaniu kursorem na :after
pseudo wygenerowaną treść przycisk nie kliknie, więc użycie wartości none
zmusi akcję kliknięcia do przejścia przez tę treść .
Z sieci deweloperów Mozilla :
Oprócz wskazania, że element nie jest celem zdarzeń myszy, wartość none instruuje, aby zdarzenie myszy „przechodziło” przez element i kierowało na obiekt znajdujący się „pod” tym elementem.
Najedź kursorem na ikonę / czcionkę serca Demoi zobacz, co się stanie, jeśli NIE użyjeszpointer-events: none;