Jak zastosować styl do pustego pola wprowadzania? Jeśli użytkownik wpisze coś w polu wejściowym, styl nie powinien już być stosowany. Czy to możliwe w CSS? Próbowałem tego:
input[value=""]
css
input
css-selectors
Sjoerd
źródło
źródło
W nowoczesnych przeglądarkach możesz użyć
:placeholder-shown
do kierowania na puste dane wejściowe (nie mylić z::placeholder
).Więcej informacji i obsługa przeglądarek: https://css-tricks.com/almanac/selectors/p/placeholder-shown/
źródło
W CSS nie ma selektora, który to robi. Selektory atrybutów pasują do wartości atrybutów, a nie do obliczonych wartości.
Musiałbyś użyć JavaScript.
źródło
:empty
selektor działa tylko na pustych elementach, czyli tylko na elementach, które mają znacznik otwierający i zamykający, który jest pusty pomiędzy, oraz pojedyncze elementy, które są uważane za zawsze puste, na przykład , więc nie można go używać na elementach wejściowych, z wyjątkiemtextarea
Aktualizacja wartości pola nie aktualizuje jego atrybutu wartości w DOM, dlatego Twój selektor zawsze pasuje do pola, nawet jeśli nie jest ono w rzeczywistości puste.
Zamiast tego użyj
invalid
pseudoklasy, aby osiągnąć to, co chcesz, na przykład:źródło
input[value=""], input:not([value])
pracuje z:
Ale styl nie zmieni się, gdy tylko ktoś zacznie pisać (potrzebujesz do tego JS).
źródło
input[value=""], input:not([value])
.Jeśli nie jest potrzebne wspieranie starszych przeglądarek, można użyć kombinacji
required
,valid
iinvalid
.Dobrą rzeczą w używaniu tego jest to, że pseudoelementy
valid
iinvalid
dobrze współpracują z atrybutami typu pól wejściowych. Na przykład:Dla odniesienia, JSFiddle tutaj: http://jsfiddle.net/0sf6m46j/
źródło
w jQuery. Dodałem klasę i stylizowałem za pomocą css.
źródło
To zadziałało dla mnie:
W przypadku kodu HTML dodaj
required
atrybut do elementu wejściowegoW przypadku CSS użyj
:invalid
selektora, aby wskazać puste wejścieUwagi:
required
z witryny w3Schools.com : „Jeśli jest obecny, określa, że przed przesłaniem formularza należy wypełnić pole wejściowe”.źródło
To pytanie mogło zostać zadane jakiś czas temu, ale ponieważ niedawno trafiłem na ten temat, szukając walidacji formularzy po stronie klienta, a
:placeholder-shown
wsparcie jest coraz lepsze, pomyślałem, że poniższe informacje mogą pomóc innym.Korzystając z pomysłu Berenda, polegającego na użyciu tej pseudoklasy CSS4, udało mi się stworzyć walidację formularza uruchamianą dopiero po zakończeniu wypełniania przez użytkownika.
Oto ademo i wyjaśnienie dotyczące CodePen: https://codepen.io/johanmouchet/pen/PKNxKQ
źródło
Jeśli cieszysz się, że nie obsługujesz IE ani Pre-Chromium Edge (co może być w porządku, jeśli używasz tego do stopniowego ulepszania), możesz użyć
:placeholder-shown
tak, jak powiedział Berend. Zwróć uwagę, że w przypadku Chrome i Safari faktycznie potrzebujesz niepustego symbolu zastępczego, aby to działało, chociaż spacja działa.źródło
Udało mi się dodać nazwę klasy do danych wejściowych, a następnie zastosować do tego reguły CSS:
źródło
Dziwią mnie odpowiedzi, które mają jasny atrybut, aby uzyskać puste pola wejściowe, spójrz na ten kod
AKTUALIZACJA
Więcej za świetny wygląd podczas walidacji
źródło
:empty
dotyczy tylko elementów, które nie mają dzieci. Wejścia nie mogą w ogóle mieć węzłów podrzędnych, więc dane wejściowe będą zawsze oznaczone czerwoną ramką. Zobacz także ten komentarzvalue
nie zmienia liczby węzłów podrzędnych.<parent><child></child></parent>
.). Po prostu trzeba<input></input>
i jak piszesz to, co się zmienia nie jest<value>
wewnątrz węzła<input>
ale wartość atrybutu :<input value='stuff you type'></input>
Zdaję sobie sprawę, że to bardzo stary wątek, ale od tamtego czasu sytuacja nieco się zmieniła i pomogło mi to znaleźć właściwą kombinację rzeczy, których potrzebowałem, aby naprawić mój problem. Więc pomyślałem, że podzielę się tym, co zrobiłem.
Problem polegał na tym, że potrzebowałem tego samego CSS zastosowanego do opcjonalnego wejścia, jeśli był wypełniony, tak jak w przypadku wypełnionego wymagania. CSS wykorzystywał klasę psuedo: valid, która zastosowała CSS na opcjonalnym wejściu również wtedy, gdy nie był wypełniony.
Tak to naprawiłem;
HTML
CSS
źródło