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

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

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

现在创建了一个父元素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. unity 普通项目转URP项目

    1.导入UniversalRP (PackageManager 导入)2.创建Pipeline Asset     creat-->Rendering-->UniversalRender ...

  2. 如何像Facebook一样构建数据中心 – BGP在大规模数据中心中的应用(3)

    如何像Facebook一样构建数据中心 – BGP在大规模数据中心中的应用(3) superrace• 18-06-12 作者简介:史梦晨,曾就职于国内金牌集成商, 现就职于EANTC( 欧洲高级网络 ...

  3. yield总结

    1.使用yield  i def my_generator(n): for i in range(n): temp = yield i print(f'我是{temp}') g = my_genera ...

  4. linux 修改文件内容命令

    1.进入文件:vim 文件名 eg #vim /etc/httpd/httpd.conf 2.查找待修改内容位置 : (1)shift+":",使文件变成可查询状态 (2)输入 / ...

  5. bytes转化为字典

    import requestsurl='https://su.ke.com/api/listtop?type=resblock&resblock_id=2311062653496924& ...

  6. AppScan的安装及破解1

    (一)AppScan的安装及破解   IBM AppScan是一款目前最好用的Web 应用安全测试工具,Rational AppScan 可自动化 Web 应用的安全漏洞评估工作,能扫描和检测所有常见 ...

  7. 记一个快捷在线接口YAPI

    在线地址:http://192.168.252.152:3000 1.idea中file下setting中plugins搜索并加载插件YAPI 2.idea中的.idea中.misc.xml文件配置. ...

  8. Spring--注解开发定义Bean

    注解开发 先看一看之前的bean的做法: 所谓注解开发,当然就要用到注解啊,就是在BookDao接口的实现类里面进行注解的定义 如图所示: 而在.xml文件里面,就需要进行这样一个操作: 注解当然不会 ...

  9. (新手向)在Linux中使用VScode编写 "Hello,world"程序,并编写测试-Ubuntu20.4

    本文意在帮助 Go 语言初学者在 Linux环境下编写自己的第一个Golang程序 难点主要在 VScode 中 Go 插件的下载 与 go.mod 以及编译运行和 第一个Go测试程序的使用 前提准备 ...

  10. JAVA数据类型以及什么是字节

    强类型语言:要求变量的使用要严格符合规定,所有变量都必须先定义才能使用(安全性高) java的数据类型分为两大类 基本类型(primitive type) 引用类型(reference type) / ...