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

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

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

现在创建了一个父元素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. SDN实验环境配置

  2. 02-Spring基于XML的Bean属性注入

    属性值注入:就是给属性赋值 创建一个Account类: public class Account implements Serializable { private int aid; private ...

  3. 在 Sitecore 里使用 Solr 搜索 SortOrder 关联的 Item

    在 C# 使用 Solr 搜索 sitecore 的配置信息文件可直接丢进 <Instance>\App_Config 下,sitecore 会自动检测配置文件更新并加载到内存中. 通常情 ...

  4. pat乙级自我回顾:一般错误出现原因

    在obsidian里面写的有些引用没用,需要的可以评论区或者私信我呦~ 对于错误,末尾的换行不影响格式, 段错误: 一般是设置的数组小于题目给定的要求,循环条件i--写成i++,数组下标写错,也有可能 ...

  5. MySQL学习(九)frm与ibd了解

    参考:https://cloud.tencent.com/developer/article/1533746 InnoDB: frm,ibd MyISAM: frm,myd,myi ibd是InnoD ...

  6. Apk_动态调试方案

    环境准备 安装夜神安卓模拟器 配置好adb[Android 调试桥]环境(这里需要使用官方的adb环境,设置好环境变量)Android 调试桥 (adb) | Android 开发者 | Androi ...

  7. cl 编译器环境配置

    安装 visual studio 2019 其他版本路径可能有差别,需自行对照查找. visual studio 2019安装目录 和 Windows kits 文件夹[在同一目录下] 即VS 如果安 ...

  8. TCP 三次握手,给我长脸了噢

    大家好,我是小富~ 个人资源分享网站:FIRE 本文收录在 Springboot-Notebook 面试锦集 前言 之前有个小伙伴在技术交流群里咨询过一个问题,我当时还给提供了点排查思路,是个典型的八 ...

  9. 一个基于GPT模型实现的Git Commit信息自动生成工具

    每次提交代码的时候,你是否有为如何写Commit Message而迟迟按不下提交的时刻呢?然后,死磨硬泡写了一些并提交后,又被review的小伙伴吐槽了呢?相信很多小伙伴有过这样的经历吧? 趁着最近C ...

  10. JetBrains 2022全家桶-激活

    ## JetBrains 全家桶 激活教程 https://tech.souyunku.com/?page_id=50199