核心提示:题外话:这是一个让人抓狂的问题。HTML文档结构如下:实现效果:1.(子元素已知宽高)给父容器设置绝对定位(absolute),子元素设置为相对定位(relative),top、left设置为50%,...
题外话:这是一个让人抓狂的问题。
HTML文档结构如下:
实现效果:
1.(子元素已知宽高)给父容器设置绝对定位(absolute),子元素设置为相对定位(relative),top、left设置为50%,margin-top、margin-left分别设置为高宽的一半的负数。
.outer{ position:relative; width:80%; height:400px; background:#DCDCDC; } .inner{ width:400px; height:200px; position:absolute; left:50%; top:50%; margin-left:-200px; /*width一半的负数*/ margin-top:-100px; /*height一半的负数*/ background:green; border:2px solid #000000; }
2.(子元素未知宽高)使用CSS3新特性transform。设置父元素相对定位(relative),子元素绝对定位(absolute),top、left为50%,X轴、Y轴偏移-50%。
.outer{ position:relative; width:80%; height:400px; background:#DCDCDC; } .inner{ width:30%; height:40%; position:absolute; left:50%; top:50%; transform:translate(-50%,-50%); /*X负方向移宽度的一半,Y负方向移高度的一半*/ background:green; border:2px solid #000000; }
3.(子元素未知宽高)父元素相对定位(relative),子元素绝对定位(absolute),top/right/bottom/left均为0,margin为auto。
.outer{ position:relative; width:80%; height:400px; background:#DCDCDC; } .inner{ width:30%; height:40%; position:absolute; top:0; right:0; bottom:0; left:0; margin:auto; background:green; border:2px solid #000000; }
4.(父元素已知宽高)父元素设置display为table-cell,文字居中(text-align),垂直居中(vertical-align),子元素根据是否为块级元素设置display为inline-block。
.outer{ width:600px; height:400px; display:table-cell; text-align:center; /*水平居中*/ vertical-align:middle; /*垂直居中*/ background:#DCDCDC; } .inner{ width:30%; height:40%; display:inline-block; /*块级元素需设置此行,内联元素不设置*/ background:green; border:2px solid #000000; }
附:
display属性值table-cell说明:元素会作为一个表格单元格显示,效果类似于。需要注意的是,此属性值的效果会被float,position:absolute破坏,应避免同时使用。