2013-10-07 123 views
2

请在这里找到我的fiddle,我想了解div.panel内嵌块元素(div.lbl)的垂直对齐背后的逻辑。块元素内嵌块元素的垂直对齐

<style> 
    label, .lbl { 
     width:292px; 
     display:inline-block; 
     /* text-align:left; */ 
    } 
    .val { 
     display:block; 
    } 
    .panel { 
     border-bottom: 1px dashed red; 
    } 


    .lbl { 
     color: magenta; 
    } 
    label { 
     color:black; 
    } 
</style> 
<div class="panel"> 
    <div class="lbl" for="firstname">First name: 
     <INPUT class="val" type="text" id="firstname" /> 
    </div> 
    <div class="lbl" for="description">Long field name Long field name Long field name Long field name Long field name Long field name Long field name: 
     <textarea rows="5" cols="25" class="val" id="description" ></textarea> 
    </div> 
    <div class="lbl" for="lastname">Long Last name Long Last name Long Last name 
     <INPUT class="val" type="text" id="lastname" /> 
    </div> 
</div> 
<div class="panel"> 
    <div class="lbl" for="firstname1">Long First name Long First : 
     <INPUT class="val" type="text" id="firstname1" /> 
    </div> 
    <div class="lbl">First name: 
     <textarea rows="5" cols="25" class="val" id="description1"></textarea> 
    </div> 
    <div class="lbl">Long field name Long field name Long field name Long field name Long field name: 
     <fieldset class="bank-address"> 
       <label for="address1">Bank Address Line 1</label> 
      <input type="text" value="" id="address1" name="address1" maxlength="9" /> 

       <label for="address1">Bank Address Line 2</label> 
      <input type="text" value="" id="address2" name="address2" maxlength="9" /> 
        <label for="address1">Bank Address Line 3</label> 
      <input type="text" value="" id="address3" name="address3" maxlength="9" /> 
        <label for="address1">Bank Address Line 4</label> 
      <input type="text" value="" id="address4" name="address4" maxlength="9" /> 
     </fieldset> 
    </div> 
</div> 

如果你注意到,所有的标签文本(洋红色)的垂直对齐底部和各自领域的元素垂直对齐顶部使得文本的底部在同一行和域元素的顶部对齐似乎排在同一行。 (Click here查看小提琴页面的显示)这是我试图实现的对齐方式,适用于Firefox,Chrome & Safari。但在所有IE中看起来不同。

在IE中,似乎所有的div.lbl都有垂直对齐的底部。

有没有办法可以在IE中带来同样的效果呢?

感谢。

+0

您是否愿意对您的标记进行微小更改?我从来没有注意到这种行为,所以它很有趣。 –

+0

是的,我可以尝试更改提供的相同对齐效果的标记。也请检查此链接http://stackoverflow.com/questions/19005614/aligning-grid-based-form-elements-and-their-labels这是早些时候发布相同的对齐效果。 –

回答

1

您可以通过在输入框周围添加div元素,然后将类为“val”的元素设置为float:left来获得所需的效果。对字段集也做同样的事,并给它类“val”。

添加的div会导致输入元素在新行上开始,并且float将输入元素带出流,并将每个行内块框中的最后一行文本用作该行的基线框。

请参阅http://jsfiddle.net/DaZWW/

+0

太棒了,这在FF/Chrome/Safari/IE9/IE8中很有魅力,但在IE7中没有,但我希望能找到一些解决办法。太感谢了! –

+0

我添加了几个ie7特定的CSS,并试图在IE7中实现相同的对齐效果,请看这个小提琴http://jsfiddle.net/WmQ24/4/show/,但我不知道如何清除div.panel ,特别是有一些位置:绝对元素。你有什么想法 ? –

+0

花了一些时间之后,我意识到它不可能清除绝对定位的div,因为它们遵循与正常顺序相比不同的顺序。 –