在页面元素布局时经常会有把元素居中的需求,大多都是用弹性盒或者定位,下面来说一下使用方法

一、使用边距进行固定位置

这种方法需要把父元素和子元素的宽度固定,然后利用二者宽高之差添加边距移动元素的位置

现在创建了一个父元素box1中包含了一个子元素box2,下边的许多案例都会使用这个盒子样式

<div class="box1">
<div class="box2"></div>
</div>
.box1{
width: 500px;
height: 500px;
background-color: #f00;
}
.box2{
width: 100px;
height: 100px;
background-color: #0f0;
}

子元素默认在父元素的左上角位置,因为已经知道父元素和子元素的宽高,因此可以使用二者之差的二分之一作为边距宽度即可
500px - 100px = 400 ⇒ 400px / 2 = 200px

1、给父元素添加内边距

在元素添加padding值之后盒子的尺寸会加上内边距导致尺寸变大
如果不希望外边距影响父元素宽高需要添加 box-sizing: border-box;
关于box-sizing

.box1{
width: 500px;
height: 500px;
background-color: #f00;
padding:200px //使用内边距将四周距离全部占满,使子元素被挤在中间
box-sizing: border-box //将宽高变为盒子宽高而不是内容区宽高
}

2、给子元素添加外边距

直接给子元素添加外边距margin值即可,效果与上边一样,无需修改box-sizing

.box2{
margin:200px
}

此时父元素剩余空间被子元素的外边距占满

二、使用绝对定位

使用绝对定位的方法可以在父元素与子元素宽高不固定的情况下进行定位,使元素进行居中
元素开启绝对定位之后可以脱离文档流,因此元素居中后会浮在父元素中间
使用绝对定位进行元素居中有两种方法

1、添加 x轴 和 y轴 偏移量后往回移动

<div class="box1">
<div class="box2"></div>
</div>
.box1{
position:relative; //给父元素添加绝对定位,使开启绝对定位的子元素相对于父元素进行定位
width: 500px;
height: 500px;
background-color: #f00;
}
.box2{
position:absolute; //开启绝对定位 //使子元素的一个角居中
//偏移方向并不固定,只要水平方向和垂直方向各一个即可
top:50%; // 使子元素的顶部在父元素的50%高度位置
left:50%; // 使子元素的左部在父元素的50%高度位置 //使子元素的x轴往回走自身的一半距离
//在确定子元素的宽高时,添加负外边距
margin-top:-50px;
margin-left:-50pz; //在不知道子元素的宽高时,可以使用transform的translate属性进行移动
//transform:translateX(-50%) translateY(-50%); width: 100px;
height: 100px;
background-color: #0f0;
}


2、使用自动外边距进行定位

将子元素的四周偏移量全部设置为0,同时添加自动外边距,浏览器会添加自动将外边距渲染到距离父元素0px的位置并且使元素四周的边距相等

.box1{
position:relative
width: 500px;
height: 500px;
background-color: #f00;
}
.box2{
position:absolute; //子元素开启绝对定位
//将子元素的四周偏移量都设置为0 并添加自动外边距,浏览器会自动添加一个同时满足四周边距相等并且占满父元素距离
top:0;
bottom:0;
left:0;
right:0;
margin:auto; width: 100px;
height: 100px;
background-color: #0f0;
}

自动外边距会使盒子大小加上外边距的尺寸与父元素的尺寸相等

三、使用弹性盒进行定位

弹性盒子是 CSS3 的一种新的布局模式。弹性布局对于排列容器中的子元素更加便捷

1、单行元素居中

单行元素居中只需要给父元素开启弹性盒并且设置justify-contentalign-items即可

<div class="box1">
<div class="box2"></div>
</div>
.box1{

	display:flex;  // 开启弹性盒
justify-content:center; //使子元素在主轴居中
align-items:center; //使子元素在侧轴进行居中 width: 500px;
height: 500px;
background-color: #f00;
}
.box2{
width: 100px;
height: 100px;
background-color: #0f0;
}

2、多行元素居中

如果存在多行元素的话,使用上面的方法就无法居中,元素会在每行的区域内进行居中

<div class="box1">
<div class="box2"></div>
<div class="box2"></div>
<div class="box2"></div>
<div class="box2"></div>
<div class="box2"></div>
<div class="box2"></div>
</div>
.box1{
width: 500px;
height: 500px;
background-color: #f00; display: flex;
flex-flow: row wrap;
justify-content: center;
align-items: center;
}
.box2{
width: 100px;
height: 100px;
background-color: #0f0;
}

这时就需要用到另一个弹性盒的属性值align-content
将父元素的align-items修改为align-content即可
或者使用简写属性place-content:center
关于place-content

.box1{
width: 500px;
height: 500px;
background-color: #f00; display: flex;
flex-flow: row wrap; //justify-content: center;
//align-content: center;
//使用简写属性 place-content: <align-content><justify-content默认值为center>
place-content:center;
}

OK~!

【CSS】使元素在父元素中居中显示的几种方法的更多相关文章

  1. HTML+CSS,让div在屏幕中居中(水平居中+垂直居中)方法总结

    最近写网页经常需要将div在屏幕中居中显示,遂记录下几个常用的方法,都比较简单. 水平居中直接加上<center>标签即可,或者设置margin:auto;当然也可以用下面的方法 下面说两 ...

  2. Java窗体居中显示的2种方法

    第1种方法: //setSize(300, 200); pack(); // 得到显示器屏幕的宽.高 int width = Toolkit.getDefaultToolkit().getScreen ...

  3. css使子元素在父元素居中的各种方法

    html结构: <div class="parent"> <div class="child"></div> </di ...

  4. line-height让文本在块级元素中居中显示总结

    一.总结: line-height不仅可以用在段落文本中控制行与行之间的间距,还可以用来控制文本在li这种块级元素中的位置. 文本行间距的大小由字体的大小决定,行间距的大小的设置方法有5种方式:

  5. ie10中元素超出父元素的宽度时不能自动隐藏

    (从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期2014-02-21) 今天遇到一个问题,ie10中元素超出父元素的宽度时不能自动隐藏,而其余浏览器却正常显示. 解决方法是,手动给其设 ...

  6. jQuery中兄弟元素、子元素和父元素的获取

    我们这里主要总结jQuery中对某元素的兄弟元素.子元素和父元素的获取,原声的Javascript代码对这些元素的获取比较麻烦一些,而jQuery正好对这些方法进行封装,让我们更加方便的对这些元素进行 ...

  7. 让子元素在父元素中水平居中align-items

    做案例中,我们会发现让子元素在父元素中垂直居中,要设置margin和padding等,各种设置才能垂直居中 现在可以使用CSS3中的align-items实现 align-items 定义子元素在父元 ...

  8. 如何使用T-SQL备份还原数据库及c#如何调用执行? C#中索引器的作用和实现。 jquery控制元素的隐藏和显示的几种方法。 localStorage、sessionStorage用法总结 在AspNetCore中扩展Log系列 - 介绍开源类库的使用(一) span<T>之高性能字符串操作实测

    如何使用T-SQL备份还原数据库及c#如何调用执行? 准备材料:Microsoft SQL Server一部.需要还原的bak文件一只 一.备份 数据库备份语句:user master backup ...

  9. jQuery学习笔记---兄弟元素、子元素和父元素的获取

    我们这里主要总结jQuery中对某元素的兄弟元素.子元素和父元素的获取,原声的Javascript代码对这些元素的获取比较麻烦一些,而jQuery正好对这些方法进行封装,让我们更加方便的对这些元素进行 ...

  10. justify-content 定义子元素在父元素水平位置排列的顺序

    justify-content 定义子元素在父元素水平位置排列的顺序,需要和display:flex使用才会生效. 有五个属性: 1.flex-start(默认值)  左对齐 2.flex-end 右 ...

随机推荐

  1. Blob、FormData

    Blob 在我的理解中这个就是一个二进制的存储类型,就像一张图片就是一组二进制,很多文件都是一组二进制.这个就是数据库用来存储二进制类型. FormData 为什么使用 FormData 来进行数据的 ...

  2. Svn安装客户端鼠标右键报错SendRpt.exe not found

    kill 掉 重启资源管理器就好了

  3. win10 自带输入法设置小鹤双拼

    1.创建bat文件: 小鹤双拼.bat 2.编辑小鹤双拼.bat 添加内容: reg add HKEY_CURRENT_USER\Software\Microsoft\InputMethod\Sett ...

  4. leetcode-1072 Flip Columns For Maximum Number of Equal Rows

    Given a matrix consisting of 0s and 1s, we may choose any number of columns in the matrix and flip e ...

  5. DecimalFormat--控制输出格式

    DecimalFormat的相关应用 整数的实现: 小数的实现: 科学计数法: 分组分隔符: 举个例子吧!-- 关于前缀后缀: 本地化货币符号: 引用特殊的字符,作为前缀或者后缀: 实例来袭! 1.0 ...

  6. Why WebRTC|“浅入深出”的工作原理详解

    前言 近几年实时音视频通信应用呈现出了大爆发的趋势.在这些实时通信技术的背后,有一项不得不提的技术--WebRTC. 今年 1 月,WebRTC 被 W3C 和 IETF 发布为正式标准.据调研机构 ...

  7. 【读书笔记】Nice Families Of GF

    目录 Nice Families Of GF rational rational algebraic D-finite总览 下定义 逻辑关系 例子 更多的例子和判别法 运算是否有性质? 运算是否有性质 ...

  8. JVM——锁

    对象头[每个对象都具有对象头] Mark:对象头的标记(32位),描述对象的 hash.锁信息.垃圾回收标记.年龄:内容包括:①.指向锁记录的指针:②.指向 monitor 的指针:③.GC 标记:④ ...

  9. Quicker 快速开发,控制脚本关闭(示例,鼠标连点器)

    前言 一般写Quicker脚本的时候,是不需要考虑中途手动退出脚本的,因为多数脚本的运行时间不长,没多少中途退出的需求.但一旦脚本需要后台不定时间运行(可能要连续运行很长时间),如果不能手动控制脚本终 ...

  10. 传输层和网络层的checksum区别,TCP cksum为何包含伪首部

    一直搞不清传输层和网络层的校验和为什么校验内容不一样,最近问了一些前辈,找寻了一些答案,总结一下自己的思考. 先说一下传输层(TCP)和网络层(IP)的校验和: TCP校验和有伪首部.TCP herd ...