代码之家  ›  专栏  ›  技术社区  ›  Luke

Bootstrap 4选择样式

  •  1
  • Luke  · 技术社区  · 7 年前

    在Bootstrap v4表单中,我增加了 form-control 元素,但我注意到此填充未应用于 select 要素

    .form-control {
      padding: .6rem .8rem !important;
      border: 2px solid #ced4da !important;
      transition: none !important;
    }
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/css/bootstrap.min.css" integrity="sha384-Zug+QiDoJOrZ5t4lssLdxGhVrurbmBWopoEl+M6BdEfwnCJZtKxi1KgxUyJq13dy" crossorigin="anonymous">
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/js/bootstrap.min.js" integrity="sha384-a5N7Y/aK3qNeh15eJKGWxsqtnX/wWdSZSKp+81YjTmS15nvnvxKHuzaWwXHDli+4" crossorigin="anonymous"></script>
    
    <div class="container-fluid">
      <div class="row">
        <div class="col-md-12">
          <form>
            <div class="form-row">
              <div class="form-group col-md-6">
                <label for="inputEmail4">Email</label>
                <input type="email" class="form-control" id="inputEmail4" placeholder="Email">
              </div>
              <div class="form-group col-md-6">
                <label for="inputPassword4">Password</label>
                <input type="password" class="form-control" id="inputPassword4" placeholder="Password">
              </div>
              <div class="form-group col-md-6">
                <label for="inputState">State</label>
                <select id="inputState" class="form-control">
                  <option selected>Choose...</option>
                  <option>...</option>
                </select>
              </div>
            </div>
            <button type="submit" class="btn btn-primary">Sign in</button>
          </form>
        </div>
      </div>
    </div>

    不幸的是,我无法构建自定义版本的引导,因此我必须通过应用纯css来覆盖行为。

    我创建了一个 JSFiddle 这说明了问题所在。

    如何将填充正确应用于 选择 引导v4表单中的元素?

    3 回复  |  直到 7 年前
        1
  •  2
  •   WebDevBooster    7 年前

    您尝试将填充应用于引导4的方式 form-control 元素不正确。因为Bootstrap 4有专门设计的本机类来满足所有间距需求。此外,因为应用这样的css黑客可以(而且经常会)导致问题,需要更多的css黑客来修复原始css黑客造成的问题。

    所以,使用 p-* m-* 类将间距应用于元素并避免不必要的修改。

    有关Bootstrap 4 spacing Utility的详细信息:

    https://getbootstrap.com/docs/4.0/utilities/spacing/

    编辑:

    要解决自定义css的问题,需要添加以下规则:

    select.form-control{
        height: auto !important;
        padding: .6rem .8rem calc(.6rem + 1px) .8rem !important;
    }

    以下是完整的工作代码段(单击“运行代码段”并展开到全屏以进行比较):

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
        
    <style>
    .form-control {
        padding: .6rem .8rem !important;
        border: 2px solid #ced4da !important;
        transition: none !important;
    }
    select.form-control{
        height: auto !important;
        padding: .6rem .8rem calc(.6rem + 1px) .8rem !important;
    }
    </style>
    
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-12">
                <form>
                    <div class="form-row">
                        <div class="form-group col-md-6">
                            <label for="inputEmail4">Email</label>
                            <input type="email" class="form-control" id="inputEmail4" placeholder="Email">
                        </div>
                        <div class="form-group col-md-6">
                            <label for="inputPassword4">Password</label>
                            <input type="password" class="form-control" id="inputPassword4" placeholder="Password">
                        </div>
                        <div class="form-group col-md-6">
                            <label for="inputState">State</label>
                            <select id="inputState" class="form-control">
                                <option selected>Choose...</option>
                                <option>...</option>
                            </select>
                        </div>
                        <div class="form-group col-md-6">
                            <label for="inputEmail4">Test</label>
                            <input type="email" class="form-control" id="inputEmail4" placeholder="Choose... (normal input for comparison)">
                        </div>
                    </div>
                    <button type="submit" class="btn btn-primary">Sign in</button>
                </form>
            </div>
        </div>
    </div>

    编辑2:

    更好的解决方案是使用 .custom-select 因为正常的选择本身就是错误的。这个 custom-select 是专为简单的造型而设计的,因为普通的select车太多了(而且没什么可做的)。

    下面是一个带有自定义选择的代码段,用于比较:

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
        
    <style>
    .form-control {
        padding: .6rem .8rem !important;
        border: 2px solid #ced4da !important;
        transition: none !important;
    }
    select.form-control{
        height: auto !important;
        padding: .6rem .8rem calc(.6rem + 1px) .8rem !important;
    }
        
    .custom-select {
        height: auto !important;
        padding: .6rem .8rem !important;
        border: 2px solid #ced4da !important;
        transition: none !important;
    }
    </style>
    
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-12">
                <form>
                    <div class="form-row">
                        <div class="form-group col-md-6">
                            <label for="inputEmail4">Email</label>
                            <input type="email" class="form-control" id="inputEmail4" placeholder="Email">
                        </div>
                        <div class="form-group col-md-6">
                            <label for="inputPassword4">Password</label>
                            <input type="password" class="form-control" id="inputPassword4" placeholder="Password">
                        </div>
                        <div class="form-group col-md-6">
                            <label for="inputState">State</label>
                            <select id="inputState" class="form-control">
                                <option selected>Choose...</option>
                                <option>...</option>
                            </select>
                        </div>
                        <div class="form-group col-md-6">
                            <label for="inputEmail4">Test</label>
                            <input type="email" class="form-control" id="inputEmail4" placeholder="Choose... (normal input for comparison)">
                        </div>
                        
                        <div class="form-group col-md-6">
                            <label for="inputState">custom-select:</label>
                            <div class="input-group">
                                <select class="custom-select" id="inputGroupSelect04">
                                    <option selected>Choose... (custom-select)</option>
                                    <option value="1">One</option>
                                    <option value="2">Two</option>
                                    <option value="3">Three</option>
                                </select>
                            </div>
                        </div>
                        
                        <div class="form-group col-md-6">
                            <label for="inputEmail4">Test</label>
                            <input type="email" class="form-control" id="inputEmail4" placeholder="Choose... (normal input for comparison)">
                        </div>
                    </div>
                    <button type="submit" class="btn btn-primary">Sign in</button>
                </form>
            </div>
        </div>
    </div>
        2
  •  1
  •   Vineesh    7 年前

    正在正确应用填充,但必须更改高度

    select.form-control{
      height:auto !important;
    }
    

    https://jsfiddle.net/oon0pmup/3/

        3
  •  1
  •   Carol Skelly    7 年前

    在CSS选择器上使用更多特殊性来覆盖引导高度:

    select.form-control:not([size]):not([multiple]) {
        height: initial;
    }
    

    选择将与文本输入的高度相同(假设对所有输入应用相同的填充、边框等)。

    https://www.codeply.com/go/rJKOyAx1QA