CSS布局对齐方式--水平居中、垂直居中、水平垂直居中

article/2025/9/21 11:17:18

    前言:在网页布局中,经常遇到需要使元素居中对齐的时候,居中对齐的方式有:水平居中、垂直居中和水平垂直居中。这次,借此回顾总结一下,并在此记录下相关内容。

一、水平居中:

    (1)行内元素的水平居中

            如果被设置的元素为文本、图片等行内元素时,在父元素中设置text-align:center实现行内元素水平居中,将子元素的设置为display:inline-block,使子元素变成行内元素;

<div class="parent" style="background-color: gray;"><div class="child" style="background-color: light-blue;">demo</div>
</div>
<style>
.parent {text-align: center;
}
.child {display: inline-block;
}
</style>

    (2)块状元素的水平居中(定宽)

        当被设置元素为定宽块级元素时用text-align:center;就不起作用了。可以通过设置“margin: 0 auto;”来实现居中的。

<div class="parent" style="background-color: gray;"><div class="child" style="background-color: lightblue;">demo</div>
</div>
.child {width: 200px;margin: 0 auto;
}

    (3)块状元素的水平居中(不定定宽)

        在实际工作中,我们会遇到需要为“不定宽度的块级元素”设置居中,如网页上的分页导航,因为分页的数量是不确定的,所以,不能通过设置宽度来限制它的弹性。

       可以直接给补丁款的块级元素设置text-align:center;来实现,也可以给父元素加text-align:center;来实现居中效果。

      当不定宽块级元素的宽度不要占一行时,可以设置display为inline类型或inline-block(设置为行内元素显示或行内块元素)。

<div class="container"><ul><li><a href="#">1</a></li><li><a href="#">2</a></li><li><a href="#">3</a></li></ul>
</div>
.container {text-align: center;background: beige;
}
.container ul {list-style: none;margin: 0;padding: 0;display: inline-block;
}
.container li {margin-right: 8px;display: inline-block;
}

二、垂直居中

      和水平居中一样,垂直居中,首先需设定两个条件即父元素是盒子容器且高度已经设定。

    (1)子元素是行内元素,高度是由其内容撑开的。

            这种情况下,需要通过设定父元素的line-height为其高度来使得子元素垂直居中。

<div class="wrap line-height"><span class="span">111111</span>
</div>
.wrap {width: 200px;height: 300px;line-height: 300px;border: 2px solid #ccc;
}
.span {background: red;
}

  

    (2)子元素是块级元素但子元素高度没有设定,在这种情况下,实际上是不知道子元素的高度的,无法通过计算得到padding或margin来调整。

       可以通过给父元素设定display:table-cell;vertical-align:middle;来解决。

<div class="wrap"><div class="non-height">111111</div>
</div>
.wrap {width: 200px;height: 300px;border: 2px solid #ccc;display: table-cell;vertical-align: middle;
}
.non-height {background: green;
}

    (3)子元素是块级元素且高度已经设定

        计算子元素的margin-top或margin-bottom,计算方法为父(元素高度-子元素高度)/ 2;

<div class="wrap"><div class="div1">111111</div>
</div>
.wrap {width: 200px;height: 300px;border: 2px solid #ccc;
}
.div1 {width: 100px;height: 100px;margin-top: 100px;background: darkblue;
}

三、水平垂直居中

    (1)水平对齐+行高

            text-align + line-height实现单行文本水平垂直居中

<style>.test {text-align: center;line-height: 100px;
}
</style>
<div class="test" style="background-color: lightblue;width: 200px;"></div>

    (2)水平+垂直对齐

        ①text-align + vertical-align 在父元素设置text-align和vertical-align,并将父元素设置为table-cell元素,子元素设置为inline-block元素。

<style>
.parent {display: table-cell;text-align: center;vertical-align: middle;
}
.child {display: inline-block;
}
</style>
<div class="parent" style="background-color: gray; width: 200px; height:100px;><div class="child" style="background-color: lightblue;">测试文字</div>
</div>

        ②若子元素是图像,可不使用table-cell,而是其父元素用行高代替高度,且字体大小设为0。子元素本身设置vertical-align:middle;

<style>
.parent {text-align: center;line-height: 100px;font-size: 0;
}
.child {vertical-align: middle;
}
</style>
<div class="parent" style="background-color: gray; width: 200px;"><img class="child" src="images/1.png" width="50%" alt="test">
</div>

    (3)相对+绝对定位

        使用absolute,利用绝对定位元素的盒模型特性,在偏移属性为确定值的基础上,设置margin: auto;

<style>
.parent {position: relative;
}
.child {position: absolute;top: 0;left: 0;right: 0;bottom: 0;width: 80px;margin: auto;
}
</style>
<div class="parent" style="background-color: lightgray;width: 200px; height: 100px;><div class="child" style="background-color: lightblue;">测试文字</div>
</div>

PS:01、补充《三》中的水平垂直居中的方式(2018/08/29)

     translate()函数可以在不知道自身宽高的情况下,利用它进行水平垂直居中。但是,有兼容性问题,支持IE9+的游览器。

使用translate函数,配合left,top属性,可以让目标元素始终保持水平垂直居中,当游览器窗口发生变化时,也能一直保持水平垂直居中。

<div class="wrap">不知道宽高,可以水平垂直居中
</div>
.wrap {padding: 10px;background: green;color: #fff;border-radius: 5px;position: absolute;top: 50%;left: 50%;  /*定位margin-left:50%的位置*/-webkit-transform: translate(-50%,-50%); /*Safari,Chrome*/-moz-transform: translate(-50%,-50%);  /*IE9+*/transform: translate(-50%,-50%); /*使元素本身向左移动宽度的一半*//*transform使元素在当前位置分别往x轴,y轴正向平移自身宽度的一半距离。*/
}

02、补充《三》中的水平垂直居中的方式(2018/11/29)

       场景:使用背景图片属性,使图片在父元素的盒子中始终居中,但是,背景图片的尺寸大小不固定。

      关键:background-position:center center;(background-position:50% 50%;)属性。

<div class="index-imgBlock"><div class="index-image"></div>
</div>
.index-image {height: 268px;/*选取三张图片中最大高度的尺寸设定*/width: 100%;max-width: 484px; /*选取三张图片中的最大宽度的尺寸设定*/background: url(images/403.png);       /*403图片尺寸为484*206*//*background: url(images/404.png);*/   /*403图片尺寸为428*268*//*background: url(images/500.png);*/   /*500图片尺寸为475*236*/background-position: center center;border: 1px solid #333333;
}

 

background-position属性默认值为0% 0%,即背景图像的左上角与对象背景区域的左上角对齐。使用background-position:center center;/background-position:50% 50%;这样就可以使背景图像的中心,与背景区域的中心对齐,即背景图像位于对象的中央位置。

参考博客:CSS布局(六)对齐方式  点击打开链接  http://www.cnblogs.com/chaixiaozhi/p/8490725.html 

 版权声明:本文为博主原创文章,未经博主允许不得转载。
              
 

 

 


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

相关文章

CSS水平居中+垂直居中+水平/垂直居中的方法总结

目录 水平居中 行内元素 块级元素 方案一&#xff1a;(分宽度定不定两种情况) 方案二&#xff1a;使用定位属性 方案三&#xff1a;使用flexbox布局实现&#xff08;宽度定不定都可以&#xff09; 垂直居中 单行的行内元素 多行的行内元素 块级元素 水平垂直居中 已…

HTML/CSS常见的几种水平居中、垂直居中、水平垂直居中方法

HTML/CSS常见的几种水平居中、垂直居中、水平居中方式 一、水平居中 1.第一种方式 在css中使用text-align和display属性 <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; ch…

CSS居中——水平居中、垂直居中方法

水平居中 1、行内或类行内元素&#xff08;如文本、链接&#xff09; 在块级父元素中用CSS样式实现行内元素水平居中&#xff0c;只需要设置&#xff1a;text-align: center; 这种方法可以让 inline / inline-block / inline-table / flex 等类型的元素实现居中。 效果图&a…

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

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 auto2.2.2 text-align display2.2.3 position transform 二、垂直…

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;也…