CSS:如何使自定义文件上传按钮采用全宽(按钮有效)

kee*_*279 2 html css block width fixed-width

我是 CSS 新手,希望有人能帮助我解决这个问题。

我正在尝试将简单的自定义样式应用于文件上传按钮(作为HTML 表单的一部分),使其看起来与页面上的其他按钮相似,并在跨浏览器上获得相似的外观。

到目前为止,我已经按预期工作了以下内容。我现在唯一的问题是我希望按钮占据其父 div 的完整宽度(在我的例子中,这将跨越页面的 9/12('col-9'))。

我尝试添加width: 100%;到 CSS 但按钮不再起作用。

我的HTML:

<div class="col-3 frmCaption">Attachments:</div>
<div class="col-9">
    <div class="customUpload btnUpload btnM">
        <span>Upload files</span>
        <input type="file" class="upload" />
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我的CSS:

.btnDefault, .btnUpload {
    background-color: #FFFFFF;
    border: 1px solid #CCCCCC;
    color: #333333;
    cursor: pointer;
    font-weight: 400;
    display: inline-block;
    padding: 6px 12px;
    text-align: center;
    text-decoration: none;
    vertical-align: middle;
}       
.btnDefault:focus, .btnDefault:hover, .btnUpload:focus, .btnUpload:hover {
    background-color: #E6E6E6;
}
.btnM {
    border-radius: 4px;
    font-size: 14px;
    padding: 6px 12px;
}
.customUpload {
    overflow: hidden;
    position: relative;
}
.customUpload input.upload {
    cursor: pointer;
    margin: 0;
    opacity: 0;
    filter: alpha(opacity=0);
    padding: 0;
    position: absolute;
    right: 0;
    top: 0;
}
Run Code Online (Sandbox Code Playgroud)

Mr_*_*een 5

要设置输入元素的样式,您需要实际设置其label元素的样式。

来自MDN

HTML 标签元素 () 表示用户界面中项目的标题。可以通过将控件元素放置在元素内或使用 for 属性来将其与控件关联。这样的控件称为标签元素的带标签控件。

因此,每当您单击 a 时label,都会触发附加的输入。

因此,只需将输入元素包装在标签中而不是 div 中,然后根据需要拉伸即可。这将解决你的问题。

.btnDefault,
.btnUpload {
  background-color: #FFFFFF;
  border: 1px solid #CCCCCC;
  color: #333333;
  cursor: pointer;
  font-weight: 400;
  display: inline-block;
  padding: 6px 12px;
  text-align: center;
  text-decoration: none;
  vertical-align: middle;
}
.btnDefault:focus,
.btnDefault:hover,
.btnUpload:focus,
.btnUpload:hover {
  background-color: #E6E6E6;
}
.btnM {
  border-radius: 4px;
  font-size: 14px;
  padding: 6px 12px;
}
.customUpload {
  overflow: hidden;
  position: relative;
  display: block;
}
.customUpload input.upload {
  cursor: pointer;
  margin: 0;
  opacity: 0;
  filter: alpha(opacity=0);
  padding: 0;
  position: absolute;
  right: 0;
  top: 0;
}
Run Code Online (Sandbox Code Playgroud)
<div class="col-3 frmCaption">Attachments:</div>
<div class="col-9">
  <label class="customUpload btnUpload btnM"> <span>Upload files</span>

    <input type="file" class="upload" />
  </label>
</div>
Run Code Online (Sandbox Code Playgroud)

工作小提琴