css-4:元素水平垂直居中的方法有哪些?如果元素不定宽高呢?

1、背景
在开发中,经常遇到这个问题,即让某个元素的内容在水平和垂直方向上都居中,内容不仅限于文字,可能是图片或其他元素。
居中是一个非常基础但又是非常重要的应用场景,实现居中的方法存在很多,可以将这些方法分成两个大类。
居中元素(子元素)的宽高已知。
居中元素高度未知。

2、实现方式
实现元素水平垂直居中的方式:
利用定位+margin:auto
利用定位+margin:负值
利用定位+transform
table布局
flex布局
grid布局

利用定位+margin:auto
在这里插入图片描述
父级设置为相对定位,子级绝对定位,并且四个定位属性的值都设置了0;那么这时候如果子级没有设置宽高,则会被拉开到和父级一样高。
这里子元素设置了宽高,所以宽高会按照我们的设置来显示,但是实际上子级的虚拟占位已经撑满了整个父级,这时候,再给他一个margin:auto,它就可以上下左右都居中。

利用定位+margin:负值
绝大多数情况,设置父元素为相对定位,子元素移动自身50%实现水平垂直居中。
在这里插入图片描述
整个实现思路如下图所示:
在这里插入图片描述
初始位置为方块1的位置
当设置left、top为50%的时候,内部子元素为方块2的位置。
设置 margin为负数,使内部子元素到方块3的位置,即中间位置。
这种方案不要求父元素的高度,也就是父元素的高度发生了变化,仍然可以保持在父元素的垂直居中位置,水平方向上是一样的操作。但是该方案需知道子元素自身的宽高,但是可以通过下面transform属性进行移动。

利用定位+transform
实现代码如下:
在这里插入图片描述
translate(-50%,-50%)将会将元素位移自己宽度和高度的-50%
这种方法其实和最上面被否定掉的margin负值用法一样,可以说margin负值的替代方案,并不需要知道自身元素的宽高。

table布局
设置父元素为display:table-cell,子元素设置display:inline-block。利用vertical和text-algin可以让所有的行内块级元素水平垂直居中。
在这里插入图片描述

flex布局
在这里插入图片描述
CSS中的flex布局,可以非常简单实现垂直水平居中。
这里可以看flex布局的关键属性作用:
display:flex时,表示该容器内部的元素将按照flex进行布局
algin-items:center表示这些元素将相对于本容器水平居中
justify-content:center也是同样的道理,垂直居中。

grid网格布局
在这里插入图片描述
这里可以看到,grid网格布局和flex弹性布局都简单粗暴。

小结:
上述方法中,不知道元素宽高大小仍能实现水平垂直居中的方法有:
利用定位+margin:auto
利用定位+transform
flex布局
grid布局

3、总结
根据元素标签的性质,可以分为
内联元素居中布局
块级元素居中布局
内联元素居中布局:
水平居中
行内元素可设置:text-algin:center
flex布局设置父元素:display:flex;justify-content:center
垂直居中:
单行文本父元素确认高度:height===line-height
多行文本父元素确认高度:display:table-cell;vertical-algin:middle

块级元素居中布局:
水平居中:
定宽:margin:0 auto
绝对定位+left:50%+margin:负自身一半
垂直居中:
position:absolute设置left、top、margin-left,margin-top(定高)
display;tabel-cell
transform:translate(x,y)
flex(不定高,不定宽)
grid(不定高,不定宽),兼容性相对比较差

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/25649.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《MySQL45讲》笔记—锁

数据库锁设计初衷是处理并发问题,作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则,而锁就是用来实现这些访问规则的重要数据结构。 根据加锁的范围,MySQL里面的锁大致可以分为全局锁、…

139. 单词拆分(leetcode刷题记录)

单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1: 输入: s “leetcode”, wordDict …

【数据结构和算法】--N叉树返回根节点到目标节点的路径

目录 一、前言二、Java代码实现 一、前言 项目中接触一个问题:在大量有父子关系的列表中,需要筛选出特定约束的数据【要求某个目标节点延续到根节点的数据】。这个问题抽象为数据结构,就是:N叉树返回根节点到目标节点的路径 二、…

Spring IOC

◆ 传统Javaweb开发的困惑 ◆ IoC、DI和AOP思想提出 ◆ Spring框架的诞生 Spring | Home IOC控制反转:BeanFactory 快速入门 package com.xiaolin.service.Impl;import com.xiaolin.dao.UserDao; import com.xiaolin.service.UserService;public class UserServic…

Intel 4工艺太难了!酷睿Ultra终于突破5GHz

无论是14nm还是10nm,Intel这些年的新工艺都有一个通性:刚诞生的时候性能平平,高频率都上不去,只能用于笔记本移动端(分别对应5代酷睿、10代酷睿),后期才不断成熟,比如到了13代酷睿就达到史无前例的6GHz。 接…

【Linux】守护进程

1 相关概念 1.1 守护进程的概念 守护进程也叫做精灵进,是运行在后台的一种特殊进程。它独立于控制终端并且可以周期性的执行某种任务或者处理某些发生的事件。 守护进程是非常有用的进程,在Linux当中大多数服务器用的就是守护进程。比如,web…

前端 select 标签如何创建下拉菜单?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 代码示例⭐ 代码讲解⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚踏…

【网络基础知识铺垫】

文章目录 1 :peach:计算机网络背景:peach:1.1 :apple:网络发展:apple: 2 :peach:协议:peach:2.1 :apple:协议分层:apple:2.2 :apple:OSI七层模型:apple:2.3 :apple:TCP/IP模型:apple:2.4 :apple:TCP/IP模型与操作系统的关系:apple: 3 :peach:网络传输基本流程:peach:4 :peach:网…

MybatisPlus存在 sql 注入漏洞(CVE-2023-25330)解决办法

首先我们了解下这个漏洞是什么? MyBatis-Plus TenantPlugin 是 MyBatis-Plus 的一个为多租户场景而设计的插件,可以在 SQL 中自动添加租户 ID 来实现数据隔离功能。 MyBatis-Plus TenantPlugin 3.5.3.1及之前版本由于 TenantHandler#getTenantId 方法在…

HOT78-跳跃游戏

leetcode原题链接:跳跃游戏 题目描述 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 示例 1: 输入:nums [2,3,1,1,4] 输…

DeviceNet主站网关转ETHERCAT连接ethercat总线伺服如何控制

大家好,今天要和大家分享一款自主研发的通讯网关——捷米JM-ECTM-DNT。这款产品可是解决了不同协议设备数据交换的麻烦问题,让我们一起来看看它的神奇之处吧! 这款通讯网关有什么特别的呢?首先,它可以连接DEVICENET总…

火车头标题伪原创【php源码】

大家好,给大家分享一下python怎么读取文件中的数据,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! 火车头采集ai伪原创插件截图: python是一门非常火爆且相对易学的编程语言,应用在各种场景。许多人想学…

electron+vue3全家桶+vite项目搭建【13.1】ipc通信的使用,主进程与渲染进程之间的交互

文章目录 引入IPC通信[主/渲染]进程对应渲染进程>主进程代码测试测试效果 主进程>渲染进程代码测试测试效果 双向通信代码测试测试效果 引入 electron项目常常由一个主进程和多个渲染进程构成,渲染进程之间是隔离的,而所有渲染进程都和主进程共享…

vscode 格式问题

1、EditorConfig for VS Code 插件 shift alt f 格式化文件(VS Code格式化按键),如下图,每个缩进4空格 代码如下 创建文件名 .editorconfig root true [*] charset utf-8 indent_style space indent_size 2 end_of_…

Docker 启动 Nacos 报错:No DataSource set

​ 👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的编码爱好者 大家好,我是 …

layui 整合UEditor 百度编辑器

layui 整合UEditor 百度编辑器 第一步&#xff1a;下载百度编辑器并配置好路径 百度编辑器下载地址&#xff1a;http://fex.baidu.com/ueditor/ 第二步&#xff1a;引入百度编辑器 代码如下&#xff1a; <div class"layui-form-item layui-form-text"><…

Microsoft Message Queuing Denial-of-Service Vulnerability

近期官方公布了一个MSMQ的拒绝服务漏洞&#xff0c;可能因为网络安全设备的更新&#xff0c;影响业务&#xff0c;值得大家关注。 漏洞具体描述参见如下&#xff1a; Name: Microsoft Message Queuing Denial-of-Service Vulnerability Description: Microsoft Message Queuing…

mysql基本信息查询

1.查看mysql表的数据量 select table_schema as 数据库, table_name as 表名, table_rows as 记录数, truncate(data_length/1024/1024, 2) as 数据容量(MB), truncate(index_length/1024/1024, 2) as 索引容量(MB) from information_schema.tables order by data_length des…

java 版本企业招标投标管理系统源码+多个行业+tbms+及时准确+全程电子化tbms

​ 功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查…

末流211无科研保研经验分享

文章目录 个人背景夏令营哈工大威海西工大光电北航软院北邮计算机中科大科学岛 预推免东南软件北航计算机 写在最后心路历程寄语 个人背景 院校&#xff1a;末流211专业背景&#xff1a;计算机科学与技术排名&#xff1a;夏令营7 / 126&#xff0c;预推免3 / 126英语&#xff…