【问题标题】:Vertical align within DIV, with a block element inside the div在 DIV 内垂直对齐,在 div 内有一个块元素
【发布时间】:2023-08-14 07:10:02
【问题描述】:

这总是让我发疯,一直没有找到正确的答案。

我想实现以下目标: http://juicybyte.com/stack-overflow.jpg

意思是,我希望在左侧的 div 上有一个图像,并且文本可以很好地垂直对齐,具体取决于有多少内容。文本div的高度可以固定。

然而,一切都行不通。

<div id="widgetWhite">
<div id="widgetWhiteIcon">
    <a href="#" title="White"><img src="/images/iconWhiteIconTn.png" alt="White Icon" /></a>
</div>
<div id="widgetWhiteContent">
    <p>I would love it if this worked.</p>
    <a href="#">Download PDF</a> 
</div>
</div>

CSS:

#widgetWhiteIcon {
width: 82px;
margin: 0 10px 0 20px;
display: inline-block;
vertical-align: middle;
}

#widgetWhiteContent {
width: 108px;
font: normal normal 11px/14px Arial, sans-serif; 
height: 110px; 
display: inline-block;
vertical-align: middle;
}

#widgetWhiteContent a {
color: #f37032;
}

不太关心IE6.0,可惜需要IE7.0。

感谢您的帮助!

【问题讨论】:

  • 这些天你的问题可以概括为——如何在IE7中垂直对齐?对于所有其他浏览器,您将使用display: table。对于 IE7,请遵循本指南。 jakpsatweb.cz/css/css-vertical-center-solution.html
  • 正如关于 IE7 支持的说明 - MS 已决定在 2012 年上半年之前不提示用户升级到 IE8/9。根据您的人口统计(欧盟、美国),我希望 IE7 支持到年中下降到 1%。所以也许IE7可能没有你想象的那么重要。 IE7 现在已经五岁了!
  • 是的,我真的不支持它,但我的客户坚持这样做,即使我已经向他们展示了统计数据。

标签: html vertical-alignment css


【解决方案1】:

在这里,我根据我链接的网站为您整理了一个解决方案。我没有费心将您现有的 css 映射到其中,但我想您会明白的。

http://jsfiddle.net/M3h6v/5/

<div class="ie7vert1">
    <a href="#" title="White"><img src="http://placehold.it/120x150" alt="White Icon" /></a>            
    <div class="ie7vert2">
        <div class="ie7vert3">         
            <p>I would love it if this worked.</p>
            <a href="#">Download PDF</a> 
            <br style="clear: both;" />
        </div>
    </div>
</div>

 

.ie7vert1 {
    display: table; 
    #position: relative; 
    overflow: hidden;
    border: 1px dashed gray;
    float: left;
    width: 100%;
}

.ie7vert2 {
    #position: absolute; 
    #top: 50%;
    display: table-cell; 
    vertical-align: middle;
}

.ie7vert3 {
    #position: relative; 
    #top: -50%;
    border: 1px dashed red;
}

【讨论】:

  • 这适用于除 IE7 之外的所有浏览器。在 IE7 中,文字放在图标后面,这真的很奇怪。
  • 抱歉,我正在清理 CSS,随后在 IE7 中破坏了我的代码。请看看这个。 jsfiddle.net/M3h6v/5
  • 成功了!你做了什么不同/缺少了什么?我正要放弃并选择一张桌子:P
  • 我删除了 height 和 width 属性,因为我希望内容决定 div 的大小。但是删除宽度会导致 IE7 完全折叠文本 div,因此根本不显示。
【解决方案2】:

vertical-align 属性有两个使用前提:

  • 您尝试垂直对齐的元素必须是同级元素。
  • 您尝试垂直对齐的元素不能是块级元素。

话虽如此,这其实很容易解决:

<div id="widgetWhite">
    <div id="widgetWhiteIcon">
        <a href="#" title="White"><img src="http://placehold.it/100x100" alt="White Icon" /></a>
    </div><div id="widgetWhiteContent">
        <p>I would love it if this worked.</p>
        <a href="#">Download PDF</a> 
    </div>
</div>

请注意,#widgetWhiteIcon 的结束 div 和 #widgetWhiteContent 的开始 div 是接触的:&lt;/div&gt;&lt;div id="widgetWhiteContent"&gt;。这允许您控制这两个元素之间的间距,因为通常在您的标记中 inline 元素之间的任何空间都会显示在演示文稿中。

编辑:您可以等效地将font-size: 0 设置在#widgetWhite 上,而不必担心空格。 font-size 在子元素中继承,因此您需要在之后显式设置它,如下所示:#widgetWhite { font-size: 0; } #widgetWhite * { font-size: 12px; }

CSS:

p { margin: 0; }
#widgetWhite > div { 
    vertical-align: middle;
    display: inline-block; }
#widgetWhiteContent { margin: 0 0 0 4px; }
#widgetWhiteContent a { 
    margin: 1em 0 0;
    display: block; }

预览:http://jsfiddle.net/Wexcode/DcWB8/

【讨论】:

    【解决方案3】:

    您必须首先为包装 div (div#widgetWhiteContent) 设置一个固定高度,以便垂直对齐工作。为了使 div#widgetWhiteContent 中的所有内容与 div#widgetWhiteIcon 垂直对齐,两个 div 的高度应该相同。

    所以一个好的解决方案是为外部 div 设置一个高度,然后将两个子 div 的高度设置为 100%。

    你的 CSS 是这样的

    <style>
        #widgetWhite {
            height: 110px;
        }
    
        #widgetWhiteIcon {
            width: 82px;
            margin: 0 10px 0 20px;
            display: inline-block;
            height: 100%;
        }
    
        #widgetWhiteContent {
            clear: left;
            width: 108px;
            font: normal normal 11px/14px Arial, sans-serif; 
            height: 100%; 
            display: inline-block;
            vertical-align: middle;
        }
    
        #widgetWhiteContent a {
            color: #f37032;
        }
    </style>
    

    【讨论】:

    • 我对为什么 diplay: inline-block 不起作用感到困惑。我想我会这样做,然后做 IE7.0 display: inline-block hack 让它在 IE7.0 中工作。但是我的代码不能以任何形式工作。
    最近更新 更多