我有一个div
类,其左上角包含一个图标作为背景图片,而div
的其余部分包含文字。 div
的最小高度为32px,以便显示所有图标。
当有多行文字时,线条看起来很细,因为它们将div
向下拉伸的时间长于最小高度,但是当只有一条线时,它不会与图标的中心垂直对齐
有没有办法让单行垂直对齐,但是当有多行时不会弄乱它?
.test {
background-color: #98c5ff;
color: #093d80;
width: 400px;
min-height: 32px;
background-image: url("http://google.com/favicon.ico");
background-repeat: no-repeat;
padding-left: 42px;
}
<div class="test"><p>Short message</p></div>
<hr />
<div class="test"><p>Rather long message that should hopefully wrap on to a second line at some point.</p></div>
<hr />
<div class="test"><p>Message<br />with<br />many<br />lines<br />.</p></div>
答案 0 :(得分:8)
您可以在CSS中使用display
:
.test {
background-color: #999999;
display: table; /* Add this in here. */
width: 400px;
min-height: 32px;
background-image: url("http://google.com/favicon.ico");
background-repeat: no-repeat;
padding-left: 42px;
}
.test p {
display: table-cell;
vertical-align: middle;
}
答案 1 :(得分:2)
display:flex
也是.test
的选项。
如果.test
只保留一个p
,那么margin:auto 0;
就足够了:
http://jsfiddle.net/eXZnH/35/ 编辑:(固定小提琴)http://jsfiddle.net/eXZnH/36/
.test {
background-color: #98c5ff;
color: #093d80;
width: 400px;
min-height: 32px;
background-image: url("http://google.com/favicon.ico");
background-repeat: no-repeat;
padding-left: 42px;
display: flex;/* added */
}
p {
margin: auto 0;/* added */
}
<div class="test">
<p>Short message</p>
</div>
<hr />
<div class="test">
<p>Rather long message that should hopefully wrap on to a second line at some point.</p>
</div>
<hr />
<div class="test">
<p>Message
<br />with
<br />many
<br />lines
<br />.</p>
</div>
答案 2 :(得分:1)
尝试使用position:absolute;
见小提琴:
Here
此处:HTML:
<div class="container">
<div class="test"><p class="fix">Short message</p></div>
<hr />
<div class="test"><p>Rather long message that should hopefully wrap on to a second line at some point.</p></div>
<hr />
<div class="test"><p>Message<br />with<br />many<br />lines<br />.</p></div>
</div>
CSS:
.test {
background-color: #98c5ff;
color: #093d80;
width: 400px;
min-height: 32px;
background-image: url("http://google.com/favicon.ico");
background-repeat: no-repeat;
padding-left: 42px;
}
.fix{
position:absolute;
bottom:390px;
}
即使我添加了div bottom:390px
,您也可能需要修改container
值。
答案 3 :(得分:1)
由于使用显示表可能会影响您的宽度所以我建议使用sudo元素.test:after
来实现垂直对齐,如果您打算垂直对齐图标,也可以使用background-position
:
.test {
background-color: #98c5ff;
color: #093d80;
width: 400px;
min-height: 32px;
background-image: url("http://google.com/favicon.ico");
background-repeat: no-repeat;
padding-left: 42px;
}
.test:after{
content:"";
display:inline-block;
vertical-align:middle;
height:100%;
}
.test p{
display:inline-block;
vertical-align:middle;
}
<div class="test"><p>Short message</p></div>
<hr />
<div class="test"><p>Rather long message that should hopefully wrap on to a second line at some point.</p></div>
<hr />
<div class="test"><p>Message<br />with<br />many<br />lines<br />.</p></div>
更新了小提琴here
答案 4 :(得分:1)
不是真正的中心,而是视觉上的中心和保持一致: 填充顶部可以解决它,但数量将取决于行高和字体大小。
.test p:first-child{padding-top:8px}
另一方面,如果你不介意改变多行div的行高,你可以为&#34; p&#34;设置行高。元素以适应div高度。
.test {line-height:32px}
答案 5 :(得分:1)
更简单,就是在CSS之前使用::
.test {
position: relative;
padding-left: 32px;
background-color: #DDD;
}
.test::before {
content: url(http://google.com/favicon.ico);
position: absolute;
left: 0;
top: 50%;
margin-top: -16px; /* image height divided by 2 */
}
看看男人
.test {
position: relative;
padding-left: 32px;
background-color: #DDD;
}
.test::before {
content: url(http://google.com/favicon.ico);
position: absolute;
left: 0;
top: 50%;
margin-top: -16px;
}
&#13;
<div class="test">
<p>
bla bla bla<br />
bla bla bla<br />
bla bla bla<br />
bla bla bla<br />
bla bla bla<br />
</p>
</div>
<div class="test">
<p>bla bla bla bla</p>
</div>
&#13;
答案 6 :(得分:-1)
首先,您在每个div之后使用 hr 标记因此无法对齐它们。首先删除它们,然后将这些样式添加到 .test 类
git stash pop