如何在不使用CSS'table-cell'属性的情况下在IE7中垂直对齐文本?

时间:2011-04-05 14:13:53

标签: html css internet-explorer-7

我有固定的高度div,其中包含文字。我希望文本在div的中间垂直对齐,但问题在于一些文本是单行的,有些文本分成两行。对于IE8,Chrome和Firefox,使用display: table-cellvertical-align: middle提供了我需要的解决方案:

JS Fiddle is here。从width: 300px上取下星号,以便在文本在一行时查看格式。

但是,IE7不支持display: table-cell属性。我发现的唯一解决方案仅适用于单行,而不适用于可能是1行或2行的文本。如何在IE7中显示它,就像在更现代的浏览器中一样,而不使用任何脚本?

8 个答案:

答案 0 :(得分:1)

IE7 CSS调用如何position:relative divabsolute h6上的vertical-align,并为现代浏览器保留<!--[if IE 7]> <link rel="stylesheet" type="text/css" href="ie7.css"> <![endif]--> 的代码

http://jsfiddle.net/yap59cn3/

div
{
    /* Use inheritance, and override only the declarations needed. */
    position:relative;
}

h6
{
    height:auto; /* override inherited css */
    position:absolute;
    top:45%;
}

<强> ie7.css

{{1}}

目标是让IE7“显得” - 无论你做什么,它都不会像现代浏览器那样漂亮。对我来说,这不值得头痛(甚至不是一点点)。

答案 1 :(得分:1)

就我个人而言,我已经开始(ab)使用填充来获得垂直对齐。如果使用固定高度,它会特别方便,因为您可以使用填充值来偏移高度,以获得完美的全高元素。

注意:此解决方案仅在您事先知道<h6>中将包含哪些文本时才有效。如果你动态添加它,我建议使用wordcounting来判断它是否会换行。

解决方案:

<强> HTML

<div>
    <h6 class="OneLineVertCentered">Here is some text. Look at this lovely text. Isn't it nice?</h6>
</div>

<div style="margin-top: 1em;"> <!-- Margin only for displaying the boxes properly -->
    <h6 class="TwoLineVertCentered">Here is some text. Look at this <br />
        lovely two-line text. Isn't it nice?</h6>
</div>

<强> CSS

div {
    background-color: yellow;
    height: 30px;
    width: 200px;
    width: 300px;
}

h6.OneLineVertCentered,
h6.TwoLineVertCentered {
    font-size: 12px;
    line-height: 1em;
}
    h6.OneLineVertCentered {
        padding-top: 10px;
    }
    h6.TwoLineVertCentered {
        padding-top: 3px;
    }

<强>小提琴: http://jsfiddle.net/Snorbuckle/CnmKN/

代码段(与小提琴相同):

    div {
        background-color: yellow;
        height: 30px;
        width: 200px;
        width: 300px;
    }
    
    h6.OneLineVertCentered,
    h6.TwoLineVertCentered {
        font-size: 12px;
        line-height: 1em;
    }
        h6.OneLineVertCentered {
            padding-top: 10px;
        }
        h6.TwoLineVertCentered {
            padding-top: 3px;
        }
<div>
    <h6 class="OneLineVertCentered">Here is some text.
        Look at this lovely text. Isn't it nice?</h6>
</div>

<div style="margin-top: 1em;">
    <h6 class="TwoLineVertCentered">Here is some text. Look at this <br />
        lovely two-line text. Isn't it nice?</h6>
</div>

答案 2 :(得分:0)

您应该可以使用line-heightvertical-align: middle;完成此操作。

div {
    background-color: yellow;
    height: 30px;
    line-height: 30px;
    width: 200px;
    *width: 300px;
}

h6 {
    font-size: 12px;
    line-height: 1em;
    height: 30px;
    vertical-align: middle;
}

答案 3 :(得分:0)

您可以使用辅助span元素垂直对齐文本,如下例所示:

HTML

<div class="container">
    <span class="aligner"></span>
    <h3>Text to be aligned center in the beloved ie7</h3>
</div> 

CSS

div.container {
    background-color: #000;
    color: #fff;
    height: 300px;
    width: 250px;
    position:relative;
    margin:12px auto;
    text-align:center;
}
.aligner {
    display: inline-block;
    height: 100%; 
    content: ' ';
    margin-right: -0.25em; 
    vertical-align: middle;
}
h3 {
    display: inline-block; 
    vertical-align: middle;
}

小提琴:http://jsfiddle.net/groumisg/dbx4rr0f/

通常情况下,我们会使用伪元素,但ie7(多么惊讶!)不支持:after,:before ... etc。另请注意,ie7不支持display:inline-block,用于默认不内联的元素,如div。要使用display:inline-block for div,你必须使用以下hack:

div {
    display: inline-block;
    *display: inline;
    zoom: 1;
}

正如Inline block doesn't work in internet explorer 7, 6

所建议的那样

答案 4 :(得分:0)

检查出来

http://jsfiddle.net/CnmKN/59/

CSS代码

div {
    background-color: yellow;
    height: 30px;
    width: 200px;
    *width: 300px;
    display:table;
}

h6 {
    font-size: 12px;
    line-height: 1em;
    display: table-cell;
    vertical-align: middle;
    height:90px;
}

答案 5 :(得分:0)

我知道垂直居中元素的另外两种方法比使用table-cell:

1)使用行高:

.element {
height: 60px;
line-height: 60px
}

仅当文字在一行中时才会有效。

2)位置绝对/保证金自动

.parentElement {
position: relative;
}

.element {
position: absolute;
top: 0;
bottom: 0;
margin: auto 0;
}

您可能必须使用高度(自动或值)并显示内联/内联块。试试吧。

答案 6 :(得分:0)

关键点不是使用像素进行对齐,只使用%-s。 甚至可以在IE5上工作:)

here is Demo

.wrapper{
  position: relative;
  width: 100%;
  height: 200px; /* change this value to see alignment*/
  background-color: red; 
  margin: 0 auto;
}

.cell{
  position: absolute;
  display:block;
  background-color: blue;  
  left:50%; 
  top:50%; /*this puches element half down*/
  margin-left:-100px; /* this is the half size of cell width:200px;*/
  margin-top: -.5em; /*this is the half size of font size*/
  width: 200px;  
  color: #fff;
  text-align:center;  
}
<div class='wrapper'>
  <div class='cell'>vertically aligned text</div>
</div>

答案 7 :(得分:-1)

div {
    background-color: yellow;
    height: 400px;
    width: 200px;
    display: table-cell;
    vertical-align: middle;
    width: 300px;
}
h6 {
    font-size: 12px;
    line-height: 1em;
    height: 30px;   
}