CSS元素水平垂直居中方案总结

    xiaoxiao2024-11-28  5

    【水平居中】 1、对于行内元素,将其包裹在display:block的父级元素中,为父级元素添加 text-align:center; 2、对于块状元素,左右外边距为auto即: margin:10px auto; 其中10px指的是上下外边距为10像素。 3、对于多个块状元素,将元素display设为inline-block,并且父元素的text-align设置为center <body> <div class="center">div1</div> <div class="center">div2</div> </body> css: .center{ display:inline-block; } body{ text-align:center } 4、多个块状元素,使用flexbox布局 只需要把块状元素的父元素添加 display:flex;  justify-content:center; 如下: <body> <div class="center">div1</div> <div class="center">div2</div> </body> body{ display: flex; justify-content: center; } 【垂直居中】 1、行内元素,将height, line-height同时设置为父元素的高度 <div id="container"> <a href="#">hello</a> </div> #container{ background: #222; height:200px; } a{ height:200px; line-height:200px; color:#fff; } 2、多行的行内元素 组合使用display:table-cell   vertical-align:middle来 定义需要居中元素的父容器 <div id="container"> <a href="#">hello,here are many words,more than one line...hello,here are many words,more than one line... hello,here are many words,more than one line... hello,here are many words,more than one line... </a> </div> .container{ background:#ccc; width:300px; height:300px; /*以下属性垂直居中*/ display: table-cell; vertical-align:middle; } a{ color:#fff;} 3、已知高度的块状元素 使用top:50%;然后margin-top回退元素本身高度的一半 <div class="item"></div> div{ width:100px; height:100px; background:#222; } .item{ top:50%; margin-top: -50px;/*为元素本身100px的一半,这里是负值*/ position:absolute; padding:0; } 4、未知高度的块状元素 仍然先使用top:50%,但是这里高度未知,所以用css3的transform属性垂直移动 <div class="item">hello,here are many words,more than one line... hello,here are many words,more than one line... hello,here are many words,more than one line... hello,here are many words,more than one line... </div> div{ width:100px; background:#222; color:#fff; } .item{ top:50%; position:absolute; transform:translateY(-50%); } 【水平垂直居中】 1、已知高度宽度的元素 原理和上面涉及的一样,定位absolute,top和left为50%,然后margin-top和margin-left为元素本身高度一半,并且是负值 <div class="item"></div> .div{ width:100px; height:100px; background:#222; color:#fff; } .item{ position:absolute; top:50%; left:50%; margin-top:-50px; margin-left:-50px; } 2、未知宽高度的元素 使用transform <div class="item">hello,here are many words,more than one line... hello,here are many words,more than one line... hello,here are many words,more than one line... hello,here are many words,more than one line... </div> div{ background:#222; color:#fff; } .item{ position:absolute; top:50%; left:50%; transform:translate(-50%, -50%); } 3、使用flex布局 <div class="parent"> <div class="item"></div> </div> .item{ background:#222; color:#fff; width:100px; height:100px; } .parent{ display:flex; justify-content:center; align-items:center; /*这里要设置高度来查看出垂直居中的效果*/ background:#aaa; height:300px; } 补充: 关于flex布局,弹性盒子布局。声明了display:flex;即变为伸缩容器,在伸缩容器内的所有子元素将自动变成伸缩项目flex items.常结合使用的属性有 dispaly:flex; flex-flow:row; 或者flex-flow:column;  思考:这里也可以利用flex布局来实现一列固定一列自适应的布局吧(详情见本blog另一篇博文): <div class="parent"> <div class="stable"></div> <div class="change"></div> </div> .parent{ width:800px; border:1px solid #222; dispaly:flex; flex-flow:row; } .stable{ width:200px; border:1px solid  #ccc; } .change{ border:1px solid #ddd; } 关于transform属性 transform 属性向元素应用 2D 或 3D 转换。该属性允许我们对元素进行旋转rotate、缩放scale、移动translate或倾斜skew。 示例写法: transform:translate(20px); transform:scaleY(3); transform:rotateY(10deg); 等等,详情参考W3School 参考资料: 极客标签水平垂直解决方案
    转载请注明原文地址: https://ju.6miu.com/read-1294068.html
    最新回复(0)