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

回答:


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>

OK 3番目の編集:

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)追加しても大丈夫かもしれません。
Roland

疑似クラスと疑似要素を区別するには、を使用できます::afterレベル3のCSS憶測は出ています。
ニヨンガボ

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 2017年

7

.form-group .required .control-label:afterおそらくする必要があります.form-group.required .control-label:after。.form-groupと.requiredの間のスペースの削除が変更です。


ありがとう!ブートストラップ2.3でも動作します .control-group.required .control-label:after { content:"*"; color:red; }
edditor

4

他の2つの答えは正しいです。CSSセレクターにスペースを含めると、子要素をターゲットにします。

.form-group .required {
    styles
}

「フォームグループ」のクラスを持つ要素内にある「必須」のクラスを持つ要素をターゲットにしています。

スペースがない場合は、両方のクラスを持つ要素をターゲットにします。「必須」および「フォームグループ」


これは、元の質問とは別の問題です。しかし、あなたのCSSはあなたが言っていることを正確に実行しています。入力フィールドではなく、ラベルフィールド(契約条件では空白)にアスタリスクを付けています。それらを一緒に表示したい場合は、HTMLで一緒にグループ化する必要があります。しかし、あなたは悪い空白のラベルフィールドを持っています。契約条件のラベルは破棄しますが、検証は維持します。
Corey

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にcontrol-labelがあるのは少し奇妙です。
devlin carnate
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.