html,css元素居中

网页基本布局中,常常会用到 水平居中水平垂直居中
本文主要是探讨有哪些方法可以实现效果,而不是指出最佳方案哦,使用什么方法看自己需要哦~

1.元素宽高已知固定

A.元素宽高已知固定,水平居中

①使用margin:0 auto;

说明: 只对块级元素起作用,对同级元素不会产生影响

实现效果:
这里写图片描述
html:

<div class="father">
    <div class="son">我是son</div>
    <span>我是span</span>
    <p>我是p</p>
</div>

css:

.father{
    height: 600px;
    width: 600px;
    border: 1px solid green;
}
.son{
    width: 100px;
    height: 100px;
    background: red;
    margin:0 auto;
}

②元素的父级使用text-align: center;,元素本身转换为行内块元素display: inline-block;

说明: text-align: center;只对行内块级元素或者行内元素起作用,对同级元素会产生影响

实现效果:
这里写图片描述
html:

<div class="father">
    <div class="son">我是son</div>
    <p>我是p</p>
</div>

css:

.father{
    height: 400px;
    width: 600px;
    border: 1px solid green;
    text-align: center;
}
.son{
    display: inline-block;
    width: 100px;
    height: 100px;
    background: red;
}

B.元素宽高已知固定,水平垂直居中

利用定位

说明:一般情况下使用定位,子元素使用绝对定位position: absolute;,父级元素使用相对定位position: relative;,初学的时候真是记不住,容易弄混淆,这里有一个口诀就是“子绝父相”,这样记起来就so easy啦~~

实现效果和原理说明:
这里写图片描述
html:

<div class="father">
    <div class="son"></div>
</div>

css:

.father{
    position: relative;
    height: 400px;
    width: 600px;
    border: 1px solid green;
}
.son{
    position: absolute;
    width: 100px;
    height: 100px;
    background: red;
    top:50%;
    left: 50%;
    margin-top: -50px;
    margin-left: -50px;
}

原理:子级元素的left,top的百分比值,是根据离本元素最近的一个具有定位属性的祖先元素的宽高计算的,此处为父级元素;top:50%;left:50%; ,使元素上左各距父级元素的距离为父级元素宽高的一半;在根据margin-top: -50px;margin-left: -50px; ,使元素向上移动自己本身高的一半向左移动自己本身宽的一半;实现居中。

此方法也适用于元素的宽高为百分比的情况,margin-top: -*%;margin-left: -*%; *各为元素宽度和高度的一半,如元素宽为80%,高度为40%,即margin-top: -20%;margin-left: -40%;
注意:如果元素的宽度和高度不是百分比,margin的数值如果为百分比是根据父级元素计算的。

2.元素宽高未知

说明:使用定位和CSS3的transform 属性,原理同上

实现效果:
这里写图片描述
html:

<div class="father">
    <div class="son"></div>
</div>

css:

.father{    
    position: relative; 
    height: 400px;
    width: 600px;
    border: 1px solid green;
}
.son{
    position: absolute;
    width: auto;/* 宽度根据内容自适应 */
    height:auto;/* 高度根据内容自适应 */
    background: red;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}

注:此处的transform: translate(-50%, -50%);百分比数值是根据元素本身宽高的百分比计算的,与margin不同。

兼容性:Internet Explorer 10、Firefox、Opera 支持 transform 属性。
Internet Explorer 9 支持替代的 -ms-transform 属性(仅适用于 2D 转换)。
Safari 和 Chrome 支持替代的 -webkit-transform 属性(3D 和 2D 转换)。
Opera 只支持 2D 转换。

3.分页居中

对于分页效果,主要的是分页的个数不确定,即元素的宽度不确定,基本不会要求垂直居中,所以最简单的方法就是利用1.A.②中的方法

实现效果:
这里写图片描述
html:

<div class="father">
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
</div>

css:

.father{    
    height: 400px;
    width: 600px;
    border: 1px solid green;
    text-align: center;
}       
ul{
    display: inline-block;
    list-style: none;
    margin-top: 10px;
}
ul li{
    float: left;
    width: 20px;
    height: 20px;
    background: #ccc;
    margin: 0 5px;
}

本文到此就结束啦,有什么需要改进的地方欢迎大家指教~~共同学习,共同进步

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值