Dodanie gwiazdki do wymaganych pól w Bootstrap 3

166

Mój HTML ma klasę o nazwie, .requiredktóra jest przypisana do wymaganych pól.

Oto kod 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>

Dodałem do mojego CSS;

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

Jednak to nie daje czerwonego koloru *wokół wymaganych pól. Czego tu brakuje? Czy w Bootstrap 3 nie ma bezpośredniego sposobu na wprowadzenie *wymaganych pól?


EDYTOWAĆ

*W warunkach nie pojawia się natychmiast do wyboru. Jak to naprawić?

wprowadź opis obrazu tutaj

burza mózgów
źródło
2
Proszę zaznaczyć odpowiedź na pytanie.
LoveAndHappiness

Odpowiedzi:

283

Używaj .form-group.requiredbez spacji.

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

Edytować:

W polu wyboru możesz użyć pseudoklasy: not (). Wymagane * dodajesz po każdej etykiecie, chyba że jest to pole wyboru

.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;
}

Uwaga: nie testowano

Powinieneś użyć klasy .text lub skierować ją na nią, prawdopodobnie w innym przypadku, wypróbuj ten kod 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>

Ok trzecia edycja:

CSS z powrotem do tego, co było

.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
źródło
3
Wypróbowałem edytowany, ale nie zadziałał. czy możesz proszę sprawdzić?
burza mózgów
Zmień coś, także w CSS
Timvp,
1
Wydaje się, że nie jest to ogólny BS3, ale niestandardowy CSS? Dla mnie też wygląda na responsywny, więc może można to dodać (np bootstrap-theme.css. Do pliku motywu BS ).
Roland
Aby rozróżnić pseudoklasy i pseudoelementy, możesz użyć ::after. Spekulacje na temat CSS poziomu 3 wyszły na jaw.
Niyongabo
73

Zakładając, że tak wygląda 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>

Aby wyświetlić gwiazdkę po prawej stronie etykiety:

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

Lub po lewej stronie etykiety:

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

Aby utworzyć ładne, duże czerwone gwiazdki, możesz dodać te linie:

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

Lub, jeśli używasz Font Awesome, dodaj te wiersze (i zmień zawartość):

font-family: 'FontAwesome';
font-weight: normal;
font-size: 14px;
content: "\f069";
th3uiguy
źródło
1
top:7px;spowoduje problemy, jeśli etykieta jest wielowierszowa. Lepiej byłoby go zastąpić margin-top: -4px;np.
sasha_gud
7

.form-group .required .control-label:afterprawdopodobnie powinno być .form-group.required .control-label:after. Usunięcie spacji między .form-group i .required to zmiana.

Jeremy Cook
źródło
dzięki! działa również dla bootstrap 2.3 z .control-group.required .control-label:after { content:"*"; color:red; }
redaktorem
4

Pozostałe dwie odpowiedzi są prawidłowe. Kiedy dodajesz spacje do selektorów CSS, celujesz w elementy podrzędne, więc:

.form-group .required {
    styles
}

Celuje w element z klasą „required”, który znajduje się wewnątrz elementu z klasą „form-group”.

Bez spacji celuje w element, który ma obie klasy. „wymagane” i „grupa formularzy”

Corey
źródło
To osobna kwestia od pierwotnego pytania. Ale twój CSS robi dokładnie to, co mu każesz. Umieszcza gwiazdkę z polem etykiety (które dla Twoich warunków jest puste), a nie polem wejściowym. Jeśli chcesz, aby pojawiały się razem, musisz je zgrupować w kodzie HTML. Ale wtedy masz puste pole etykiety, które jest złe. Po prostu zrezygnowałbym z etykiety warunków, ale zachowałbym walidacje.
Corey
1

Ten CSS zadziałał dla mnie:

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

i ten 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>
tomahawk
źródło
To trochę dziwne, że etykieta kontrolna elementu div zawiera zarówno etykietę, jak i dane wejściowe.
devlin carnate