div
的内部对齐图像?示例
在我的示例中,我需要将
<img>
中的<div>
垂直居中与class ="frame
“:<div class="frame" style="height: 25px;">
<img src="http://jsfiddle.net/img/logo.png" />
</div>
.frame
'的高度是固定的,图像的高度是未知的。如果这是唯一的解决方案,则可以在.frame
中添加新元素。我试图在Internet Explorer 7及更高版本的WebKit,Gecko上进行此操作。 。 .frame {
height: 25px; /* Equals maximum 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;
}
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=250 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=25 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=23 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=21 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=19 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=17 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=15 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=13 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=11 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=9 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=7 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=5 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=3 />
</div>
#1 楼
据我所知,唯一(也是最好的跨浏览器)方式是在两个元素上同时使用inline-block
帮助器和height: 100%
和vertical-align: middle
。所以有一个解决方案:http://jsfiddle.net/ kizu / 4RPFa / 4570 /
.frame {
height: 25px; /* Equals maximum 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;
}
<div class="frame">
<span class="helper"></span><img src="http://jsfiddle.net/img/logo.png" height=250px />
</div>
<div class="frame">
<span class="helper"></span><img src="http://jsfiddle.net/img/logo.png" height=25px />
</div>
<div class="frame">
<span class="helper"></span><img src="http://jsfiddle.net/img/logo.png" height=23px />
</div>
<div class="frame">
<span class="helper"></span><img src="http://jsfiddle.net/img/logo.png" height=21px />
</div>
<div class="frame">
<span class="helper"></span><img src="http://jsfiddle.net/img/logo.png" height=19px />
</div>
<div class="frame">
<span class="helper"></span>
<img src="http://jsfiddle.net/img/logo.png" height=17px />
</div>
<div class="frame">
<span class="helper"></span>
<img src="http://jsfiddle.net/img/logo.png" height=15px />
</div>
<div class="frame">
<span class="helper"></span>
<img src="http://jsfiddle.net/img/logo.png" height=13px />
</div>
<div class="frame">
<span class="helper"></span>
<img src="http://jsfiddle.net/img/logo.png" height=11px />
</div>
<div class="frame">
<span class="helper"></span>
<img src="http://jsfiddle.net/img/logo.png" height=9px />
</div>
<div class="frame">
<span class="helper"></span>
<img src="http://jsfiddle.net/img/logo.png" height=7px />
</div>
<div class="frame">
<span class="helper"></span>
<img src="http://jsfiddle.net/img/logo.png" height=5px />
</div>
<div class="frame">
<span class="helper"></span>
<img src="http://jsfiddle.net/img/logo.png" height=3px />
</div>
或者,如果您不想在现代浏览器中添加多余的元素并且不介意使用Internet Explorer表达式,则可以使用伪元素并将其添加到Internet资源管理器使用方便的表达式,每个元素仅运行一次,因此不会出现任何性能问题:
Internet Explorer的
:before
和expression()
解决方案:http://jsfiddle.net/kizu / 4RPFa / 4571 / .frame {
height: 25px; /* Equals maximum 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)
);
}
<div class="frame"><img src="http://jsfiddle.net/img/logo.png" height=250px /></div>
<div class="frame"><img src="http://jsfiddle.net/img/logo.png" height=25px /></div>
<div class="frame"><img src="http://jsfiddle.net/img/logo.png" height=23px /></div>
<div class="frame"><img src="http://jsfiddle.net/img/logo.png" height=21px /></div>
<div class="frame"><img src="http://jsfiddle.net/img/logo.png" height=19px /></div>
<div class="frame"><img src="http://jsfiddle.net/img/logo.png" height=17px /></div>
<div class="frame"><img src="http://jsfiddle.net/img/logo.png" height=15px /></div>
<div class="frame"><img src="http://jsfiddle.net/img/logo.png" height=13px /></div>
<div class="frame"><img src="http://jsfiddle.net/img/logo.png" height=11px /></div>
<div class="frame"><img src="http://jsfiddle.net/img/logo.png" height=9px /></div>
<div class="frame"><img src="http://jsfiddle.net/img/logo.png" height=7px /></div>
<div class="frame"><img src="http://jsfiddle.net/img/logo.png" height=5px /></div>
<div class="frame"><img src="http://jsfiddle.net/img/logo.png" height=3px /></div>
工作原理:
当两个
inline-block
元素彼此靠近时,可以彼此对齐到另一侧,因此使用vertical-align: middle
时,您将得到类似以下的信息: ,您可以在px
中设置内部块的高度。因此,在具有固定高度的块中添加一个
em
和%
将使其中的另一个inline-block
元素(在您的情况下为height: 100%
)垂直对齐。评论
您可以自己查看:jsfiddle.net/kizu/Pw9NL-只有内联框不会生成框,但是其他所有情况都可以。
– kizu
2011年9月6日下午5:01
很好的答案。我在内联块元素(即.frame和.frame:before之间)之间的空间中挣扎。此处提出的解决方案是在.frame中添加margin-left:-4px。希望这可以帮助。
–米克
13年5月14日在9:07
请注意:不在添加的 span>帮助器中。在外面我只是没有意识到这一点,就把我的每一缕头发都拉了。
– ryan
2013年12月12日21:50
似乎您还需要添加“空白:nowrap;”。到框架,或者如果图像和辅助跨度之间有换行符,则会遇到问题。我花了一个小时才知道这个解决方案对我不起作用。
– juminoz
2014年1月1日18:59
在我的情况下,我的图像的max-height和max-width都设置为100%,因此图像会缩放容器,并且此方法不起作用。我的解决方案是将这些值更改为90%(在我的情况下还可以;在另一种情况下,您可能需要相应地缩放容器),并在图像的另一侧添加一个辅助对象,以便即使在页面上也可以保留填充双方。
–埃里克·杜贝(EricDubé)
2014年8月18日下午4:14
#2 楼
这可能会有用:div {
position: relative;
width: 200px;
height: 200px;
}
img {
position: absolute;
top: 0;
bottom: 0;
margin: auto;
}
.image {
min-height: 50px
}
评论
如果您还希望水平对齐图像,请添加left:0;正确:0;到img
–詹姆斯·金
13年2月2日,下午3:09
这是不是在IE10中起作用?我有点在整个地方使用
– Max Yari
2015年2月9日在17:28
也对具有position:fixed;的div容器有效(对我而言)
– PJ Brunet
15年5月17日在7:23
谢谢!为我工作!
–亚历山大·马林金
4月7日20:07
这是最好的解决方案
–Fotios Tragopoulos
5月19日9:50
#3 楼
matejkramny的解决方案是一个不错的开始,但是过大的图像比例不正确。这是我的叉子:
演示:https://jsbin.com/lidebapomi/edit?html ,css,output
HTML:
<div class="frame">
<img src="foo"/>
</div>
CSS:
.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;
}
评论
有什么方法可以适应这个问题,以便您可以放大超大的图像(例如2倍),并且仍然保持水平和垂直居中?
–贾斯汀
15年4月20日在17:51
如果要使其垂直对齐底部而不是中间对齐,应修改哪些代码?
– bobo
16-3-16在23:53
@bobo只需删除顶部:0;。这只会导致底部:0;垂直应用。
– jomo
16 Mar 17 '16 at 11:06
最好的答案!
–user315338
2月11日在16:16
#4 楼
三行解决方案:position: relative;
top: 50%;
transform: translateY(-50%);
这适用于任何事物。
从这里开始。
评论
前缀:-ms-或-webkit-(转换前)。 w3schools.com/cssref/css3_pr_transform.asp
–乔治·奥皮内尔(Jorge Orpinel)
2015年4月19日在3:03
IE9的前缀,但在IE8及更低版本中根本不起作用:caniuse.com/#search=transform但是我的观点:我不在乎IE8
–统治85
2015年9月2日于12:45
不能使用位置的不错的选择:绝对;因为您需要流动的宽度。
– plong0
17年3月14日在19:03
令我惊讶的是,不需要任何额外元素的真正解决方案就被埋没了这么远。
–阿里斯蒂德斯
17年7月23日在17:30
迄今为止最好的解决方案,甚至比flexbox更好,它支持大多数现代和旧浏览器。请支持这个
– albanx
18年11月25日在10:56
#5 楼
一个纯CSS解决方案: .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;
}
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=250 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=25 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=23 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=21 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=19 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=17 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=15 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=13 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=11 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=9 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=7 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=5 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=3 />
</div>
主要内容
// 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
评论
请让我参考这里的指南,该指南甚至适用于IE5(从我到目前为止所读内容中扣除)webmasterworld.com/css/3350566.htm
–马泰
2011年9月5日14:38在
此解决方案是一个不错的开始,但是过大的图像会以错误的比例调整大小。请看我的回答。
– jomo
2013年9月18日在9:54
@HansWürstchen是的,但是重点是居中,是否过大是设计选择。添加更多的CSS =更混乱:)
–马泰
2013年9月27日在13:12
@matejkramny它不会变得过大。如果图像过大,则比例错误。这意味着它的高度已拉伸,并且外观不正确。
– jomo
2013年9月28日15:57
✔哇,这适用于图像溢出(大于包装器)的情况,但不能接受。
–塞德里克·赖兴巴赫
2014年1月7日17:52
#6 楼
对于更现代的解决方案,如果不需要支持旧版浏览器,则可以执行以下操作: .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;
}
<div class="frame">
<img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/9988/hand-pointing.png">
</div>
这是一支钢笔:http://codepen.io/ricardozea/pen/aa0ee8e6021087b6e2460664a0fa3f3e
评论
如果未设置容器的高度,这尤其有用
–戴夫·巴内特(Dave Barnett)
18年5月10日15:47
或自行调整单个项目
–迈克尔
19年5月14日在22:06
align-self的问题是flex项将拉伸父容器的高度。
–里卡多·泽(Ricardo Zea)
19年5月15日在15:49
#7 楼
这样,您可以将图像垂直居中(演示):div{
height: 150px; // Internet Explorer 7 fix
line-height: 150px;
}
img{
vertical-align: middle;
margin-bottom: 0.25em;
}
评论
奇怪的是,在我遇到的情况下,我无法获得可接受的答案(我也在裁剪图像时出现溢出:隐藏)。但这完全有效。
–路卡·斯派勒(Luca Spiller)
2013年12月13日在16:25
我只在Chrome中测试过此功能,但线条高度似乎是关键。我将vertical-align属性放在div而不是img上,因为我的img在锚点()中。
–托德·普莱斯(Todd Price)
2014年2月11日在18:19
是的,比公认的解决方案简单得多,并且效果很好。我也在jsfiddle中找到了该解决方案。
–vdboor
14年2月18日在10:10
如果您知道可以满足的身高,那么效果很好
– KrekkieD
2014年6月3日7:04
从我的经验来看,该解决方案仅适用于font-size:div为0。对于相当大的容器,您可能会错过它,但是如果您的div为100px,而img为80px,则它会低几个像素。
–alTus
15年2月28日在17:44
#8 楼
另外,您可以使用Flexbox获得正确的结果: .parent {
align-items: center; /* For vertical align */
background: red;
display: flex;
height: 250px;
/* justify-content: center; <- for horizontal align */
width: 250px;
}
<div class="parent">
<img class="child" src="https://cdn2.iconfinder.com/data/icons/social-icons-circular-black/512/stackoverflow-128.png" />
</div>
#9 楼
flexbox有一个超级简单的解决方案!.frame {
display: flex;
align-items: center;
}
评论
是的,但是您几乎无法在所有答案中看到它。我试图简单,清晰地突出显示它,因为它比其他所有答案都容易得多。
– BBlackwo
16-4-21在11:57
这是对我也有用的最佳答案。但就我而言,“ inline-flex”框架对我来说效果更好。对于其中的图像,我添加了:“ vertical-align:middle”。
–索菲·库珀曼
19年11月4日15:35
如今,Flexbox的支持范围非常广泛。这是最简单的解决方案(可能您的响应会感谢您)。支持文档:caniuse.com/#feat=flexbox
–玛丽娜M
8月25日12:10
#10 楼
您可以尝试将PI的CSS设置为display: table-cell; vertical-align: middle;
评论
我见过各种各样的方法,但是对我来说,这是个新方法(甚至在2013年)。
– Mike Ebert
13年11月6日在22:56
比将图像放在桌子中央只是更好。
–乔纳斯
2014年2月12日下午4:32
如果您希望宽度为100%,则display:table-cell的尺寸不一定总是正确
– Redtopia
2014年4月27日在1:52
什么是“ PI”?
– Peter Mortensen
19年7月11日在19:17
#11 楼
您可以尝试以下代码: .frame{
display: flex;
justify-content: center;
align-items: center;
width: 100%;
}
<div class="frame" style="height: 25px;">
<img src="http://jsfiddle.net/img/logo.png" />
</div>
#12 楼
假设您有<div class="wrap">
<img src="#">
</div>
和CSS:
.wrap {
display: flex;
}
.wrap img {
object-fit: contain;
}
评论
au! Flex真的很烂!谢谢!
–佩德罗·费雷拉(Pedro Ferreira)
1月4日15:34
如果要让孩子占用父母的整个宽度,并且仍然与中间垂直对齐,请使用适合对象的封面。请参阅css-tricks.com/snippets/css/a-guide-to-flexbox使用flex-box在父级中移动图像
–mattdlockyer
1月15日23:41
#13 楼
背景图片解决方案我完全删除了图片元素,并使用
.frame
类将其设置为div的背景http://jsfiddle.net/URVKa/2/
这至少在Internet Explorer 8,Firefox 6和Chrome 13上可以正常使用。
我检查了,此解决方案无法缩小大于25像素高度的图像。有一个名为
background-size
的属性可以设置元素的大小,但是CSS 3会与Internet Explorer 7的要求冲突。我建议您重做浏览器优先级并设计用于最好的可用浏览器,或者如果要使用此解决方案,请获取一些服务器端代码来调整图像大小。
评论
非常好的解决方案,但是我希望某些图像大于容器,并且在这种情况下,我计划在它们上使用max-height / max-width。有什么办法用背景图像做到这一点?
– Arnaud Le Blanc
2011年9月4日下午13:34
这不是“ .frame元素”,而是“带有.frame类的div”
– JGallardo
16-10-17在18:40
如果图像高度不超过帧div的高度,则这是最佳和最简单的解决方案...
–efirat
16 Dec 7'在12:10
#14 楼
http://jsfiddle.net/MBs64/.frame {
height: 35px; /* Equals maximum 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;
,代表.frame
。 Div.frame
显示为与此内联,因此您需要将其包装在一个块元素中。此功能可在Firefox,Opera,Chrome,Safari和Internet Explorer 8(及更高版本)中使用。
UPDATE
对于Internet Explorer 7,我们需要添加一个CSS表达式:
*:first-child+html img {
position: relative;
top: expression((this.parentNode.clientHeight-this.clientHeight)/2+"px");
}
评论
大。 IE7会避免使用JavaScript吗?
– Arnaud Le Blanc
2011年9月4日18:40
我不确定,但也许CSS表达式会有所帮助。但是它们也是javascript。唯一的区别是,您将它们写在css文件中,而不是js中。
–网络游戏
2011年9月5日下午5:46
是的,不错的主意。这将更易于管理(脚本会根据需要自动运行),并且因为它应该是IE7的,所以还可以。
– Arnaud Le Blanc
2011-09-5 8:30
#15 楼
您可以执行以下操作:演示
http://jsfiddle.net/DZ8vW/1
CSS
.frame {
height: 25px; /* Equals maximum 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
$("img").each(function(){
this.style.marginTop = $(this).height() / -2 + "px";
})
评论
真好纯CSS解决方案有机会吗?
– Arnaud Le Blanc
2011年9月4日在18:38
不幸的是,除非您要使用表或放弃与IE的较早版本的兼容性,否则请不要。 :(如果您事先知道图像的确切大小会有所不同,但并非没有,仅凭CSS不可能做到这一点。
–约瑟夫·马里克(Joseph Marikle)
2011年9月4日在18:54
@Joseph您将如何用表格修复它?
–本杰明·乌丁克十本
2011年9月4日19:59
@Benjamin Udink 10 Cate杂乱无章,但可以这样处理:jsfiddle.net/DZ8vW/2(不建议这样做,但应该可以使用)
–约瑟夫·马里克(Joseph Marikle)
2011年9月4日于20:33
那么它完全适合arnauds的需求。没有JS,只有CSS和HTML。
–本杰明·乌丁克十本
2011年9月5日下午0:41
#16 楼
我的解决方案:http://jsfiddle.net/XNAj6/2/<div class="container">
<div class="frame">
<img src="http://jsfiddle.net/img/logo.png" class="img" alt="" />
</div>
</div>
.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;
}
#17 楼
这适用于现代浏览器(在编辑时为2016年),如本演示在Codepen上所示。.frame {
height: 25px;
line-height: 25px;
width: 160px;
border: 1px solid #83A7D3;
}
.frame img {
background: #3A6F9A;
display:inline-block;
vertical-align: middle;
}
为图像分配类或使用图像非常重要继承来定位需要居中的图像。在此示例中,我们使用
.frame img {}
,以便仅将由.frame
类的div包装的图像作为目标。评论
仅ie7,只需输入line-height:25px;
–anglimasS
2011年9月1日于17:38
即使在Firefox和chrome上,它似乎也未正确对齐(jsfiddle.net/4RPFa/19)
– Arnaud Le Blanc
2011年9月1日17:44
#18 楼
使用纯CSS http://jsfiddle.net/sandeep/4RPFa/72/尝试此解决方案,也许这是HTML的主要问题。在HTML中定义c
lass
和image height
时,您不会使用引号。 CSS:
.frame {
height: 25px; /* Equals maximum 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;
}
当我使用
img
标签时,它与top
的间距为3像素到2像素。现在我减少line-height
,并且可以正常工作。CSS:
.frame {
height: 25px; /* Equals maximum image height */
width: 160px;
border: 1px solid red;
margin: 1em 0;
text-align: center;
line-height: 22px;
*:first-child+html line-height:24px; /* For Internet Explorer 7 */
}
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 */
}
line-height
属性在不同的浏览器中呈现的方式有所不同。因此,我们必须定义不同的line-height
属性浏览器。检查此示例:http://jsfiddle.net/sandeep/4be8t/11/
检查有关
line-height
的示例在不同的浏览器中有所不同:Firefox和Chrome中的输入高度差异评论
不起作用(至少在Firefox中)。对于缺少的引号,HTML5中允许这样做(尽管不知道jsfiddle中使用了哪种文档类型)
– Arnaud Le Blanc
2011-09-5 13:40
#19 楼
我不确定Internet Explorer,但是在Firefox和Chrome下,如果在img
容器中装有div
,则以下CSS内容应该可以使用。至少对我来说效果很好:div.img-container {
display: table-cell;
vertical-align: middle;
height: 450px;
width: 490px;
}
div.img-container img {
max-height: 450px;
max-width: 490px;
}
评论
不幸的是,IE8 +。对我很好,但对其他人可能不行。
–TheCarver
14年5月28日在0:27
还要注意display:table-cell;不接受%作为宽度
– Mutmatt
2014年9月2日19:38在
#20 楼
使用表和表单元格的解决方案有时应通过显示为表/表单元格来解决。例如,快速标题屏幕。这也是W3推荐的方式。我建议您检查一下W3C.org中名为“居中定位块或图像”的链接。
这里使用的技巧是:
以表格形式显示的绝对定位容器
垂直对齐到显示为表格单元格的中心内容
.container {
position: absolute;
display: table;
width: 100%;
height: 100%;
}
.content {
display: table-cell;
vertical-align: middle;
}
<div class="container">
<div class="content">
<h1 style="text-align:center">Peace in the world</h1>
</div>
</div>
我个人实际上不同意为此目的使用帮助器。
#21 楼
一个对我有用的简单方法:img {
vertical-align: middle;
display: inline-block;
position: relative;
}
它非常适合Google Chrome。在其他浏览器中尝试一下。
#22 楼
除了这样的文本之外,还可以将图像居中放置在容器(可能是徽标)中:基本上可以包装图像
.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 */
}
<div class="outer-frame">
<div class="wrapper">
some text
<img src="http://via.placeholder.com/150x150">
</div>
</div>
#23 楼
如果您可以使用像素大小的边距,只需将font-size: 1px;
添加到.frame
即可。但是请记住,现在在.frame
1em = 1px上,这意味着您也需要以像素为单位设置边距。http://jsfiddle.net/feeela/4RPFa/96/
现在它不再在Opera中居中...
#24 楼
我有同样的问题。这对我有用:<style type="text/css">
div.parent {
position: relative;
}
img.child {
bottom: 0;
left: 0;
margin: auto;
position: absolute;
right: 0;
top: 0;
}
</style>
<div class="parent">
<img class="child">
</div>
评论
实际上,图像上的“位置:固定”对我有用,因为人们对许多错误的回答感到沮丧,这些错误提示表单元格方法不适用于我的作品。使用algreat建议的方法,您也不需要额外的容器。
–Vasilios Paspalas
14年2月20日在20:21
#25 楼
您可以使用此功能: .loaderimage {
position: absolute;
top: 50%;
left: 50%;
width: 60px;
height: 60px;
margin-top: -30px; /* 50% of the height */
margin-left: -30px;
}
#26 楼
使用table
和table-cell
方法可以完成这项工作,特别是因为您也以某些旧浏览器为目标,因此我为您创建了一个片段,您可以运行它并检查结果: .wrapper {
position: relative;
display: table;
width: 300px;
height: 200px;
}
.inside {
vertical-align: middle;
display: table-cell;
}
<div class="wrapper">
<div class="inside">
<p>Centre me please!!!</p>
</div>
<div class="inside">
<img src="https://cdn2.iconfinder.com/data/icons/social-icons-circular-black/512/stackoverflow-128.png" />
</div>
</div>
#27 楼
是否要对齐文本/标题之后且都在div内的图像?请参见JSfiddle或“运行代码段”。
请务必确保具有ID或所有元素(div,img,标题等)上的类。
对我来说,该解决方案可在所有浏览器上使用(对于移动设备,必须使用@media修改代码)。
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 */;
}
<div class="mydivclass">
<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 aligned after image inside a div by negative manipulate the img position</h2>
</div>
#28 楼
CSS网格如果要在图像容器内垂直对齐单个图像,则可以使用以下方法:
.img-container {
display: grid;
}
img {
align-self: center;
}
.img-container {
display: grid;
grid-auto-flow: column;
background: #BADA55;
width: 1200px;
height: 500px;
}
img.vertical-align {
align-self: center;
}
<div class="img-container">
<img src="https://picsum.photos/300/300" />
<img class="vertical-align" src="https://picsum.photos/300/300" />
<img src="https://picsum.photos/300/300" />
</div>
如果要在一个图像容器中对齐多张图像,可以使用以下方法:
.img-container {
display: grid;
align-items: center;
}
.img-container {
display: grid;
grid-auto-flow: column;
align-items: center;
background: #BADA55;
width: 1200px;
height: 500px;
}
<div class="img-container">
<img src="https://picsum.photos/300/300" />
<img src="https://picsum.photos/300/300" />
<img src="https://picsum.photos/300/300" />
</div>
请注意,我在两种情况下都使用了
grid-auto-flow: column
,因为否则元素将包装到指定显式网格项的行。在问题代码中,我也看到该项目水平居中。在这种情况下,只需使用place-items: center
而不是align-items: center
即可。#29 楼
我一直在使用填充进行中心对齐。您将需要定义顶级外部容器的大小,但内部容器应调整大小,并且可以将填充设置为不同的百分比值。br />
#30 楼
最好的解决方案是.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;
}
评论
您好,很抱歉,但是我不同意在这里使用帮助器是最有价值的解决方案。但这不是唯一的方法。其他浏览器也支持。我在stackoverflow.com/a/43308414/7733724和W3C.org上提供了有关信息的解决方案。你可以检查一下。干杯阅读有关W3C的Centering Things文章将很有用:w3.org/Style/Examples/007/center.en.html
对齐的完美指南css-tricks.com/centering-css-complete-guide
我认为关键是.frame中的行高才能完成这项工作