【问题标题】:Why absolute and relative positioning does not work as expected in firefox?为什么绝对和相对定位在 Firefox 中不能按预期工作?
【发布时间】:2012-11-13 22:16:40
【问题描述】:

为什么下面的小提琴只在 Firefox 中不能正常工作(文本消失)?

我在下面的小提琴中想要做的是,

我不喜欢浏览器的文件上传控件,我正在创建 CSS 让它看起来像一个按钮。文件上传控件包含在一个 div 中,并通过 opacity 属性隐藏。将 CSS 添加到外部 div 以使其看起来像一个按钮。

标记和 CSS

HTML:

<button id="Ctrl" class="button" type="button">Query</button>
<div id="file" class="file-label appletButton">
New File
<input id="FileInput" class="file-input" type="file" name="fileinput" multiple></div>

CSS

.file-input {
    width: 100%;
    position: absolute;
    box-sizing: border-box;
    top: 0;
    right: 0;
    margin: 0;
    border: solid transparent;
    border-width: 0 0 100px 200px;
    cursor: pointer;
    opacity: 0;
    filter: alpha(opacity=0);
    -ms-filter:'progid:DXImageTransform.Microsoft.Alpha(opacity=0)';
    -moz-transform: translate(-300px, 0) scale(4);
    -o-transform: 'translate(250px, -50px) scale(1)';
}
.file-label {
    padding: 5px;
    position: relative;
    display: inline-block;
    overflow: hidden;
}
.appletButton {
    background: linear-gradient(to bottom, #8ABAFE 0%, #5788C7 100%) repeat scroll 0 0 transparent;
    border: 1px solid #31537F;
    color: #F5F5F5;
    text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.2);
}

http://jsfiddle.net/6ZuPM/7/

在上面的小提琴中,首先点击“查询”按钮。然后按 TAB 键。 “新文件”文本消失。但是您仍然可以通过单击蓝色按钮来调用浏览窗口。为什么文字消失了?

【问题讨论】:

  • 你能解释一下你想要达到的效果吗?我在 chrome 和 firefox 上的显示是一样的(除了你用 mozilla 风格编码的渐变背景)
  • 我正在尝试隐藏文件上传控件。最重要的是,我想显示类似 CSS 样式的按钮。我在上面的例子中面临的问题是,当我按 TAB 时,文件上传控件上的文本消失了。即使我 TAB,我也希望文本在那里。

标签: css file firefox input absolute


【解决方案1】:

当您点击 Tab 时,浏览器会将焦点放在文件输入上,因为这是 Tab 键顺序中的下一个内容。

当某物获得焦点时,浏览器会尝试将其滚动到视图中。因此,在这种情况下,&lt;div class="file-label"&gt; 会滚动,但需要滚动多远才能将文件输入显示在视图中,这会将文本滚动到视图之外。

【讨论】:

  • 我怎样才能避免这种情况?
  • 通过相应地设置 tabindex 来使文件输入不能以 tab 为焦点?
  • 你好鲍里斯。我尝试过使用 tabindex。它在父窗口中工作正常。但是在 jquery 弹出窗口上......我无法打开文件选择对话框。知道为什么吗?
  • @user1853164 不是随便的,不。
  • 文本消失问题可以通过将“font-size=100px”添加到“.file-input”来解决,并且必须删除“Width=100%”。但字体大小不限于 100 像素。您可以根据需要增加其价值。
【解决方案2】:

关于位置:相对和位置:绝对:

 position:relative;

将您的元素保持在页面的流动中,您甚至可以在其上指定浮动。它起源于它的父代。

 position:absolute;

从页面流中删除您的元素。它以 body 元素为原点,除非它嵌套在 position:relative element (your example) 中,否则 position:absolute 元素以其父元素为原点。

【讨论】:

  • 一个绝对定位的元素将相对于下一个父元素位于 position 而不是static(默认)
  • 感谢您的精确,但不确定它是否对您有任何帮助
猜你喜欢
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
相关资源
最近更新 更多