YUI中有一種布局思想:柵格決定寬度,內容決定高度,今天討論的是自適應寬度的輸入框,先上代碼:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>寬度自適應輸入框</title> <link 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> </head> <body> <div class="col"> <b class="fluid-input"><b class="fluid-input-inner"><input class="text" type="text"></b></b> <b 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:
.focus{position:relative;left:-2px;border-width:4px !important;}
———————— 鄉民問答分隔線 ————————-
美女@jeannewoo反饋了個bug,IE6下textarea輸入文字的時候就自己撐開了(昨晚下班路上@ivane也跟我說過,不過我沒當回事,嘿~),我試了一下果真如此,解決方法很簡單:觸發fluid-input-inner的hasLayout即可。