Используйте CSS для автоматического добавления звездочки "Обязательное поле" для формирования входных данных
каков хороший способ преодолеть тот прискорбный факт, что этот код не будет работать так, как хотелось бы:
<div class="required">
<label>Name:</label>
<input type="text">
</div>
<style>
.required input:after { content:"*"; }
</style>
в идеальном мире, все необходимые input
s получит маленькую звездочку, указывающую, что поле является обязательным. Это решение невозможно, так как CSS вставляется после содержимого элемента, а не после самого элемента, но что-то вроде этого было бы идеально. На сайте с тысячами обязательных полей я могу переместить звездочку перед входом с одним изменением в одну строку (:after
до :before
) или я могу переместить его в конец ярлыка (.required label:after
) или лицевой стороне этикетки, или на позицию в поле и т. д...
Это важно не только на случай, если я передумаю о том, где разместить звездочку везде, но и для нечетных случаев, когда макет формы не позволяет Звездочке в стандартном положении. Он также хорошо играет с проверкой, которая проверяет форму или выделяет неправильно заполненные контроли.
наконец, он не добавляет дополнительной разметки.
есть ли хорошие решения, которые имеют все или большинство преимуществ невозможен код?
14 ответов:
аналогичный результат может быть достигнут с помощью фонового изображения Изображения звездочки и установки фона метки/ввода/внешнего div и заполнения размера изображения звездочки. Что-то вроде этого:
.required input { padding-right: 25px; background-image: url(...); background-position: right top; }
это поставит звездочку Внутри текстового поля, но положить то же самое на
div.required
вместо.required input
вероятно, будет больше, что вы ищете, если немного менее элегантно.этот метод не требует дополнительного ввода.
Это то, что вы имели в виду?
<div class="required"> <label>Name:</label> <input type="text"> </div> <style> .required:after { content:" *"; } </style>
см.https://developer.mozilla.org/en-US/docs/Web/CSS/pseudo-elements
.required label { font-weight: bold; } .required label:after { color: #e32; content: ' *'; display:inline; }
возиться с вашей точной структурой: http://jsfiddle.net/bQ859/
чтобы поместить его точно во вход, как показано на следующем рисунке:
Я нашел следующий подход:
.asterisk_input:after { content:" *"; color: #e32; position: absolute; margin: 0px 0px 0px -20px; font-size: xx-large; padding: 0 5px 0 0; } <form> <div> <input type="text" size="15" /> <span class="asterisk_input"> </span> </div> </form>
сайт, на котором я работаю, закодирован с использованием фиксированного макета, поэтому для меня это было нормально.
Я не уверен, что это хорошо для жидкого дизайна.
input[required], select[required] { background-image: url('/img/star.png'); background-repeat: no-repeat; background-position-x: right; }
изображение имеет около 20px пространства справа, чтобы не перекрываться с выберите выпадающую стрелку
и выглядит это так:
написать в CSS
.form-group.required .control-label:after {content:"*";color:red;}
и HTML
<div class="form-group required"> <label class="control-label">Name:</label> <input type="text"> </div>
input[required]{ background-image: radial-gradient(#F00 15%, transparent 16%), radial-gradient(#F00 15%, transparent 16%); background-size: 1em 1em; background-position: right top; background-repeat: no-repeat; }
используйте jQuery и CSS
jQuery(document).ready(function() { jQuery("[required]").after("<span class='required'>*</span>"); });
.required { position: absolute; margin-left: -10px; color: #FB0000; font-size: 15px; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type="text" value="xxx" required>
Я думаю, что это эффективный способ сделать, почему так много головной боли
<div class="full-row"> <label for="email-id">Email Address<span style="color:red">*</span></label> <input type="email" id="email-id" name="email-id" ng-model="user.email" > </div>
.asterisc { display: block; color: red; margin: -19px 185px; }
<input style="width:200px"> <span class="asterisc">*</span>
вы также можете использовать абсолютное позиционирование...
.required { display: inline-block; position: relative; } .required label:after { content:"*"; display: block; position: absolute; right: -.6em; top: 0; }
в скрипке я включаю опцию для размещения ' * ' после ввода или после метки.
вы можете достичь желаемого результата, инкапсулировав HTML-код в тег div, который содержит класс "required", за которым следует класс "form-group". *однако это работает только в том случае, если у вас есть Bootstrap.
<div class="form-group required"> <div class="required"> <label>Name:</label> <input type="text"> </div> <div>
для тех, кто в конечном итоге здесь, но есть jQuery:
// javascript / jQuery $("label.required").append('<span class="red-star"> *</span>') // css .red-star { color: red; }
быстрая hack применить ко всем метки
function showRequiredAsterisk() { $(':required').each( function(f){ var lbl = $('label[for="'+this.id+'"]').first(); if(lbl!=null){ if(!lbl.text().includes('*')){ lbl.html(lbl.html() + '<span style="color:red"> * </span>'); } } }); return false; } $(document).ready(function () { showRequiredAsterisk(); });