我有一个问题集中在一个属性 position
设置为 absolute
的元素 . 有谁知道为什么图像没有居中?
body {
text-align: center;
}
#slideshowWrapper {
margin-top: 50px;
text-align: center;
}
ul#slideshow {
list-style: none;
position: relative;
margin: auto;
}
ul#slideshow li {
position: absolute;
}
ul#slideshow li img {
border: 1px solid #ccc;
padding: 4px;
height: 450px;
}
<body>
<div id="slideshowWrapper">
<ul id="slideshow">
<li><img src="img/dummy1.JPG" alt="Dummy 1" /></li>
<li><img src="img/piano_unlicened.JPG" alt="Dummy 2" /></li>
</ul>
</div>
</body>
24 回答
绝对位置将其从流中取出,并将其置于0x0(父级)(最后一个块元素具有绝对位置或位置相对位置) .
我不确定你到底想要完成什么,最好将li设置为
position:relative
,这将使它们居中 . 鉴于您当前的CSS看看http://jsfiddle.net/rtgibbons/ejRTU/玩吧
在不知道locate1元素的
width
/height
的情况下,仍然可以按如下方式对齐它:EXAMPLE HERE
值得注意的是CSS Transform is supported in IE9 and above . (为简洁起见,省略了供应商前缀)
解释
添加left的
50%
将元素的顶部/左边距边缘移动到父级的中间,而translate()函数(负)值-50%
将元素移动其大小的一半 . 因此元素将位于中间 .这是因为top / left属性的百分比值是相对于父元素(正在创建包含块)的高度/宽度 .
虽然translate() transform函数的百分比值与元素本身的宽度/高度相关(实际上它指的是bounding box的大小) .
对于单向对齐,请改为使用
translateX(-50%)
或translateY(-50%)
.1.具有静态位置的元素 . 即相对,绝对,固定值 .
在CSS中居中定位的内容相当复杂 .
将
margin-left
更改为(负)您尝试居中的元素宽度的一半 .Div vertically and horizontally aligned center
注意:元素应具有要设置的宽度和高度
一个简单的CSS技巧,只需添加:
这适用于图像和文本 .
如果你想以绝对元素为中心
如果您希望容器从左到右居中,而不是从上到下居中
如果您希望容器从上到下居中,无论是从左到右
Update as of December 15, 2015
好吧,几个月前我又学到了另一个新技巧 . 假设您有一个相对父元素 .
这是你的绝对元素 .
有了这个,我认为这比我以前的解决方案更好 . 因为您不必指定宽度和高度 . 这个它适应元素本身的内容 .
相对对象内的绝对对象是相对于其父对象的,这里的问题是您需要的容器
#slideshowWrapper
的静态宽度,其余解决方案与其他用户说的一样http://jsfiddle.net/ejRTU/10/
居中一个位置:你需要设置左边的绝对属性:50%和margin-left:div宽度的-50% .
对于垂直中心绝对你需要做同样的事情芽而不是左边只有顶部 . (注意:html和body必须有最小高度100%;)
并且可以两者结合使用
这对我有用:
看演示:http://jsfiddle.net/MohammadDayeh/HrZLC/
text-align: center
;添加left: 0; right: 0;
时使用position: absolute
元素更简单,最好的:
然后,您需要将img标记插入到运动位置:相对属性的标记中,如下所示:
如果您不知道元素的宽度,可以使用以下代码:
小提琴演示:http://jsfiddle.net/wrh7a21r/
资料来源:https://stackoverflow.com/a/1777282/1136132
以“position:absolute”元素为中心 .
添加这些
或者这些
element :绝对位置
元素 centered
我不确定你想要完成什么,但在这种情况下,只需将
width: 100%;
添加到你的ul#slideshow li
即可 .解释
img
标签是内联块元素 . 这意味着它们像文本一样以内联方式流动,但也具有像块元素一样的宽度和高度 . 在你的css中有两个text-align: center;
规则应用于<body>
和#slideshowWrapper
(这是多余的btw)这使得所有内联和内联块子元素都在它们最近的块元素中居中,在你的代码中这些是li
标签 . 如果它们是静态流(position: static;
),则所有块元素都具有width: 100%
,这是默认值 . 问题是当你告诉li
标签是position: absolute;
时,你会将它们从正常的静态流中取出,这会导致它们缩小它们的大小以适合它们的内部内容,换句话说它们就是它们的width: 100%
属性 .使用
left: calc(50% - Wpx/2);
,其中W是元素的宽度适合我 .Your images are not centered because your list items are not centered; only their text is centered. You can achieve the positioning you want by either centering the entire list or centering the images within the list.
您可以在底部找到修改后的代码版本 . 在我的修订版中,我将列表和图像集中在其中 .
事实是你将一个位置设置为绝对的元素作为中心 .
但是这种行为可以被模仿!
注意:这些指令适用于任何DOM块元素,而不仅仅是img .
注意:给这些元素的名称并不特殊 .
你有它!你的img应该居中!
您的代码:
试试这个:
I hope this was helpful. Good luck!
这是中心元素的简单和最佳解决方案,具有“位置:绝对”
我不记得在哪里看到了上面列出的居中方法,使用了负的top,right,bottom,left值 . 对我来说,在大多数情况下,这个技术是最好的 .
当我使用上面的组合时,图像的行为类似于具有以下设置的背景图像:
有关第一个示例的更多详细信息,请访问:
Maintain the aspect ratio of a div with CSS
你可以这样试试:
可能是最短的
似乎正在发生的是有两种解决方案;使用边距居中并使用位置居中 . 两者都可以正常工作,但如果要绝对定位相对于此居中元素的元素,则需要使用绝对位置方法,因为第二个元素的绝对位置默认为定位的第一个父元素 . 像这样:
在我阅读这篇文章之前,使用margin:0 auto技术,在我的内容左侧 Build 一个菜单,我必须在右边 Build 一个相同宽度的列来 balancer 它 . 不漂亮 . 谢谢!
使用
margin-left: x%;
,其中x是元素宽度的一半 .