垂直对齐图像旁边的多行文本 - 全部居中

时间:2013-05-01 02:50:28

标签: css positioning vertical-alignment

甚至不确定这是否可行,但我想我会问。我已经搜索并尝试了许多“解决方案”,而我正在寻找什么。

容器宽940,高100。我想要在其右侧包含多行文本的图像。这两者作为一个整体应该在940x100内水平和垂直居中。我不会有图像或文字的宽度,因为这会改变 - 特别是因为我在滑块中使用它。

虽然我可以通过内部容器上的上边距/填充“模仿”这个,但我希望有一些明确的东西,而不是边距/填充的猜测。

我正在使用flexslider,因此格式如下所示。

    <div id="awards">
        <div class="flexslider">
            <ul class="slides">
                <li>    
                    img - multiple lines of text
                </li>
            </ul>
        </div>
    </div>


#awards .flexslider{
height:100px;
text-align:center;
width:940px;
margin:0 auto;
border:1px #dedede solid;
background:#f1f1f1;
-moz-border-radius: 6px;
-webkit-border-radius: 6px;
border-radius: 6px;
}

编辑:除了使用基于表格的布局这一事实之外,这完全符合我的要求:

    <div id="awards">
        <div class="flexslider">
            <ul class="slides">
                <li>
                    <table>
                        <tr>
                            <td style="width:150px"><img alt="" height="24" src="/images/logo.png" width="150"></td>
                            <td>This is a test of the comment section and if I make this larger and larger?<br />test.com</td>
                        </tr>
                    </table>            
                </li>
            </ul>
        </div>
    </div>

#awards .flexslider{
color:#222222;
height:100px;
width:940px;
margin:0 auto;
border:1px #dedede solid;
background:#ffffff url('/images/bg_diag.png') repeat;
-moz-border-radius: 8px;
-webkit-border-radius: 8px;
border-radius: 8px;
}

#awards table{
width:auto;
height:100px;
margin:0 auto;
}

#awards table img{
margin-right:30px;
}

#awards table td{
height:100px;
vertical-align:middle;
}

2 个答案:

答案 0 :(得分:0)

试试这个(原版的编辑版):

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">

<style media="all">

#awards {
    width:940px;
    padding: 20px 0;
    margin:0 auto;
    border:1px #dedede solid;
    background:#f1f1f1;
    -moz-border-radius: 6px;
    -webkit-border-radius: 6px;
    border-radius: 6px;
}

#awards .flexslider{
    display: table;
    table-layout: fixed;
    margin: 0 auto;
    height: 100%;
}

.flexslider ul {
    list-style: none; 
    padding-left: 20px;
}

.flexslider ul, .flexslider .img {
    display: table-cell; 
    vertical-align: middle;
}

.img img {
    vertical-align: bottom; 
}


</style>

</head>
<body>
    <div id="awards">
        <div class="flexslider">

            <div class="img">
                <img src="image.gif">
            </div>

            <ul class="slides">
                <li>multiple lines of text</li>
                <li>multiple lines of text </li>
                <li>multiple lines of text</li>
            </ul>
        </div>
    </div>
</body>
</html>

编辑:(适合flexslider设置的新版本)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">

<style media="all">

#awards {
    width:940px;
    padding: 20px 0;
    margin:0 auto;
    border:1px #dedede solid;
    background:#f1f1f1;
    -moz-border-radius: 6px;
    -webkit-border-radius: 6px;
    border-radius: 6px;
}

ul.slides  {
    list-style: none; 
    margin: 0; padding: 0;
}

.slides li {
    display: table;
    table-layout: fixed;
    margin: 0 auto;
    height: 100%;
}

.text {
    padding-left: 20px;
}

.text, .img {
    display: table-cell; 
    vertical-align: middle;
}

.img img {
    vertical-align: bottom; 
}


</style>

</head>
<body>
    <div id="awards">
        <div class="flexslider">
            <ul class="slides">
                <li>
                    <div class="img">
                        <img src="image.gif">
                    </div>
                    <div class="text">
                        <p>multiple lines of text<br>
                        multiple lines of text multiple lines of text multiple lines of text<br>
                        multiple lines of text</p>
                    </div>
                </li>
            </ul>
        </div>
    </div>
</body>
</html>

答案 1 :(得分:0)

有一种方法可以在不添加额外元素的情况下执行此操作:

http://codepen.io/cimmanon/pen/seKfn

#awards .flexslider {
  height: 100px;
  text-align: center;
  width: 940px;
  margin: 0 auto;
  border: 1px #dedede solid;
  background: #f1f1f1;
  -webkit-border-radius: 6px;
  -moz-border-radius: 6px;
  -ms-border-radius: 6px;
  -o-border-radius: 6px;
  border-radius: 6px;
}

ul.slides li {
  display: -webkit-box;
  display: -moz-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  -webkit-box-pack: center;
  -moz-box-pack: center;
  -ms-flex-pack: center;
  -webkit-justify-content: center;
  justify-content: center;
  -webkit-box-align: center;
  -moz-box-align: center;
  -ms-flex-align: center;
  -webkit-align-items: center;
  align-items: center;
  height: 100px;
  /* any width will do, fix for old Firefox */
  width: 100%;
}

ul.slides img {
  /* fallback for IE<10, hide from Safari */
  float: left;
}

ul.slides p {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
/* optional
  -webkit-flex: 1 auto;
  -ms-flex: 1 auto;
  flex: 1 auto;
*/
}

<div id="awards">
    <div class="flexslider">
        <ul class="slides">
            <li>
                <img src="http://placekitten.com/100/50" />
                <p>Lorem ipsum dolor sit amet...</p>
            </li>
            <li>
                <img src="http://placekitten.com/100/50" />
                <p>Lorem ipsum dolor sit amet...</p>
            </li>
        </ul>
    </div>
</div>

这将适用于IE&lt; 10以外的所有内容。我为旧浏览器提供了一个后备,但它需要在Safari中隐藏。