YUI中有一种布局思想:栅格决定宽度,内容决定高度,今天讨论的是自适应宽度的输入框,先上代码:
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)!DOCTYPE htmlhtmlheadmeta charset="utf-8"title宽度自适应输入框/titlelink rel="stylesheet" href="http://yui.yahooapis.com/3.0.0/build/cssreset/reset-min.css"style.col{padding:10px;width:500px;background-color:yellow;}.fluid-input{display:inline-block;width:100%;overflow:hidden;}.fluid-input-inner{display:block;padding-right:10px;#zoom:1;}.fluid-input .text, .fluid-input textarea{border:2px #ccc solid;padding:3px;width:100%;}.fluid-input textarea{height:300px;}/style/headbodydiv class="col"b class="fluid-input"b class="fluid-input-inner"input class="text" type="text"/b/bb class="fluid-input"b class="fluid-input-inner"textarea/textarea/b/b/div/body/html
简单说一下原理:
为了有较好的体验,input[type='text']及textarea一般会有border值及padding值(鄙视某些padding设为0滴淫儿),利用如下公式:
.fluid-input-inner{padding-right:输入框左边框 + 输入框右边框 + 输入框左padding + 输入框右padding}
让输入框继承fluid-input-inner的宽度即可实现自适应;而IE6有个宽度超出自动撑开的bug,故再多套一层fluid-input,宽度100%,溢出隐藏即可。
col宽度随意,在宽度自适应布局中默认为auto,这里方便演示定了宽度。
这里由内而外解说,不过命名是由外而内的。
更进一步
focus时border变为4px咋整?
问的好(其实是偶自己在问),输入框focus后增加class=focus,即变为:
textarea class="focus"/textarea
CSS:
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/).focus{position:relative;left:-2px;border-width:4px !important;}
乡民问答分隔线 -
美女反馈了个bug,IE6下textarea输入文字的时候就自己撑开了(昨晚下班路上也跟我说过,不过我没当回事,嘿~),我试了一下果真如此,解决方法很简单:触发fluid-input-inner的hasLayout即可。