CSS3: после псевдоэлемента со входом
Просто игра с :before
и :after
.
Кажется, я не могу использовать их в/с кнопкой input
? Думаю, что я мог бы использовать его, он отображает звездочку для обязательных полей. Не обязательно, что я буду делать, просто вариант
input {
position: relative;
}
input:after {
content: '';
background: url(accept.png) 0 0 no-repeat;
height: 16px;
position: absolute;
right: -20px;
top: 5px;
width: 16px;
}
Тот же код отлично работает на li
li {
clear: both;
margin: 0 0 10px;
position: relative;
}
li:after {
content: '';
background: url(accept.png) 0 0 no-repeat;
height: 16px;
position: absolute;
right: -20px;
top: 5px;
width: 16px;
}
Ответы
Ответ 1
Я также подумал, что то же самое было бы полезно, но, увы, самый простой способ, с помощью которого я мог получить над/после псевдоэлементов надежно, - это обернуть ввод в тег SPAN
и применение к нему класса.
В этом обсуждении дается некоторое представление о том, почему input:after
не работает:
http://forums.mozillazine.org/viewtopic.php?f=25&t=291007&start=0&st=0&sk=t&sd=a
Вы можете сделать что-то вроде:
.required:after {
content: "REQUIRED";
color: orange;
margin-left: 1em; /* space between the input element and the text */
padding: .1em;
background-color: #fff;
font-size: .8em;
border: .1em solid orange;
}
<span class="required"><input id="foo" /></span>
Ответ 2
Здесь задан принципиально идентичный вопрос, который имеет большое объяснение: fooobar.com/questions/12142/...
Подводя итог, входы не являются контейнерами и не могут иметь детей. Таким образом, содержимое, вставленное с помощью: перед и после псевдоэлементов, обычно не может быть вставлено в входы.
Обратите внимание, что вместо использования <input type="submit|button">
вы можете использовать <button>
, который может иметь детей, поэтому для этого ввода есть "обходной путь" (ну, если у вас есть контроль над разметкой;)
Ответ 3
Я просто просмотрел одно и то же - только я хотел использовать его для отображения accesskeys:
*[accesskey]:after {
content:' [' attr(accesskey) ']';
}
Не так сильно, что нужно написать значение accesskey более чем в одном месте, что обычно добавляет риск не сохранять значения одинаковыми, и это может быть допустимым UE-wise = 0/
Ответ 4
Этот ответ (текст ниже строки) не работает (для текстового input
в любом случае), но его оставляют на месте вне случайности, он спасает кого-то другого беспокоясь о попытках добиться того же конечного результата с помощью тех же средств. Единственный способ сделать это: @Tim отмечает в своем ответе обертывание input
(или других) элементов в другом элементе, например span
, а затем стиль, который с псевдоэлементом :after
.
JS Fiddle демонстрационный пример рабочего примера.
Ум, они, похоже, работают вполне нормально JS Fiddle demo, за исключением того, что без position: absolute
содержимое :after
появляется внутри сам элемент (внутри кнопок или флажков и т.д.).
HTML:
<button class="req">button</button>
<input class="req" type="text" />
<input class="req" type="radio" />
<input class="req" type="checkbox" />
<textarea class="req"></textarea>
CSS
input,
textarea {
display: block;
}
.req {
position: relative;
}
.req:after {
content: "*";
margin: 0 0 0 0.5em;
position: absolute;
top: 0;
right: -1em;
}
Ответ 5
Мне нужно было делать это с помощью входов, но не имел доступа к изменению html, который был создан Wordpress и JQuery. Ну, может быть, я мог бы, но это было бы долгое решение. По той же причине: доступность.
Итак, одно возможное решение, которое вы можете использовать:
#comment-form input[type=text],
#comment-form input[type=email],
#comment-form input[type=url],
#comment-form input[type=password] {
width:40%; margin-right:60%; }
Если сообщение об ошибке появляется после этого, оно больше не может входить в ту же строку и получает столкновение. Конечно, вам нужно будет подумать, можете ли вы поддерживать процентную ширину в своем макете, но вы получаете идею.