Добавление звездочки в обязательные поля в Bootstrap 3

166

В моем HTML есть класс, .requiredкоторый называется обязательными полями.

Вот HTML-код:

<form action="/accounts/register/" method="post" role="form" class="form-horizontal">
    <input type='hidden' name='csrfmiddlewaretoken' value='brGfMU16YyyG2QEcpLqhb3Zh8AvkYkJt' />
    <div class="form-group required">
       <label class="col-md-2 control-label">Username</label>
       <div class="col-md-4">
         <input class="form-control" id="id_username" maxlength="30" name="username" placeholder="Username" required="required" title="" type="text" />
       </div>
    </div>
    <div class="form-group required"><label class="col-md-2 control-label">E-mail</label><div class="col-md-4"><input class="form-control" id="id_email" name="email" placeholder="E-mail" required="required" title="" type="email" /></div></div>
    <div class="form-group required"><label class="col-md-2 control-label">Password</label><div class="col-md-4"><input class="form-control" id="id_password1" name="password1" placeholder="Password" required="required" title="" type="password" /></div></div>
    <div class="form-group required"><label class="col-md-2 control-label">Password (again)</label><div class="col-md-4"><input class="form-control" id="id_password2" name="password2" placeholder="Password (again)" required="required" title="" type="password" /></div></div>
    <div class="form-group required"><label class="col-md-2 control-label">first name</label><div class="col-md-4"><input class="form-control" id="id_first_name" maxlength="30" name="first_name" placeholder="first name" required="required" title="" type="text" /></div></div>
    <div class="form-group required"><label class="col-md-2 control-label">last name</label><div class="col-md-4"><input class="form-control" id="id_last_name" maxlength="30" name="last_name" placeholder="last name" required="required" title="" type="text" /></div></div>
    <div class="form-group required"><label class="col-md-2 control-label">&#160;</label><div class="col-md-4"><div class="checkbox"><label><input class="" id="id_tos" name="tos" required="required" type="checkbox" /> I have read and agree to the Terms of Service</label></div></div></div>

    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
           <button type="submit" class="btn btn-primary">
              <span class="glyphicon glyphicon-star"></span> Sign Me Up!
           </button>
        </div>
    </div>
</form>

Я добавил следующее в мой CSS;

.form-group .required .control-label:after {
  content:"*";color:red;
}

Тем не менее, это не дает красный цвет *вокруг обязательных полей. Что мне здесь не хватает? Разве в Bootstrap 3 нет прямого способа ввести *необходимые поля?


РЕДАКТИРОВАТЬ

*В условиях не появляется сразу флажок. Как это исправить?

введите описание изображения здесь

мозговой штурм
источник
2
Пожалуйста, отметьте ответ на вопрос.
LoveAndHappiness

Ответы:

284

Использовать .form-group.requiredбез места.

.form-group.required .control-label:after {
  content:"*";
  color:red;
}

Редактировать:

Для флажка вы можете использовать псевдокласс: not (). Вы добавляете обязательные * после каждого ярлыка, если это не флажок

.form-group.required:not(.checkbox) .control-label:after, 
.form-group.required .text:after { /* change .text in whatever class of the text after the checkbox has */
   content:"*";
   color:red;
}

Примечание: не тестировалось

Вы должны использовать класс .text или нацеливаться на него иначе, возможно, попробуйте этот HTML:

<div class="form-group required">
   <label class="col-md-2 control-label">&#160;</label>
   <div class="col-md-4">
      <div class="checkbox">
         <label class='text'> <!-- use this class -->
            <input class="" id="id_tos" name="tos" required="required" type="checkbox" /> I have read and agree to the Terms of Service
         </label>
      </div>
   </div>
</div>

Хорошо, третье редактирование:

CSS вернуться к тому, что было

.form-group.required .control-label:after { 
   content:"*";
   color:red;
}

HTML:

<div class="form-group required">
   <label class="col-md-2">&#160;</label> <!-- remove class control-label -->
   <div class="col-md-4">
      <div class="checkbox">
         <label class='control-label'> <!-- use this class as the red * will be after control-label -->
            <input class="" id="id_tos" name="tos" required="required" type="checkbox" /> I have read and agree to the Terms of Service
         </label>
      </div>
   </div>
</div>
Timvp
источник
3
Я попробовал отредактированный, но он не работал. можешь проверить?
мозговой штурм
Измените что-то, также в CSS
Timvp
1
Кажется, это не общий BS3, а собственный CSS? Мне это тоже кажется отзывчивым, так что, возможно, можно добавить это (например, в файл темы BS bootstrap-theme.css).
Роланд
Чтобы различать псевдокласс и псевдоэлементы, вы можете использовать ::after. Уровень 3 CSS спекуляции нет.
Niyongabo
73

Предполагая, что это то, как выглядит HTML

<div class="form-group required">
   <label class="col-md-2 control-label">E-mail</label>
   <div class="col-md-4"><input class="form-control" id="id_email" name="email" placeholder="E-mail" required="required" title="" type="email" /></div>
</div>

Чтобы отобразить звездочку справа от ярлыка:

.form-group.required .control-label:after { 
    color: #d00;
    content: "*";
    position: absolute;
    margin-left: 8px;
    top:7px;
}

Или слева от ярлыка:

.form-group.required .control-label:before{
   color: red;
   content: "*";
   position: absolute;
   margin-left: -15px;
}

Чтобы сделать красивые большие красные звездочки, вы можете добавить эти строки:

font-family: 'Glyphicons Halflings';
font-weight: normal;
font-size: 14px;

Или, если вы используете Font Awesome, добавьте эти строки (и измените строку содержимого):

font-family: 'FontAwesome';
font-weight: normal;
font-size: 14px;
content: "\f069";
th3uiguy
источник
1
top:7px;вызовет проблемы, если метка многострочная. Было бы лучше заменить его, margin-top: -4px;например.
sasha_gud
7

.form-group .required .control-label:afterнаверное должно быть .form-group.required .control-label:after. Удаление пробела между .form-group и .required - это изменение.

Джереми Кук
источник
Спасибо! также работает для bootstrap 2.3 с .control-group.required .control-label:after { content:"*"; color:red; }
edditor
4

Два других ответа верны. Когда вы включаете пробелы в ваши CSS-селекторы, вы нацеливаетесь на дочерние элементы так:

.form-group .required {
    styles
}

Нацеливается на элемент с классом «required», который находится внутри элемента с классом «form-group».

Без пробела он нацелен на элемент, который имеет оба класса. 'required' и 'form-group'

Corey
источник
Это отдельный вопрос от вашего первоначального вопроса. Но ваш CSS делает именно то, что вы говорите. Он ставит звездочку с полем метки (которое для ваших условий не указано), а не с полем ввода. Если вы хотите, чтобы они отображались вместе, вам нужно сгруппировать их вместе в HTML. Но тогда у вас есть пустое поле метки, что плохо. Я просто отказался бы от ярлыка на условиях, но оставил бы валидации.
Кори
1

Этот CSS работал для меня:

.form-group.required.control-label:before{
   color: red;
   content: "*";
   position: absolute;
   margin-left: -10px;
}

и этот HTML:

<div class="form-group required control-label">
  <label for="emailField">Email</label>
  <input type="email" class="form-control" id="emailField" placeholder="Type Your Email Address Here" />
</div>
томагавк
источник
Немного странно иметь контрольную метку на элементе div, которая содержит и метку, и ввод.
Devlin Carnate