Heim >Web-Frontend >HTML-Tutorial >div居中的问题_html/css_WEB-ITnose

div居中的问题_html/css_WEB-ITnose

WBOY
WBOYOriginal
2016-06-21 08:56:461843Durchsuche

div {
margin: auto;
position: absolute;
top: 0;
left: 0;
right: 0
bottom: 0;
width: 100px;
height: 100px;
border:1px solid red;
}
将产生一个div, width: 100px; height: 100px; 外边框 1px 红色实线 ;
div居于屏幕中间,对于居于中间这点,我无法理解,为何下面的做法不可以?
div {
margin: auto;
position: absolute;
top: 0;
left: 0;
width: 100px;
height: 100px;
border:1px solid red;
}


回复讨论(解决方案)

问题1
top: 0;
left: 0;
为何不可以代替
top: 0;
left: 0;
right: 0
bottom: 0;

问题2 
margin:auto为何不可以代替
margin: auto;
top: 0;
left: 0;
right: 0
bottom: 0;


<html>	<head>		<style type="text/css">		div {			margin: auto;			position: absolute;			right: 0;			bottom: 0;			top: 0;			left: 0;			width: 100px;			height: 100px;			border:1px solid red;			}		</style>	</head>	<body>		<div></div>	</body></html>

打开浏览器,改变浏览器的视区的大小,发现依然居中

因为该div设置了position为absolute,而且设置了置入值(left\right\top\bottom),根据元素包含块的定义,因为div的父级没有position为“absolute”、“relative”或者“fixed”的祖先元素,所以该div的包含块为初始包含块,即根元素html的包含块,我在控制台选中html标签的时候,可以看出整个视区都被选中,所以这个时候初始包含块就是视区

根据css2.1中‘top’ + ‘margin-top’ + ‘border-top-width’ + ‘padding-top’ + ‘height’ + ‘padding-bottom’ + ‘border-bottom-width’ + ‘margin-bottom’ + ‘bottom’ = 包含块的高度

设置margin的属性为auto恰好填充了空白
可以在控制台看出随着视区大小变化,margin的值随之变化

问题1:
如果只有left属性和top属性 那么margin属性为auto没有起到任何的作用
只有设置了left和right,或者top与bottom的时候,margin为auto的时候才会去填充左右或者上下的空白,达到left属性0,right属性为0,top属性为0,bottom属性为0 的效果,不然div只有100*100那么大,不可能达到left为0又right为0的效果啊!只有添加margin,增大在文档流的占用空间
问题2:
同理问题1,不设置置入值(left\right\top\bottom),这个时候margin属性为auto没有起到任何的作用

<html>	<head>		<style type="text/css">		div {			margin: auto;			position: absolute;			right: 0;			bottom: 0;			top: 0;			left: 0;			width: 100px;			height: 100px;			border:1px solid red;			}		</style>	</head>	<body>		<div></div>	</body></html>

打开浏览器,改变浏览器的视区的大小,发现依然居中

因为该div设置了position为absolute,而且设置了置入值(left\right\top\bottom),根据元素包含块的定义,因为div的父级没有position为“absolute”、“relative”或者“fixed”的祖先元素,所以该div的包含块为初始包含块,即根元素html的包含块,我在控制台选中html标签的时候,可以看出整个视区都被选中,所以这个时候初始包含块就是视区

根据css2.1中‘top’ + ‘margin-top’ + ‘border-top-width’ + ‘padding-top’ + ‘height’ + ‘padding-bottom’ + ‘border-bottom-width’ + ‘margin-bottom’ + ‘bottom’ = 包含块的高度

设置margin的属性为auto恰好填充了空白
可以在控制台看出随着视区大小变化,margin的值随之变化

问题1:
如果只有left属性和top属性 那么margin属性为auto没有起到任何的作用
只有设置了left和right,或者top与bottom的时候,margin为auto的时候才会去填充左右或者上下的空白,达到left属性0,right属性为0,top属性为0,bottom属性为0 的效果,不然div只有100*100那么大,不可能达到left为0又right为0的效果啊!只有添加margin,增大在文档流的占用空间
问题2:
同理问题1,不设置置入值(left\right\top\bottom),这个时候margin属性为auto没有起到任何的作用


上面描述增大在文档流的占用空间不正确,position属性为absolute已经脱离了文档流,应该是增大该div的占用空间比较准确一点
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn