Bootstrap 4 select 样式

Bootstrap 4 select styling

在我的 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>

不幸的是,我无法构建 Bootstrap 的自定义版本,所以我必须通过应用纯 css.

来覆盖行为

我创建了一个 JSFiddle 来演示问题。

如何正确地将填充应用到 Bootstrap v4 表单中的 select 元素?

内边距应用正确,但您必须更改高度

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

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

您尝试将填充应用于 Bootstrap 4 form-control 个元素的方式不正确。因为 Bootstrap 4 具有原生的 类 专门设计来满足您所有的间距需求。还因为像这样应用 css 黑客可能(而且经常)导致需要更多 css 黑客来解决由原始 css 黑客引起的问题的问题。

因此,请使用 p-*m-* 类 为您的元素应用间距并避免不必要的修改。

有关 Bootstrap 4 个间距实用程序的更多信息:

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

编辑:

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

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

这是完整的工作代码段(单击 "run code snippet" 并展开到全屏以进行并排比较):

<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,因为普通的 select 本身就有问题。 custom-select 是专门为简化样式而设计的,因为普通的 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>

在 CSS select 上使用更多特异性或覆盖 Bootstrap 高度:

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

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

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