巧用:empty解决webkit核心浏览器text

我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  
您的位置:首页 > Tips > 巧用:empty解决webkit核心浏览器text-indent的bug

巧用:empty解决webkit核心浏览器text-indent的bug
神飞 发表于 20. Apr, 2011, 分类: Tips , 23 条评论 »
标签:bug & WebKit

昨天在项目中遇到要在一个输入框中使用缩进的情况,要用text-indent首行缩进2个文字。然后发现在webkit下,在输入框内容为空的时候,光标位置没有缩进,还是在行首,输入任意字符后,缩进才被激活。

HTML代码如下:

1
<input type="text" style="text-indent:2em" http://www.qianduan.net>

查看demo

这里无论是input元素还是textarea,或是其它设置了contentEditable=”true”的元素,都能必现这个bug。

IE各版本,Firefox均正常,只有chrome和safari等webkit内核的浏览器才有这个问题。

这里百思不得其解,也尝试了很多方法,均无效。

后来和小李刀刀、poor聊到这个问题,突然想到:empty伪类,立刻测试,果然可以解决——虽然只是曲线模拟解决…

1
input[type="text"]:empty{padding-left:2em;}

然后在chromium社区提交了个bug单,不知道会不会被无视。

PS:Opera在这里也有些小问题,input元素缩进表现正常,textarea元素不支持缩进,contentEditable=”true”元素和webkit表现一样。

作者: 神飞
爱好前端设计与开发,崇尚一目了然的设计。现居深圳,就职于腾讯ISUX团队 Follow me on twitter @qianduan
如果你喜欢本文,欢迎 订阅本站 以获得本站最新内容。

您或许也会喜欢:
  • 使用CSS修正一切:20多个常见Bug及其修正方法
  • IE bug: 消失的绝对定位元素
  • IE bug: 1像素的dottedhttp://www.qianduan.netdashed边框
  • 用于WebKit的CSS诀窍
  • mac下网页中文字体优化
  • 修正IE6的bug的10个技巧
  • CSS自定义滚动条样式
  • webkit对于CSS3渐变样式语法的更新
  • 自定义webkit搜索框样式
  • 反webkit之战

    23 个评论
    • 小李刀刀 发表于Apr 20, 2011 at 16:24

      V5!!

      回复
    • adengweb 发表于Apr 20, 2011 at 16:49

      飞哥威武。!

      回复
    • fireyy 发表于Apr 20, 2011 at 17:16

      这样 placeholder 的文字还是没有被缩进…

      回复
      • 神飞 发表于Apr 20, 2011 at 23:22

        是的,不过可以用属性选择器或者::-webkit-input-placeholder来解决,囧,又复杂了~~

        回复
        • fireyy 发表于Apr 21, 2011 at 11:17

          我的 chrome 12.0.733.0 dev 用 ::-webkit-input-placeholder 只能定义 文字 样式而已,不支持 margin padding text-indent 等

          回复
        • 丸子 发表于Apr 20, 2011 at 18:18

          解决了都不到后宫汇报下

          回复
        • wo_is神仙 发表于Apr 20, 2011 at 21:47

          为什么不用padding呢

          回复
          • ZH CEXO 发表于Apr 20, 2011 at 21:52

            padding会对整个textarea起效,而不是单单第一行吧

            回复
          • ZH CEXO 发表于Apr 20, 2011 at 21:50

            demo在Firefox4下,第二个框还是会出现问题

            回复
            • natsu 发表于Apr 21, 2011 at 10:51

              我也是用ff4
              第二个框還是有問題

              回复
            • 两三点 发表于Apr 21, 2011 at 15:13

              这都行“` 总算又见到一个webkit的bug了,很少发现啊。。。LZ V5

              回复
            • 刀侠剑客 发表于Apr 24, 2011 at 10:13

              FF4下好像第二个框并没有缩进

              回复
            • vimest 发表于Apr 28, 2011 at 15:14

              如果这写这句:input[type="text"]:empty{padding-left:2em;},就只有支持这些选择器的浏览器能显示咯,如果只有text-indent:2em,又会出现上面说的问题,在webkit下没缩进,但如果两个声明都写,启不会是出现是4em?

              回复
            • lovedota 发表于May 6, 2011 at 07:44

              貌似IE6也有这个问题!

              回复
            • 馨馨 发表于May 17, 2011 at 11:51

              不对啊,我在chrome safari中测试,缩进正常啊。

              回复
            • lala 发表于May 27, 2011 at 18:07

              可以

              回复
            • Travis 发表于May 28, 2011 at 00:29

              我最近也发现了这个bug。

              回复
            • 乐乐行 发表于Jun 10, 2011 at 23:22

              太棒了。

              回复
            • 木白 发表于Jul 7, 2011 at 19:40

              对不起,同馨馨一样在11.50的opera下测试没有这个问题:

              text-indent显示缩进正常

              回复
              • 神飞 发表于Jul 7, 2011 at 21:58

                可能opera 11.50修正了,11.10有这个问题

                回复
                • 木白 发表于Jul 8, 2011 at 15:04

                  哦 谢谢回复

                  回复
                • gafish 发表于Sep 30, 2011 at 14:29

                  chrome14表示有这个问题,而且 input[type="text"]:empty{padding-left:2em;} 加上后,input里写了内容同样生效,叠加了2em,会出现4em的情况。

                  回复
                • 锐风 发表于Nov 14, 2013 at 16:24

                  Chrome 31 测试, textarea:empty { padding-left: 2em } 会导致所有行前都缩进

                  回复

                  发表评论