Додавання зірочки до необхідних полів у 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 ознайомитись *із необхідними полями?


EDIT

Загальні *положення та умови не з’являються одразу до прапорця. Як це виправити?

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


2
Будь ласка, позначте відповідь на запитання.
LoveAndHappiness

Відповіді:


283

Використовуйте .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>

3
Я спробував відредагований, але не вийшло. ви можете, будь ласка, перевірити?
мозковий шторм

Змінюйте щось, також у CSS
Timvp

1
Здається, це не загальний BS3, а спеціальний CSS? На мене це теж чуйно реагує, тому, можливо, це нормально додати (до файлу теми BS, наприклад bootstrap-theme.css).
Роланд

Для розмежування псевдокласу та псевдоелементів можна використовувати ::after. Спекуляції щодо CSS рівня 3 вичерпані.
Нійонгабо

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";

1
top:7px;викличе проблеми, якщо мітка багаторядкова. Краще було б замінити його, margin-top: -4px;наприклад.
sasha_gud

7

.form-group .required .control-label:afterмабуть, мабуть .form-group.required .control-label:after. Видалення простору між .form-group та .required є зміною.


Дякую! також працює для завантажувальної .control-group.required .control-label:after { content:"*"; color:red; }
версії

4

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

.form-group .required {
    styles
}

Це націлювання на елемент класу "обов'язковий", який знаходиться всередині елемента з класом "форма-група".

Без місця він орієнтується на елемент, який має обидва класи. 'обов'язково' та 'форма групи'


Це окреме питання від вашого початкового запитання. Але ваш 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>

Дещо дивно мати контрольну мітку на діві, яка містить і мітку, і вхід.
девлін карнат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.