我有一个200 x 200像素的div。我想把一个50 x 50像素的图片放在div的正中间。
应该如何做呢?
我可以通过为div使用text-align:center
来水平居中,但是垂直对齐是个问题...
在旧浏览器(IE >= 8)中工作
使用绝对定位和自动外边距的结合可以使元素水平和垂直居中。元素位置可以基于父元素的位置,使用相对定位进行定位。查看结果
img {
position: absolute;
margin: auto;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
#someDiv { position: relative }
- Pavel Nikolovmax-width:100%; height:auto;
即可。你还可以通过省略某一侧来将其对齐到任何一侧。非常酷。 - robotik就我个人而言,我会将其放置在div的背景图像中,CSS代码如下:
#demo {
background: url(bg_apple_little.gif) no-repeat center center;
height: 200px;
width: 200px;
}
另一种方法是创建一个带有 valign
属性的 table
,这样做不管你是否知道 div
的高度都可以实现。
<div>
<table width="100%" height="100%" align="center" valign="center">
<tr><td>
<img src="foo.jpg" alt="foo" />
</td></tr>
</table>
</div>
但是尽可能只使用css
。
我会给你更大的
position:relative;
,然后针对你的图片做以下处理:img.classname{
position:absolute;
top:50%;
left:50%;
margin-top:-25px;
margin-left:-25px;
}
只有在你知道图像和包含 div 的尺寸时,此方法才有效。这也允许您将其他项目放入包含 div 中...而使用行高之类的解决方案则不会起效。
编辑:请注意...您的边距应为图像大小的负一半。
margin
的部分,并添加了 -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%);
。这样可以得到更通用的解决方案,不需要元素大小信息。 - Jon这个运行正确:
display: block;
margin-left: auto;
margin-right: auto
如果上述方法只能使文本水平居中,可以尝试以下方法:
.outerContainer {
position: relative;
}
.innerContainer {
width: 50px; //your image/element width here
height: 50px; //your image/element height here
overflow: auto;
margin: auto;
position: absolute;
top: 0; left: 0; bottom: 0; right: 0;
}
display: block; margin: auto;
。 - ch271828n使用Flexbox:
.outerDiv {
display: flex;
flex-direction: column;
justify-content: center; /* Centering y-axis */
align-items :center; /* Centering x-axis */
}
这里有另一种将任何内容居中的方法。
HTML:(仍然简单)
<div class="Container">
<div class="Content"> /*this can be an img, span, or everything else*/
I'm the Content
</div>
</div>
CSS:
.Container
{
text-align: center;
}
.Container:before
{
content: '';
height: 100%;
display: inline-block;
vertical-align: middle;
}
.Content
{
display: inline-block;
vertical-align: middle;
}
容器和内容的高度是未知的。
不需要特定的负边距、不需要设置行高(因此它适用于多行文本)和不需要脚本即可居中,还可以很好地与 CSS 过渡效果配合使用。
before
伪类和content: ""
就能产生(预期的)行为(因为我们中的许多人可能尝试过display: inline-block
和vertical-align: middle
但没有成功)。 - try-catch-finally100%
,然后将你的元素与这个空元素的中心对齐。这样就可以使你的元素位于容器的正中央。 - avrahamcool稍微晚了点,但这是我用来垂直对齐父元素中的元素的解决方案。
当你知道容器div的大小,但不知道包含图像的大小时,此方法会很有用(在使用灯箱或图像轮播时经常遇到这种情况)。
以下是要尝试的样式:
container div
{
display:table-cell;
vertical-align:middle;
height:200px;
width:200px;
}
img
{
/*Apply any styling here*/
}
img { display:block; }
- David Douglas我发现Valamas和Lepu的答案是最直接的答案,处理未知大小的图像或您不想硬编码到CSS中的已知大小的图像。 我只有几个小调整:删除无关样式,将其大小设置为200px以匹配问题,并添加max-height / max-width来处理可能过大的图像。
div.image-thumbnail
{
width: 200px;
height: 200px;
line-height: 200px;
text-align: center;
}
div.image-thumbnail img
{
vertical-align: middle;
max-height: 200px;
max-width: 200px;
}
flex
轻松实现这一点,无需使用background-image
。
<!DOCTYPE html>
<html>
<head>
<style>
#image-wrapper{
width:500px;
height:500px;
border:1px solid #333;
display:flex;
justify-content:center;
align-items:center;
}
</style>
</head>
<body>
<div id="image-wrapper">
<img id="myImage" src="http://blog.w3c.br/wp-content/uploads/2013/03/css31-213x300.png">
</div>
</body>
</html>