使用隐藏的标签元素触发文件输入提示 - Safari

ADr*_*anC 4 html css label

我有代码:

<label name="xs" id="xs" for="fileselect">
  <p class="add_atach">Test</p>
</label>
<input type="file" id="fileselect" name="fileselect[]" multiple="multiple" style="display:none;" />
Run Code Online (Sandbox Code Playgroud)

如果我离开display:none;点击什么都不会发生。如果我将其更改为visibility:hidden;,则代码有效,但元素占用的空间仍然存在。我该怎么办?

Jos*_*ier 6

input即使元素被隐藏,现代浏览器也会触发文件元素打开display: none;但正如您所注意到的,这在 Safari 中不起作用。此外,它也不适用于 IE8 及以下。

作为一种解决方法,这里有两个替代解决方案,它们应该适用于所有情况。

最简单的选择是将元素的定位设置为fixed,然后使用right: 100%/的组合将其定位在屏幕之外bottom: 100%

示例在这里

input[type="file"] {
    position: fixed;
    right: 100%;
    bottom: 100%;
}
Run Code Online (Sandbox Code Playgroud)

您还可以使用通常用于在视觉上隐藏内容但允许它对屏幕阅读器保持可见的 CSS :

示例在这里

input[type="file"] {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0,0,0,0);
    border: 0;
}
Run Code Online (Sandbox Code Playgroud)

这两个选项都有效地隐藏了input元素而不使用display: none.