首页 > 开发 > CSS > 正文

FireFox下文本框/域百分比自适应数值padding显示bug解决方案

2024-07-11 08:29:07
字体:
来源:转载
供稿:网友
一、问题描述

我是流体布局控,经常会遇到文本框以及文本域宽度100%自适应显示的情况。

如下效果图:
文本域宽度100%显示 张鑫旭-鑫空间-鑫生活

在窄屏下,上面的文本框宽度也要跟着外部宽度变小。

难点
对于文本框或者文本域,光标最好距离左侧边缘有一定的间距。因此,我们基本上都有类似下面的设置:

复制代码
代码如下:
input { padding-left: 10px; }

但是,如果只考虑文本框本身(父标签无其他特殊处理),这一套在流体环境下是行不通的,因为固定的padding数组无法让文本框永远100%自适应外部的宽度,至少非现代浏览器下是如此!//zxx: CSS3计算(calc())就是为了解决这类问题才诞生的!

复制代码
代码如下:
input { width: calc(100% - 10px); padding-left: 10px; }

目前而言,好的解决之道是widthpadding均采用百分比值,例如下面这样:

复制代码
代码如下:
input { width: 92%; padding-left: 4%; padding-right: 4%; }

问题
上面这种写法,IE6+, Opera, Chrome, Safari浏览器都是显示很OK的;唯独FireFox火狐浏览器,其虽然宽度渲染正常,但是,光标的位置确是顶头的(与数值padding的显示完全不同)。

如下截图:
FireFox下面文本框百分比padding显示的问题截图

这个问题再FireFox浏览器下存在已经有3年之久了,到现在还没有修复。

如何修复这个问题呢?

//zxx: 可能有人会提议div模拟文本框(即div设置padding值), 文本框本身no border, no padding, 且width:100. 这种操蛋的方法我是一点都不喜欢的(纯属个人喜好,没有攻击的意思),一是啰嗦;二来文本框本身可能就有box-shadow, outline以及内联的交互验证UI(如验证非法红色外发光),难道你想把这些都抹杀掉??

更新2012-11-30

注意:FireFox 17+已经修复了该问题!

二、text-indent修复法

firefox浏览器下的问题其实只是文字的位置问题而已,其本身的宽度渲染都是准确的,因此,我们可以把解决问题的关键点放在解决文字不缩进的问题上——我们自然而然就会想到文字缩进属性text-indent.

于是,在FireFox浏览器下,我们只要设置:

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表