How to vertically align an image inside a div?
如何在包含
在我的例子中,我需要将
1 | <img src="http://jsfiddle.net/img/logo.png" /> |
看这里的小提琴
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | .frame { height: 25px; /* equals max image height */ line-height: 25px; width: 160px; border: 1px solid red; text-align: center; margin: 1em 0; } img { background: #3A6F9A; vertical-align: middle; max-height: 25px; max-width: 160px; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <img src="http://jsfiddle.net/img/logo.png" height=250 /> <img src="http://jsfiddle.net/img/logo.png" height=25 /> <img src="http://jsfiddle.net/img/logo.png" height=23 /> <img src="http://jsfiddle.net/img/logo.png" height=21 /> <img src="http://jsfiddle.net/img/logo.png" height=19 /> <img src="http://jsfiddle.net/img/logo.png" height=17 /> <img src="http://jsfiddle.net/img/logo.png" height=15 /> <img src="http://jsfiddle.net/img/logo.png" height=13 /> <img src="http://jsfiddle.net/img/logo.png" height=11 /> <img src="http://jsfiddle.net/img/logo.png" height=9 /> <img src="http://jsfiddle.net/img/logo.png" height=7 /> <img src="http://jsfiddle.net/img/logo.png" height=5 /> <img src="http://jsfiddle.net/img/logo.png" height=3 /> |
我所知道的唯一(也是最好的跨浏览器)方法是在两个元素上使用
所以有一个解决方案:http://jsfiddle.net/kizu/4rpfa/4570/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | .frame { height: 25px; /* equals max image height */ width: 160px; border: 1px solid red; white-space: nowrap; /* this is required unless you put the helper span closely near the img */ text-align: center; margin: 1em 0; } .helper { display: inline-block; height: 100%; vertical-align: middle; } img { background: #3A6F9A; vertical-align: middle; max-height: 25px; max-width: 160px; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | <span class="helper"></span><img src="http://jsfiddle.net/img/logo.png" height=250px /> <span class="helper"></span><img src="http://jsfiddle.net/img/logo.png" height=25px /> <span class="helper"></span><img src="http://jsfiddle.net/img/logo.png" height=23px /> <span class="helper"></span><img src="http://jsfiddle.net/img/logo.png" height=21px /> <span class="helper"></span><img src="http://jsfiddle.net/img/logo.png" height=19px /> <span class="helper"></span> <img src="http://jsfiddle.net/img/logo.png" height=17px /> <span class="helper"></span> <img src="http://jsfiddle.net/img/logo.png" height=15px /> <span class="helper"></span> <img src="http://jsfiddle.net/img/logo.png" height=13px /> <span class="helper"></span> <img src="http://jsfiddle.net/img/logo.png" height=11px /> <span class="helper"></span> <img src="http://jsfiddle.net/img/logo.png" height=9px /> <span class="helper"></span> <img src="http://jsfiddle.net/img/logo.png" height=7px /> <span class="helper"></span> <img src="http://jsfiddle.net/img/logo.png" height=5px /> <span class="helper"></span> <img src="http://jsfiddle.net/img/logo.png" height=3px /> |
或者,如果您不想在现代浏览器中使用额外的元素,也不介意使用IE表达式,您可以使用一个伪元素,并使用一个方便的表达式将其添加到IE中,每个元素只运行一次,因此不会出现任何性能问题:
使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | .frame { height: 25px; /* equals max image height */ width: 160px; border: 1px solid red; white-space: nowrap; text-align: center; margin: 1em 0; } .frame:before, .frame_before { content:""; display: inline-block; height: 100%; vertical-align: middle; } img { background: #3A6F9A; vertical-align: middle; max-height: 25px; max-width: 160px; } /* Move this to conditional comments */ .frame { list-style:none; behavior: expression( function(t){ t.insertAdjacentHTML('afterBegin','<span class="frame_before"></span>'); t.runtimeStyle.behavior = 'none'; }(this) ); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 | <img src="http://jsfiddle.net/img/logo.png" height=250px /> <img src="http://jsfiddle.net/img/logo.png" height=25px /> <img src="http://jsfiddle.net/img/logo.png" height=23px /> <img src="http://jsfiddle.net/img/logo.png" height=21px /> <img src="http://jsfiddle.net/img/logo.png" height=19px /> <img src="http://jsfiddle.net/img/logo.png" height=17px /> <img src="http://jsfiddle.net/img/logo.png" height=15px /> <img src="http://jsfiddle.net/img/logo.png" height=13px /> <img src="http://jsfiddle.net/img/logo.png" height=11px /> <img src="http://jsfiddle.net/img/logo.png" height=9px /> <img src="http://jsfiddle.net/img/logo.png" height=7px /> <img src="http://jsfiddle.net/img/logo.png" height=5px /> <img src="http://jsfiddle.net/img/logo.png" height=3px /> |
它是如何工作的:
当两个
当你有一个固定高度的块(在
这可能有用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | div { position:relative; width:200px; height:200px; } img { position:absolute; top:0; bottom:0; margin:auto; } .image { min-height:50px } |
参考:http://www.student.oulu.fi/~laurirai/www/css/middle/
Matejkramny的解决方案是一个很好的开始,但是超大图像的比例是错误的。这是我的叉子:
演示:https://jsbin.com/lidbapomi/edit?HTML、CSS、输出
HTML:
1 | <img src="foo"/> |
CSS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | .frame { height: 160px; /*can be anything*/ width: 160px; /*can be anything*/ position: relative; } img { max-height: 100%; max-width: 100%; width: auto; height: auto; position: absolute; top: 0; bottom: 0; left: 0; right: 0; margin: auto; } |
三线解决方案:
1 2 3 | position: relative; top: 50%; transform: translateY(-50%); |
这适用于任何事情。
从这里开始。
纯CSS解决方案:
http://jsfiddle.net/3mvpm/
CSS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | .frame { margin: 1em 0; height: 35px; width: 160px; border: 1px solid red; position: relative; } img { max-height: 25px; max-width: 160px; position: absolute; top: 0; bottom: 0; left: 0; right: 0; margin: auto; background: #3A6F9A; } |
关键材料
1 2 3 | // position: relative; - in .frame holds the absolute element within the frame // top: 0; bottom: 0; left: 0; right: 0; - this is key for centering a component // margin: auto; - centers the image horizontally & vertically |
对于那些登陆本帖并对更现代的解决方案感兴趣且不需要支持传统浏览器的用户,您可以这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | .frame { display: flex; /** Uncomment 'justify-content' below to center horizontally. ? Read below for a better way to center vertically and horizontally. **/ /*justify-content: center;*/ align-items: center; } img { height: auto; /** ? To center this image both vertically and horizontally, in the .frame rule above comment the 'justify-content' and 'align-items' declarations, then uncomment 'margin: auto;' below. **/ /*margin: auto;*/ } /* Styling stuff not needed for demo */ .frame { max-width: 900px; height: 200px; margin: auto; background: #222; } p { max-width: 900px; margin: 20px auto 0; } img { width: 150px; } |
1 | <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/9988/hand-pointing.png"> |
这是一支钢笔:http://codepen.io/ricardozea/pen/aa0ee8e6021087b6e24664a0fa3f33e
这样,您可以垂直居中图像(演示):
1 2 3 4 5 6 7 8 | div{ height:150px; //IE7fix line-height: 150px; } img{ vertical-align: middle; margin-bottom:0.25em; } |
此外,您还可以使用flexbox获得正确的结果:
1 2 3 4 5 6 7 8 | .parent { align-items: center; /* for vertical align */ background: red; display: flex; height: 250px; /* justify-content: center; <- for horizontal align */ width: 250px; } |
1 | <img class="child" src="https://cdn2.iconfinder.com/data/icons/social-icons-circular-black/512/stackoverflow-128.png" /> |
您可以尝试将pi的css设置为
有一个超级简单的解决方案与flexbox!
1 2 3 4 | .frame { display: flex; align-items: center; } |
背景图像解决方案我将image元素全部删除,并将其设置为带有
http://jsfiddle.net/urlvka/2/
这至少在IE8、FF6和Chrome13上有效。
我检查过,这个解决方案不能缩小超过25px高度的图像。有一个名为
我建议你要么重做浏览器的优先级,设计最适合的浏览器,要么得到一些服务器端的代码来调整图片的大小,如果你想使用这个解决方案的话。
您可以尝试以下代码
1 2 3 4 5 6 | .frame{ display:flex; justify-content: center; align-items: center; width:100%; } |
1 | <img src="http://jsfiddle.net/img/logo.png" /> |
http://jsfiddle.net/mbs64/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | .frame { height: 35px; /* equals max image height */ width: 160px; border: 1px solid red; text-align: center; margin: 1em 0; display: table-cell; vertical-align: middle; } img { background: #3A6F9A; display: block; max-height: 35px; max-width: 160px; } |
键属性是display:table cell;for.frame。div.frame显示为与此内联,因此需要将其包装在一个块元素中。
它适用于FF、Opera、Chrome、Safari和IE8+。
更新
对于IE7,我们需要添加一个CSS表达式:
4你可以这样做:
演示http://jsfiddle.net/dz8vw/1
CSS1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | .frame { height: 25px; /* equals max image height */ line-height: 25px; width: 160px; border: 1px solid red; text-align: center; margin: 1em 0; position: relative; /* Changes here... */ } img { background: #3A6F9A; max-height: 25px; max-width: 160px; top: 50%; /* here.. */ left: 50%; /* here... */ position: absolute; /* and here */ } |
JavaScript
1 2 3 | $("img").each(function(){ this.style.marginTop = $(this).height() / -2 +"px"; }) |
使用纯CSS尝试此解决方案http://jsfiddle.net/sandeep/4rpfa/72/可能是HTML的主要问题。在HTML中定义c
CSS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | .frame { height: 25px; /* equals max image height */ width: 160px; border: 1px solid red; position:relative; margin: 1em 0; top: 50%; text-align: center; line-height: 24px; margin-bottom:20px; } img { background: #3A6F9A; vertical-align: middle; line-height:0; margin:0 auto; max-height:25px; } |
编辑:
当我使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | .frame { height: 25px; /* equals max image height */ width: 160px; border: 1px solid red; margin: 1em 0; text-align: center; line-height:22px; *:first-child+html line-height:24px; /* for IE7 */ } img { background: #3A6F9A; vertical-align: middle; line-height:0; max-height:25px; max-width:160px; } @media screen and (-webkit-min-device-pixel-ratio:0) { .frame { line-height:20px; /* webkit browsers */ } |
检查这个例子http://jsfiddle.net/sandeep/4be8t/11/
查看这个关于
不确定IE,但是在火狐和Chrome下,如果在
1 2 3 4 5 6 7 8 9 10 11 | div.img-container { display:table-cell; vertical-align: middle; height: 450px; width: 490px; } div.img-container img { max-height: 450px; max-width: 490px; } |
这适用于现代浏览器(编辑时为2016年),如codepen上的演示所示。
1 2 3 4 5 6 7 8 9 10 11 | .frame { height: 25px; line-height: 25px; width: 160px; border: 1px solid #83A7D3; } .frame img { background: #3A6F9A; display:inline-block; vertical-align: middle; } |
很重要的一点是,您要么给图像一个类,要么使用继承来定位您需要居中的图像。在这个例子中,我们使用了
我的解决方案:http://jsfiddle.net/xnaj6/2/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <img src="http://jsfiddle.net/img/logo.png" class="img" alt="" /> .container { display: table; float: left; border: solid black 1px; margin: 2px; padding: 0; background-color: black; width: 150px; height: 150px; } .frame { display: table-cell; text-align: center; vertical-align: middle; border-width: 0; } .img { max-width: 150px; max-height: 150px; vertical-align: middle; } |
使用表格单元格的解决方案
有时它应该通过显示为表/表单元来解决。例如,快速标题屏幕。这也是W3推荐的方法。我建议您检查W3C.org中名为"居中"的链接。
这里使用的提示是:
- 绝对定位容器显示为表格
- 与显示为表格单元格的中心内容垂直对齐
1 2 3 4 5 6 7 8 9 10 | .container { position:absolute; display:table; width:100%; height:100%; } .content { display:table-cell; vertical-align:middle; } |
1 | <h1 style="text-align:center"> PEACE IN THE WORLD |
就我个人而言,我实际上不同意将助手用于此目的。
除了像这样的文本,还可以将图像放在容器内(可以是徽标)的中心位置:
基本上你把图像包装起来
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | .outer-frame { border: 1px solid red; min-height: 200px; text-align: center; /* only to align horizontally */ } .wrapper{ line-height: 200px; border: 2px dashed blue; border-radius: 20px; margin: 50px } img { /* height: auto; */ vertical-align: middle; /* only to align vertically */ } |
1 2 | some text <img src="http://via.placeholder.com/150x150"> |
适合我的简单方法:
1 2 3 4 5 | img { vertical-align: middle; display: inline-block; position: relative; } |
很适合谷歌Chrome。在不同的浏览器上试试这个。
如果你可以使用像素大小的空白,只需将
http://jsfiddle.net/feeela/4rpfa/96/
编辑:现在它不再以歌剧为中心了…
使用
1 2 3 4 5 6 7 8 9 10 11 | .wrapper { position: relative; display: table; width: 300px; height: 200px; } .inside { vertical-align: middle; display: table-cell; } |
1 2 3 4 5 6 | <p> Centre me please!!! </p> <img src="https://cdn2.iconfinder.com/data/icons/social-icons-circular-black/512/stackoverflow-128.png" /> |
你可以用这个
1 2 3 4 5 6 7 8 9 | .loaderimage { position: absolute; top: 50%; left: 50%; width: 60px; height: 60px; margin-top: -30px;/*50% of the height*/ margin-left: -30px; } |
我也有同样的问题。这对我很有用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <style type="text/css"> div.parent { position: relative; } img.child { bottom: 0; left: 0; margin: auto; position: absolute; right: 0; top: 0; } </style> <img class="child"> |
最好的解决办法是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | .block{ /* decor */ padding:0 20px; background:#666; border:2px solid #fff; text-align:center; /* important */ min-height:220px; width:260px; white-space:nowrap; } .block:after{ content:''; display:inline-block; height:220px; /* the same as min-height */ width:1px; overflow:hidden; margin:0 0 0 -5px; vertical-align:middle; } .block span{ vertical-align:middle; display:inline-block; white-space:normal; } |
我一直在用填充物来调整中心。您将需要定义顶级外部容器大小,但内部容器应调整大小,并且可以将填充设置为不同的百分比值。
杰西德
1 2 3 4 5 6 7 8 9 10 11 | <img src='image.jpg' /> .container { padding: 20%; background-color: blue; } img { width: 100%; } |
这个怎么样?
1 2 3 4 | position: absolute; top: calc(50% - 0.5em); left: calc(50% - 0.5em); line-height: 1em; |
你也可以改变。
是否要将文本/标题后的图像与DIV中的图像对齐?
请参见JSfiddle或运行代码段。
只需确保在所有元素(DIV、IMG、TITLE等)中都有一个ID或类。
对于我来说,这个解决方案适用于所有浏览器(对于移动设备,您必须使用:@media调整代码)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | h2.h2red { color: red; font-size: 14px; } .mydivclass { margin-top: 30px; display: block; } img.mydesiredclass { margin-right: 10px; display: block; float: left;/*If you want to allign the text with an image on the same row*/ width: 100px; heght: 100px; margin-top: -40px/*Change this value to adapt to your page*/; } |
1 2 3 | <br /> <img class="mydesiredclass" src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/b3/Wikipedia-logo-v2-en.svg/2000px-Wikipedia-logo-v2-en.svg.png"> <h2 class="h2red">Text alligned after image inside a div by negative manipulate the img postion |
这个代码对我很好。
1 2 3 4 5 6 7 8 | <style> .listing_container{width:300px; height:300px;font: 0/0 a;} .listing_container:before { content: ' ';display: inline-block;vertical-align: bottom;height: 100%;} .listing_container img{ display: inline-block; vertical-align: middle;font: 16px/1 Arial sans-serif; max-height:100%; max-width:100%;} <style> <img src="http://www.advancewebsites.com/img/theme1/logo.png"> |
我在这里发布的旧jspiddle链接已经不起作用了,这可能是投反对票的原因。为了这个有效的答案,我还是想再次发布jquery解决方案。这适用于应用了
链接到JSfiddle
4我在寻找一个类似的答案,一些建议把图像截取到左边,或者垂直比例使图像弯曲,所以我提出了这个解决方案…它将内容垂直和水平居中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | .div{ position: relative; overflow: hidden; } .bantop img { position: absolute; margin: auto; width: 103%; height: auto; top: -50%; bottom: -50%; left: -50%; right: -50%; } |
我在几个项目中使用它,它就像一个sharm
可以在DIV中使用表结构
1 2 3 4 5 6 7 | <table width="100%"> <tr> <td vertical-align="middle" align="center" height="25"> <img src="https://jsfiddle.net/img/logo.png"> </td> </tr> </table> |
您可以使用
1 2 3 4 5 6 7 8 9 10 11 | .frame { display: grid; grid-template-areas:"." "img" "." grid-template-rows: 1fr auto 1fr; grid-template-columns: auto; } .frame img { grid-area: img; } |
这将创建一个3行1列网格布局,在顶部和底部使用未命名的1分数宽间隔符,并创建一个名为
http://jsfiddle.net/kissaki0/4rpfa/20713/