sam*_*sam 1881 css vertical-alignment
为什么不行vertical-align: middle
?然而,vertical-align: top
确实有效.
span{
vertical-align: middle;
}
Run Code Online (Sandbox Code Playgroud)
Mic*_*ren 2161
实际上,在这种情况下,它非常简单:将垂直对齐应用于图像.由于它全部在一行中,它实际上是您想要对齐的图像,而不是文本.
<!-- moved "vertical-align:middle" style from span to img -->
<div>
<img style="vertical-align:middle" src="https://placehold.it/60x60">
<span style="">Works.</span>
</div>
Run Code Online (Sandbox Code Playgroud)
在FF3中测试过.
现在,您可以将flexbox用于此类布局.
.box {
display: flex;
align-items:center;
}
Run Code Online (Sandbox Code Playgroud)
<div class="box">
<img src="https://placehold.it/60x60">
<span style="">Works.</span>
</div>
Run Code Online (Sandbox Code Playgroud)
Ada*_*sek 336
以下是一些垂直对齐的简单技巧:
这个很简单:将文本元素的行高设置为等于容器的行高
<div>
<img style="width:30px; height:30px;">
<span style="line-height:30px;">Doesn't work.</span>
</div>
Run Code Online (Sandbox Code Playgroud)
绝对地将内部div相对于其容器定位
<div style="position:relative;width:30px;height:60px;">
<div style="position:absolute;bottom:0">This is positioned on the bottom</div>
</div>
Run Code Online (Sandbox Code Playgroud)
<div style="display:table;width:30px;height:60px;">
<div style="display:table-cell;height:30px;">This is positioned in the middle</div>
</div>
Run Code Online (Sandbox Code Playgroud)
为了使这一点能够全面正常工作,你将不得不破解CSS.幸运的是,有一个IE漏洞对我们有利.设置top:50%
在容器上,并top:-50%
在内部DIV,可以达到同样的效果.我们可以结合使用IE不支持的另一个功能:高级CSS选择器.
<style type="text/css">
#container {
width: 30px;
height: 60px;
position: relative;
}
#wrapper > #container {
display: table;
position: static;
}
#container div {
position: absolute;
top: 50%;
}
#container div div {
position: relative;
top: -50%;
}
#container > div {
display: table-cell;
vertical-align: middle;
position: static;
}
</style>
<div id="wrapper">
<div id="container">
<div><div><p>Works in everything!</p></div></div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
此解决方案需要比其他解决方案稍微更现代的浏览器,因为它使用了该transform: translateY
属性.(http://caniuse.com/#feat=transforms2d)
将以下3行CSS应用于元素将垂直居中于其父元素,而不管父元素的高度如何:
position: relative;
top: 50%;
transform: translateY(-50%);
Run Code Online (Sandbox Code Playgroud)
Mor*_*ori 91
将您更改div
为Flex容器:
div {display:flex;}
Run Code Online (Sandbox Code Playgroud)
现在有两种方法可以使所有内容的对齐居中:
方法1:
div {align-items:center;}
Run Code Online (Sandbox Code Playgroud)
方法2:
div * {margin-top:auto; margin-bottom:auto;}
Run Code Online (Sandbox Code Playgroud)
尝试不同的宽度和高度值img
和不同的字体大小值span
,你会发现它们始终保持在容器的中间.
小智 86
您必须应用于vertical-align: middle
两个元素才能使其完美居中.
<div>
<img style="vertical-align:middle" src="http://lorempixel.com/60/60/">
<span style="vertical-align:middle">Perfectly centered</span>
</div>
Run Code Online (Sandbox Code Playgroud)
该接受的答案不居中图标一半左右的文本x高度的旁边(如定义的CSS规范).如果文本的顶部或底部突出的上升或下降,这可能是足够好但可以看起来有点偏差:
在左侧,文本未对齐,在右侧,如上所示.可以在本文中找到有关vertical-align的实时演示.
有没有人谈到为什么vertical-align: top
在这种情况下有效?问题中的图像可能比文本高,因此定义了线框的上边缘.vertical-align: top
在span元素上然后将它放在线框的顶部.
vertical-align: middle
和之间行为的主要区别top
在于,第一个移动元素相对于框的基线(放置在需要的任何地方,以实现所有垂直对齐,因此感觉相当不可预测),第二个相对于线框的外边界(这是更有形).
Dan*_*eld 60
接受的答案中使用的技术仅适用于单行文本(演示),但不适用于多行文本(演示) - 如此处所述.
如果有人需要将多行文本垂直居中到图像,这里有几种方法(方法1和2受CSS-Tricks文章的启发)
CSS:
div {
display: table;
}
span {
vertical-align: middle;
display: table-cell;
}
Run Code Online (Sandbox Code Playgroud)
CSS:
div {
height: 200px; /* height of image */
}
div:before {
content: '';
display: inline-block;
height: 100%;
vertical-align: middle;
margin-right: -0.25em; /* Adjusts for spacing */
}
img {
position: absolute;
}
span {
display: inline-block;
vertical-align: middle;
margin-left: 200px; /* width of image */
}
Run Code Online (Sandbox Code Playgroud)
CSS(上面的小提琴包含供应商前缀):
div {
display: flex;
align-items: center;
}
img {
min-width: 200px; /* width of image */
}
Run Code Online (Sandbox Code Playgroud)
HTM*_*Bie 28
此代码适用于IE以及FF:
<div>
<img style="width:auto; height:auto;vertical-align: middle;">
<span>It does work on all browsers</span>
</div>
Run Code Online (Sandbox Code Playgroud)
Ikk*_*kke 19
因为你必须设置line-height
为div的高度才能使其工作
小智 12
基本上,你必须得到CSS3.
-moz-box-align: center;
-webkit-box-align: center;
Run Code Online (Sandbox Code Playgroud)
小智 11
为了记录在案,对齐"命令"不应该在一个SPAN工作,因为它是一个在线的标签,而不是块级标签.对齐,边距,填充等内容不适用于内嵌标记,因为内联点不会破坏文本流.
CSS将HTML标记分为两组:内联和块级.搜索"css block vs inline"并出现一篇很棒的文章......
http://www.webdesignfromscratch.com/html-css/css-block-and-inline/
(理解核心CSS原则是它不是那么烦人的关键)
小智 11
您可以做的另一件事是将文本设置line-height
为图像中的图像大小<div>
.然后将图像设置为vertical-align: middle;
这是最简单的方法.
Tou*_*man 11
使用line-height:30px
的跨度,使文字与图片对齐:
<div>
<img style="width:30px; height:30px;">
<span style="line-height:30px;">Doesn't work.</span>
</div>
Run Code Online (Sandbox Code Playgroud)
还没有看到margin
任何这些答案中的解决方案,所以这是我解决这个问题的方法.
此解决方案仅在您知道图像宽度时才有效.
<div>
<img src="https://placehold.it/80x80">
<span>This is my very long text what should align. This is my very long text what should align.</span>
</div>
Run Code Online (Sandbox Code Playgroud)
div {
overflow:hidden;
}
img {
width:80px
margin-right:20px;
display:inline-block;
vertical-align:middle;
}
span {
width:100%;
margin-right:-100px;
padding-right:100px;
display:inline-block;
vertical-align:middle;
box-sizing:border-box;
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box;
}
Run Code Online (Sandbox Code Playgroud)
background:url(../images/red_bullet.jpg) left 3px no-repeat;
Run Code Online (Sandbox Code Playgroud)
我一般用3px代替top
.通过增加/减少该值,可以将图像更改为所需的高度.
写下这些span属性
span{
display:inline-block;
vertical-align:middle;
}
Run Code Online (Sandbox Code Playgroud)
使用display:inline-block;
当您使用vertical-align
property.Those是相关属性
您可以将图像设置为inline element
使用display
属性
<div>
<img style="vertical-align: middle; display: inline;" src="https://placehold.it/60x60">
<span style="vertical-align: middle; display: inline;">Works.</span>
</div>
Run Code Online (Sandbox Code Playgroud)