CSS:如何使自定义文件上传按钮占全宽(按钮工作)

时间:2015-05-29 06:01:21

标签: html css width block 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>

我的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;
}

3 个答案:

答案 0 :(得分:3)

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

来自MDN

  

HTML Label Element()表示用户界面中项目的标题。通过将控制元素放在元素内部或使用for属性,它可以与控件关联。这种控制称为标签元素的标记控制。

因此,每当您点击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;
}
<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>

<强> Working Fiddle

答案 1 :(得分:1)

您还需要将width属性应用于包含<div>的内容。一旦div具有完整的大小,那么只有内部的按钮可以具有全宽。

为简单起见,我已对html进行了更改,您可以将其移至适当的类。

<div class="col-3 frmCaption">Attachments:</div>
<div class="col-9">
    <div class="customUpload btnUpload btnM" style="width:100%;">
        <span>Upload files</span>
        <input type="file" class="upload" style="width:100%;"/>
    </div>
</div>

JS Fiddle

或者您可以使用此CSS并将其添加到div和文件上传中,

.fullwidth
{
    width : 100%;
}

<div class="col-3 frmCaption">Attachments:</div>
<div class="col-9">
    <div class="customUpload btnUpload btnM fullwidth">
        <span>Upload files</span>
        <input type="file" class="upload fullwidth"/>
    </div>
</div>

答案 2 :(得分:0)

使按钮取12个cols(当你使用12 col系统时),因为这是可用的cils的最大数量,这样elemts将占用它所包含的div的大小