Chrome通过自定义样式为文本输入添加了意外的填充

Moj*_*imi 7 html css css3 twitter-bootstrap bootstrap-4

简而言之,这个小提琴在Firefox上运行正常,但在Chrome上却没有.

输入与选择具有相同的样式,应该是相同的高度,但它不在Chrome上,我该如何解决这个问题?

经过进一步检查,它似乎与溢出属性有关,不知道为什么

@import url(https://fonts.googleapis.com/css?family=Open+Sans);
.my-custom-forms {
    font-family: 'Open Sans',serif;
}
select.my-custom-forms, input.my-custom-forms{
    border-top: none;
    border-left: none;
    border-right: none;
    border-radius: 0;
    border-bottom: 2px solid lightblue;
    padding: .25rem .1rem .25rem .1rem;
    overflow: auto;
    width: 100%;
    background-color: transparent;
    transition: border .5s ease;
}
Run Code Online (Sandbox Code Playgroud)
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container m-3">
  <div class="row">
    <div class="col-3">
      <select class="my-custom-forms">
        <option>Option</option>
      </select>
    </div>
    <div class="col-3">
      <select class="my-custom-forms">
        <option>Option</option>
      </select>
    </div>
    <div class="col-6">
      <input placeholder="text" class="my-custom-forms">
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我使用Bootstrap作为准系统,但不确定它是否与问题有关.

Seb*_*sch 1

问题在于用户代理样式表上定义的元素overflow: visible !important<select>您不能使用<select>元素本身的 CSS 或内联样式来覆盖此规则。

以下 CSS 规则始终有效:

select:not(:-internal-list-box) {
    overflow: visible !important;
}
Run Code Online (Sandbox Code Playgroud)

如果将溢出设置为.my-custom-formsvisible与元素相同<select>),则所有控件都会获得相同的高度。


因此,您可以使用以下解决方案(使用您当前的代码):

select:not(:-internal-list-box) {
    overflow: visible !important;
}
Run Code Online (Sandbox Code Playgroud)
@import url(https://fonts.googleapis.com/css?family=Open+Sans);

.my-custom-forms {
  font-family: 'Open Sans',serif;
}

select.my-custom-forms, input.my-custom-forms {
  background-color: transparent;
  border: none;
  border-bottom: 2px solid lightblue;
  border-radius: 0;
  overflow: visible;
  padding: 0.25rem 0.1rem;
  transition: border 0.5s ease;
  width: 100%;
}
Run Code Online (Sandbox Code Playgroud)


我还建议在相应的元素上使用.form-row和类。.form-control现在您可以覆盖 CSS 规则select.form-control:not([size]):not([multiple]),因此元素的高度<select>不会被计算,而是取决于指定的padding

<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet" />
<div class="container m-3">
  <div class="row">
    <div class="col-3">
      <select class="my-custom-forms">
        <option>Option</option>
      </select>
    </div>
    <div class="col-3">
      <select class="my-custom-forms">
        <option>Option</option>
      </select>
    </div>
    <div class="col-6">
      <input placeholder="text" class="my-custom-forms">
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)
@import url(https://fonts.googleapis.com/css?family=Open+Sans);

.my-custom-forms {
  font-family: 'Open Sans',serif;
}

select.form-control.my-custom-forms:not([size]):not([multiple]) {
  height: auto !important;
}

select.my-custom-forms, input.my-custom-forms {
  background-color: transparent;
  border: none;
  border-bottom: 2px solid lightblue;
  border-radius: 0;
  overflow: visible;
  padding: 0.25rem 0.1rem;
  transition: border 0.5s ease;
  width: 100%;
}
Run Code Online (Sandbox Code Playgroud)