CSS实现水平居中与垂直居中

article/2025/9/21 11:45:59

CSS实现水平居中与垂直居中

  • 一、水平居中
    • 1. 必备知识
      • 1.1 text-align 属性
      • 1.2 display 属性
      • 1.3 margin 属性
      • 1.4 position 属性
      • 1.5 transform 属性
    • 2. 实现方式
      • 2.1 内联元素居中
      • 2.2 块级元素居中
        • 2.2.1 `margin: 0 auto`
        • 2.2.2 `text-align + display`
        • 2.2.3 `position + transform`
  • 二、垂直居中
    • 1. 偏移实现居中
    • 2. flex弹性布局实现居中

一、水平居中

1. 必备知识

1.1 text-align 属性

text-align 属性指定元素文本的水平对齐方式(作用于子元素和文本)。其常用的值一般有三种:

  • left     左对齐
  • right   右对齐
  • center 居中对齐

1.2 display 属性

display 属性规定元素应该生成的框的类型(作用与元素自身)。其常用的值一般有四种:

  • none 不会被显示
  • block 显示为块级元素
  • inline 默认,显示为内联元素
  • inline-block 显示为行内块级元素

1.3 margin 属性

margin (外边距)属性定义元素周围的空间(作用于元素自身)。它一共有四个属性值,可以简写。

  • 设置一个值:上右下左
  • 设置两个值:上下 - 左右
  • 设置三个值:上 - 左右 - 下
  • 设置四个值:上 - 右 - 下 - 左

1.4 position 属性

position 属性指定一个元素的定位方法的类型(作用于元素自身)。其常用的值一般有四种:

  • absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。
  • relative 生成相对定位的元素,相对于其正常位置进行定位。
  • fixed 生成固定定位的元素,相对于浏览器窗口进行定位。
  • sticky 粘性定位,该定位基于用户滚动的位置。

1.5 transform 属性

transform 属性应用于元素的2D或3D转换(作用于元素自身)。这个属性允许你将元素旋转,缩放,移动,倾斜等。这个属性比较复杂,在这里我们用到的主要是移动。

2. 实现方式

       既然是要实现水平居中,那么父元素必然是一个块级元素,此时根据要实现水平居中的子元素的 display 状态可分为两种情况。

2.1 内联元素居中

内联元素的水平居中非常简单,只需要在父元素中设置 text-align: center 即可。

2.2 块级元素居中

2.2.1 margin: 0 auto

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>测试</title><style type="text/css">#parent {width: 400px;height: 400px;background: rgb(51, 236, 196);}#child {width: 100px;height: 100px;margin: 0 auto;background: coral;}</style></head><body><div id="parent"><div id="child"></div></div></body>
</html>

效果图:
在这里插入图片描述
这种居中方式的优缺点:

  • 优点:只需对子级标签进行设置就可以实现居中效果。
  • 缺点:如果子级标签脱离文档流,将会导致margin属性值失效。

导致元素脱离文档流的几个属性:

  1. float 浮动属性会导致脱离文档流
  2. position: absolute 绝对定位
  3. position: fixed 固定定位

2.2.2 text-align + display

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>测试</title><style type="text/css">#parent {width: 400px;height: 400px;background: rgb(51, 236, 196);text-align: center;}#child {width: 100px;height: 100px;background: coral;display: inline-block;}</style></head><body><div id="parent"><div id="child"><div >居中文本</div></div></div></body>
</html>

效果图:
在这里插入图片描述
这种方式是通过设置子元素左右外边距自动填充,平分剩下的空间来实现水平居中,它的优缺点如下:

  • 优点:浏览器兼容性比较好,因为 text-aligninline-block 这两个属性是 CSS2 支持的,所以在老版本的浏览器中同样可以运行。
  • 缺点:text-align 属性具有继承性,使用它将会导致子标签的文本也是居中的,如果要解决这个问题就需要在其子标签中重新设置 text-align 属性,但是设置后,该标签的子标签同样会继承上一级的 text-align,因此使用这种居中方式很有可能会每个子级标签重新设置text-align属性。

2.2.3 position + transform

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>测试</title><style type="text/css">#parent {width: 400px;height: 400px;background: rgb(51, 236, 196);position: relative;}#child {width: 100px;height: 100px;background: coral;position: absolute;left: 50%;transform: translateX(-50%);}</style></head><body><div id="parent"><div id="child"></div></div></body>
</html>

效果图:
在这里插入图片描述
       在这里需要注意一点,absolute 定位是相对于 static 定位以外的第一个父元素进行定位,因此,我们在使用 absolute 定位时一定要给父元素定位。(此处也可以子元素使用relative定位,父元素不给定位,效果是一样的)
       此方法是先将给子元素绝对定位,随后通过 left: 50% 让子元素向右偏移父元素一半宽度的距离,最后通过 transform: translateX(-50%) 让子元素向左偏移自身一半宽度的距离,借此实现水平居中。

二、垂直居中

1. 偏移实现居中

采用上面所描述的水平居中第三种方式(position + transform)即可实现元素的垂直居中。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>测试</title><style type="text/css">#parent {width: 400px;height: 400px;background: rgb(51, 236, 196);}#child {width: 100px;height: 100px;background: coral;margin: 0 auto;position: relative;top: 50%;transform: translateY(-50%);}</style></head><body><div id="parent"><div id="child"></div></div></body>
</html>

效果图:
在这里插入图片描述
       此处代码实例中,水平居中是用 margin: 0 auto 实现的,但要注意的是只有定位是 relative 时才可使用 margin 属性,若定位为 absolute 则该属性失效,只能使用 transform 属性实现元素的水平居中,此时子元素样式应为(注意此时父元素需要添加 position: relative 属性):

#child {width: 100px;height: 100px;background: coral;position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);
}

2. flex弹性布局实现居中

       使用 CSS3 的弹性布局实现元素的垂直和水平居中会更加方便。只要给父元素设置 display: flex,然后设置对齐方式为两个居中对齐就行。关于flex弹性布局可以看看 阮一峰老师的博客,里面有详细的讲解。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>测试</title><style type="text/css">#parent {width: 400px;height: 400px;background: rgb(51, 236, 196);display: flex;justify-content: center;align-items: center;}#child {width: 100px;height: 100px;background: coral;}</style></head><body><div id="parent"><div id="child"></div></div></body>
</html>

http://chatgpt.dhexx.cn/article/bxSsDKxj.shtml

相关文章

CSS基础知识(五):水平居中和垂直居中

文章目录 一、居中二、水平居中1. 行内元素水平居中2. 块级元素水平居中2.1 使用margin: 0 auto2.2 使用position2.3 使用flex 三、垂直居中1. 行内元素1.1 单行行内元素垂直居中1.2 多行行内元素垂直居中 2. 块级元素2.1 使用position2.2 使用flex 一、居中 行内元素&#xff…

字符串匹配算法之KMP算法(图例详解)

字符串匹配算法之KMP算法&#xff08;图例详解&#xff09; 1.字符串匹配算法及暴力算法1.1 简介1.2 示例题目 2.KMP算法&#xff08;Knuth-Morris-Pratt algorith&#xff09;2.1 朴素算法的缺点2.2 KMP算法2.2.1 KMP算法中的前缀算法2.2.1.1 前缀函数pi的定义2.2.1.2 前缀函数…

字符串匹配算法(KMP)

问题&#xff1a; 给你两个字符串 s 和 pat &#xff0c;请你在 s 字符串中找出 pat 字符串出现的第一个位置&#xff08;下标从 0 开始&#xff09;&#xff0c;如果不存在则返回-1。 1.暴力匹配算法。 暴力匹配算法较好理解&#xff0c;其大致原理如图&#xff1a; 当D和E不…

字符串匹配算法KMP详细解释——深入理解

1. 前言 字符串匹配是一个经典算法问题&#xff0c;展开来讲各类问题多达几十种&#xff0c;有名称的算法也不下三十种&#xff0c;所以需要深入学习的东西有很多。这次我们来探讨一个最简单的问题&#xff0c;假设现在随机输入一个长度为m的主串T&#xff0c;另外输入一个长度…

几种常见的字符串匹配算法

转自http://www.360doc.com/content/14/0325/15/15064667_363609292.shtml 1. 朴素算法 朴素算法是最简单的字符串匹配算法&#xff0c;也是人们接触得最多的字符串匹配算法。代码一看就懂&#xff0c;在此不在赘述。 #include<stdio.h> #include<string.h> voi…

字符串匹配算法——JavaScript

字符串匹配算法——javascript 文章目录 字符串匹配算法——javascript字符串匹配BF算法 &#xff08;暴力匹配&#xff09; √KMP算法 √BM算法**坏字符规则**好后缀规则 Trid树&#xff08;字典树&#xff09;√ 字符串匹配 字符串匹配问题的形式定义&#xff1a; **文本&a…

数据结构与算法--字符串匹配算法

目录 概要 单模式与多模式的区别 单模式匹配算法 BF算法 概念 代码实现 时间复杂度 应用 RK算法 概念 代码实现 时间复杂度 应用 BM算法 概念 算法原理 代码实现 时间复杂度 应用 多模式匹配算法 Trie树 概念 Trie树的插入 Trie树的查找 代码实现 时间复杂度 应用 概要 字符…

简单高效的字符串匹配算法

Quick Search算法 算法简介 Quick Search算法属于Sunday算法的一种。Sunday算法由Daniel M Sunday在1990年提出。论文原文&#xff1a;A VERV FAST SU6STRINC SEARCH ALGORITHM 在论文中&#xff0c;作者提出了三个不同的算法&#xff1a;Quick Search算法、Maximal Shift算…

算法之字符串匹配

字符串匹配&#xff1a;设 S 和 T 是给定的两个串&#xff0c;在主串 S 中找到模式串 T 的过程称为字符串匹配&#xff0c;如果在主串 S 中找到模式串 T &#xff0c;则称匹配成功&#xff0c;函数返回 T 在 S 中首次出现的位置&#xff0c;否则匹配不成功&#xff0c;返回 -1。…

经典字符串匹配算法——KMP算法

KMP算法 KMP算法是一种高效的字符串匹配算法&#xff0c;在传统暴力遍历匹配的基础上做了一定的优化。 首先KMP算法的实现也是使用了回退思想&#xff0c;不过与暴力遍历不同&#xff0c;KMP的回退&#xff0c;是让子串进行匹配&#xff0c;而不是主串。 KMP示例 首先我们来…

16.算法之字符串匹配算法

前言 字符串匹配是我们在程序开发中经常遇见的功能&#xff0c;比如sql语句中的like,java中的indexof,都是用来判断一个字符串是否包含另外一个字符串的。那么&#xff0c;这些关键字&#xff0c;方法&#xff0c;底层算法是怎么实现的么&#xff1f;本节&#xff0c;我们来探…

字符串匹配算法(BM)

文章目录 1. BM&#xff08;Boyer-Moore&#xff09;算法1.1 坏字符规则1.2 好后缀规则1.3 两种规则如何选择 2. BM算法代码实现2.1 坏字符2.2 好后缀2.3 完整代码2.4 调试 3. 总结 1. BM&#xff08;Boyer-Moore&#xff09;算法 思想&#xff1a;有模式串中不存在的字符&…

六种字符串匹配算法详解(含代码演示)

1. Brute-Force算法 2. Rabin-Karp Hash算法 3. Kmp算法 4. Kmp的优化算法 5. Sunday算法 6. Shift-And算法 ps&#xff1a;字符串匹配其实是单模匹配问题 1.Brute-Force 朴素匹配算法&#xff08;暴力匹配&#xff09; 时间复杂度&#xff1a;O(n*m) //返回 文本串s中第一…

字符串匹配算法(BF、KMP)

BF算法 描述&#xff1a; BF&#xff0c;Brute Force&#xff0c;暴力匹配的意思&#xff0c;是最简单直观的字符串匹配算法。假设有主串s1和子串s2&#xff0c;根据BF算法判断s1是否包含s2的步骤如下&#xff1a; 初始下标指针 i, j 分别指向s1, s2的首位置&#xff0c;若s1…

这可能是全网最好的字符串匹配算法讲解

点击上方 好好学java &#xff0c;选择 星标 公众号重磅资讯&#xff0c;干货&#xff0c;第一时间送达 今日推荐&#xff1a;14 个 github 项目&#xff01;个人原创100W 访问量博客&#xff1a;点击前往&#xff0c;查看更多为保证代码严谨性&#xff0c;文中所有代码均在 le…

Spring boot 项目(五)——AOP切面

一、AOP简介 1、在软件业&#xff0c;AOP为Aspect Oriented Programming的缩写&#xff0c;意为&#xff1a;面向切面编程&#xff0c;通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。 2、AOP是OOP的延续&#xff0c;是软件开发中的一个热点&#xff0c;也…

Spring AOP 切面(Aspect)应用详解

1. AOP 切面应用 下面是一个AOP切面的一个简单的应用实例 引入AOP依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>创建切面类对象 Aspect Component pub…

springboot实现AOP切面编程

概述 AOP(Aspect Oriented Programming) 即面向切面编程。面向切面是面向对象中的一种方式而已。在代码执行过程中&#xff0c;动态嵌入其他代码&#xff0c;叫做面向切面编程&#xff08;将交叉业务逻辑封装成成切面&#xff0c;利用AOP功能将切面织入到主业务逻辑———与主…

spring AOP切面及日志记录实现

目录 1.什么是AOP切面 2.理解AOP 3.AOP实例 1.自定义注解 2.创建一个切面类 3.将自定义注解标注在测试接口上 1.什么是AOP切面 AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff0c;面向切面思想&#xff0c;是Spring的三大核心思想之一。 在项目中经常…

Aop切面自定义注解的使用

一&#xff1a;功能简介 本文主要记录如何使用aop切面的方式来实现日志记录功能。 主要记录的信息有: 操作人&#xff0c;方法名&#xff0c;参数&#xff0c;运行时间&#xff0c;操作类型(增删改查)&#xff0c;详细描述&#xff0c;返回值。 二&#xff1a;项目结构图 三…