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

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

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

现在创建了一个父元素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. P2345 [USACO04OPEN] MooFest G

    简单的一个分块处理:优雅的暴力枚举 #include<bits/stdc++.h>using namespace std; typedef long long ll;const int N ...

  2. linux驱动设备分类

    1. linux驱动设备分类 1.1 字符设备 -c 1.没有文件系统 2.应用程序和驱动程序之间进行数据交互时,数据是以"字节"进行数据交换,并且是按照固定的顺序传输的,数据是实 ...

  3. ESP32 IDF V5.0 编译环境

    方法:环境搭建工具一键安装: 下载链接:https://dl.espressif.com/dl/esp-idf/ 可以选择离线安装方式和在线安装方式,建议:采用离线安装的方式 下载离线安装包之后点击安 ...

  4. 《深入理解高并发编程:JDK核心技术》-冰河新书上市

    大家好,我是冰河~~ 废话说多了没用,并发编程技术一直是初级程序员进阶高级工程师的前提条件,也是成为大厂程序员的必备技能,更是突破自身技术瓶颈的必经之路. 2022年6月我出版了"冰河技术丛 ...

  5. ElasticSearch 实现分词全文检索 - 聚合查询 cardinality

    目录 ElasticSearch 实现分词全文检索 - 概述 ElasticSearch 实现分词全文检索 - ES.Kibana.IK安装 ElasticSearch 实现分词全文检索 - Rest ...

  6. 本地搭建Stable-Diffusion 教程

    前置条件 有一些python的基础 会使用git 有梯子(最好可以全局代理) Windows系统 + 英伟达1060以上显卡 (mac或者linux 以及电脑是AMD显卡,安装的话,可以自行搜索相关教 ...

  7. Spring配置类为什么要分Full和Lite模式

    本文基于Spring 5.2.15-RELEASE 关于Spring配置类的Full模式和Lite模式,如果没有仔细阅读过源码或者官方文档的话,估计很多人都不知道这个概念.所以我们先来解释下这两个概念 ...

  8. android使用---->常用组件1

    在TextView中创建空心文字 <TextView android:layout_width="wrap_content" android:layout_height=&q ...

  9. BEST 定理与矩阵树定理的证明

    BEST 定理:计算有向图的欧拉回路数量 欧拉图 \(G\) 的欧拉回路个数为 \(T_s(G)\prod(out_i-1)!\),其中 \(T_s(G)\) 代表以 \(s\) 为根的内向树个数,\ ...

  10. 一次因生产事故与chatGpt的对话

    一次因生产事故与chatGpt的对话 前言:生产出现了一个内存溢出的事故,记录错误信息.错误日志如下 org.springframework.web.util.NestedServletExcepti ...