css 文本和div垂直居中方法汇总

article/2025/9/21 20:05:24

在样式布局中,我们经常碰到需要将元素居中。通过css实现元素的水平居中较为简单:对文本,只需要对其父级元素设置text-align: center;,而对div等块级元素,只需要设置其left和right的margin值为auto。要实现元素的垂直居中,有人会想到css中的vertical-align属性,但是它只对拥有valign特性的元素才生效,例如表格元素中的<td><th><caption>等,而像<div><span>这样的元素是没有valign特性的,因此使用vertical-align对它们不起作用。因此我们需要通过别的方法去实现元素的垂直居中,下面我总结了几种了常用垂直居中方法。

单行文本垂直居中

对于单行文本,我们只需要将文本行高(line-height)和所在区域高度(height)设为一致即可:

<!--html代码--><div id="div1">这是单行文本垂直居中</div>/*css代码*/#div1{width: 300px;height: 100px;margin: 50px auto;border: 1px solid red;line-height: 100px; /*设置line-height与父级元素的height相等*/text-align: center; /*设置文本水平居中*/overflow: hidden; /*防止内容超出容器或者产生自动换行*/}

这里写图片描述

多行文本垂直居中

多行文本垂直居中分为两种情况,一个是父级元素高度不固定,随着内容变化;另一个是父级元素高度固定。

父级元素高度不固定

父级高度不固定的时,高度只能通过内部文本来撑开。这样,我们可以通过设置内填充(padding)的值来使文本看起来垂直居中,只需设置padding-top和padding-bottom的值相等:

<!--html代码--><div id="div1">这是多行文本垂直居中,这是多行文本垂直居中,这是多行文本垂直居中,这是多行文本垂直居中。</div>/*css代码*/#div1{width: 300px;margin: 50px auto;border: 1px solid red;text-align: center; /*设置文本水平居中*/padding: 50px 20px;}

这里写图片描述

父级元素高度固定

本文一开始就提到css中的vertical-align属性,但是它只对拥有valign特性的元素才生效,结合display: table;,可以使得div模拟table属性。因此我们可以设置父级div的display属性:display: table;;然后再添加一个div包含文本内容,设置其display:table-cell;vertical-align:middle;。具体代码如下:

<!--html代码--><div id="outer"><div id="middle">这是固定高度多行文本垂直居中,这是固定高度多行文本垂直居中,这是固定高度多行文本垂直居中,这是固定高度多行文本垂直居中。</div></div>/*css代码*/#outer{width: 400px;height: 200px;margin: 50px auto;border: 1px solid red;display: table;}#middle{ display:table-cell; vertical-align:middle;  text-align: center; /*设置文本水平居中*/  width:100%;   }

这里写图片描述

但是,在IE7中显示效果如下:
这里写图片描述

这是因为IE7及以下的版本并不能很好的支持display:table和display:table-cell属性,当然,如果你不考虑IE7以下的版本的浏览器,上述方法是可以实现垂直居中。如果把IE7及以下版本考虑进去,我们可以通过用到CSS hack的知识来设置针对不同浏览器的属性。

<!--html代码--><div id="outer"><div id="middle"><div id="content">这是固定高度多行文本垂直居中(兼容IE7),这是固定高度多行文本垂直居中(兼容IE7),这是固定高度多行文本垂直居中(兼容IE7),这是固定高度多行文本垂直居中(兼容IE7)。</div></div></div>/*css代码*/#outer{width: 400px;height: 200px;margin: 50px auto;border: 1px solid red;display: table;*position:relative;  //兼容IE7及以下版本}#middle{ display:table-cell; vertical-align:middle;  text-align: center; /*设置文本水平居中*/  width:100%;*position:absolute;   //兼容IE7及以下版本*top:50%;  }#content {  *position:relative;  //兼容IE7及以下版本 *top:-50%;  }

子div垂直居中

1、根据子div具体大小设置偏移

如果子div固定大小,设定水平和垂直偏移父元素的50%,再根据实际长度将子元素向上和向左挪回一半大小

<!--html代码--><div id="outer"><div id="middle">子div(固定大小)垂直居中</div>          </div>/*css代码*/#outer{background-color: #13CDF4;width: 300px;height: 200px;position: relative;}#middle{ background-color: #E41627;width: 100px;height: 100px;margin: auto;position: absolute;left: 50%; top: 50%;margin-left: -50px;margin-top: -50px;}

这里写图片描述

该方法兼容IE7、IE6,但是只针对子div大小的固定的情况下才有效。大部分时候,子div的大小是不固定的,下面介绍子div大小不固定时的方法。由于显示效果与这个效果基本一样,效果图就不一一贴出来,读者可以自行复制代码验证。

2、利用translate

针对第一种方法中水平和垂直偏移父元素的50%后,不设置margin值,而是利用除css3中的transform属性设置translate的值,css代码部分改成如下:

#middle{ background-color: #E41627;width: 100px;height: 100px;margin: auto;position: absolute;left: 50%; top: 50%;transform: translateX(-50%) translateY(-50%);-webkit-transform: translateX(-50%) translateY(-50%);}

这种方法需要注意transform是css3中的属性,使用时注意浏览器的兼容性,IE9之前的版本不支持。

3、利用绝对布局absolute

<!--html代码--><div id="outer"><div id="middle">利用绝对定位实现子div大小不固定垂直居中</div>          </div>/*css代码*/#outer{background-color: #13CDF4;width: 300px;height: 200px;position: relative;}#middle{ background-color: #E41627;width: 100px;   //子div大小可随意设置height: 100px;margin: auto;position: absolute;top: 0;left: 0;right: 0;bottom: 0;}

该方法不兼容IE7、IE6

4、利用vertical-align

<!--html代码--><div id="outer"><div id="middle">利用vertical-align属性实现子div大小不固定垂直居中</div>          </div>/*css代码*/#outer{background-color: #13CDF4;width: 300px;height: 200px;display: table-cell; vertical-align: middle;}#middle{ background-color: #E41627;width: 100px;height: 100px;margin: 0 auto;}

这种方法是将div转变成table-cell显示,然后通过vertical-align: middle;再设置其子元素垂直居中,这种方法和上面设置父级元素高度固定时多行文本居中的方法一样,所以这种方法也不能兼容IE7、IE6。如果需要兼容IE7、IE6,可以参照上面的代码,上面设置父级元素高度固定时多行文本居中的方法其实就是将最里面的div垂直居中。这里我就不重述了。

5、利用display: flex

<!--html代码--><div id="outer"><div id="middle">利用display: flex实现子div大小不固定垂直居中</div>          </div>/*css代码*/#outer{background-color: #13CDF4;width: 300px;height: 200px;display: flex;justify-content: center;/*实现水平居中*/align-items:center; /*实现垂直居中*/}#middle{ background-color: #E41627;width: 100px;height: 100px;}

这种方法只需要在父级div中加上这三句话就行,但是在IE中兼容性不好,IE9及以下IE浏览器版本都不支持。

以上是我总结的一些常用到的垂直居中的设计方法,大家可以根据自己的需要选择合适的设计方式。


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

相关文章

CSS——div垂直居中及div内文字垂直居中

最近做demo时&#xff0c;经常需要div垂直居中或者让div内文字相对div垂直居中。水平居中比较简单&#xff0c;就不多说了&#xff0c;这里主要记录一下垂直居中的一些方法。 一、div垂直居中的一些方法&#xff1a; 1.当height、width固定大小时&#xff0c; <!DOCTYPE htm…

div水平垂直居中的常用方法

html5的文档结构 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><title></title></head> <body></body> </html> 效果图&#xff1a; 1.通过设置绝对定位和设置负边距实现&…

div水平垂直居中的七种方法

学习笔记&#xff08;一&#xff09; div水平垂直居中的七种方法 文章目录 学习笔记&#xff08;一&#xff09;前言一、绝对定位法1.方法一2.方法二3.方法三4.方法四 二、flex布局法1.方法五 三、将小div转成行内块1.方法六 四、网格布局1.方法七 总结 前言 在写小demo过程中…

div 垂直居中的六种方法

利用CSS进行元素的水平居中&#xff0c;比较简单&#xff0c;行级元素设置其父元素的text-align center&#xff0c;块级元素设置其本身的left 和 right margins为auto即可。本文收集了六种利用css进行元素的垂直居中的方法&#xff0c;每一种适用于不同的情况&#xff0c;在实…

CSS进阶篇--div中的内容垂直居中的五种方法

一、行高&#xff08;line-height&#xff09;法 如果要垂直居中的只有一行或几个文字&#xff0c;那它的制作最为简单&#xff0c;只要让文字的行高和容器的高度相同即可&#xff0c;比如&#xff1a; p { height:30px; line-height:30px; width:100px; overflow:hidden; }这段…

div水平垂直居中的四种方式

让div水平居中的方式&#xff0c;我所知道的就是以下这四种。 文章目录 一、margin二、绝对定位三、子元素绝对定位父元素相对定位四、flex布局总结 一、margin 第一种方式我们可以利用外边距属性来使div水平垂直居中 先来看一段有问题的代码 <!DOCTYPE html> <ht…

div水平垂直居中方法汇总(共六种)

文章目录 第一种第二种第三种第四种第五种第六种 第一种 绝对定位方法&#xff1a;不确定当前div的宽度和高度&#xff0c;采用 transform: translate(-50%,-50%); 当前div的父级添加相对定位&#xff08;position: relative;&#xff09; <!DOCTYPE html> <html lang…

缓存设计(本地缓存 + 分布式缓存)

缓存设计 前言正文缓存对象缓存服务缓存策略本地缓存Guava的使用 分布式缓存Redis缓存分布式缓存的生命周期分布式缓存的一致性问题 源码解读从缓存中获取秒杀品 分布式锁 总结参考链接 前言 大家好&#xff0c;我是练习两年半的Java练习生&#xff0c;本篇文章会分析秒杀系统…

分布式缓存解决方案

高并发首选&#xff1a;缓存 项目代码下载地址&#xff1a;https://gitee.com/tyytx/distrbute-demo.git 接口高并发的解决思路&#xff1a;1、加缓存 2、数据静态化 3、集群 4、分布式 5、同步转异步 6、限流、降级 适合加缓存的场景&#xff1a;读多写少的数据&#xff0c;不…

ehcache作为分布式缓存的研究

ehcache支持两种拓扑结构&#xff0c;一种是Distributed Caching&#xff0c;另一种是Replicated Caching Distributed Caching 这和一般意义上的分布式缓存非常类似&#xff0c;这一类型的缓存是有client-server之分的&#xff0c;application通过client向server端请求缓存数据…

分布式缓存平台方案

目录 1、总体说明 1.1、采取redis的原因 1.2、平台总体架构 2、多协议支持方案 3、高可用&#xff08;HA&#xff09;方案 3.1、基础设施 3.2、故障检测 3.3、故障切换 4、分布式方案 4.1、垂直扩展 4.2、水平扩展 5、容量管理 6、安全 6.1、配置安全 6.2、访问安…

分布式缓存架构基础

一、缓存概述 1.1 什么是缓存 缓存在wiki上的定义&#xff1a;用于存储数据的硬件或软件的组成部分&#xff0c;以使得后续更快访问相应的数据。缓存中的数据可能是提前计算好的结果、数据的副本等。典型的应用场景&#xff1a;有cpu cache, 磁盘cache等。本文中提及到缓存主要…

基于redis分布式缓存实现

简单说明下&#xff0c;写此文章算是对自己近一段工作的总结&#xff0c;希望能对你有点帮助&#xff0c;同时也是自己的一点小积累。 一.为什么选择redis 在项目中使用redis做为缓存&#xff0c;还没有使用memcache,考虑因素主要有两点&#xff1a; 1.redis丰富的数据结构,其…

本地缓存与分布式缓存

更多内容&#xff0c;前往 IT-BLOG 一般而言&#xff0c;现在互联网应用&#xff08;网站或App&#xff09;的整体流程&#xff0c;可以概括如图所示&#xff0c;用户请求从界面&#xff08;浏览器或App界面&#xff09;到网络转发、应用服务再到存储&#xff08;数据库或文件系…

Spring分布式缓存

什么是分布式缓存 在实际开发场景中&#xff0c;往往单机应用无法满足当前的需求&#xff0c;需要对项目进行分布式部署&#xff0c;由此每个项目中的缓存都是属于自己独立服务的&#xff0c;并不能共享&#xff0c;其次当某个服务更新了缓存&#xff0c;其他服务并不知道&…

高性能分布式缓存的设计原理

又是一个没有开工红包的公司&#xff01;&#xff01;&#xff01; 问题分析 通过以上对话&#xff0c;各位是否能够猜到所有缓存穿透的原因呢&#xff1f;回答之前我们先来看一下缓存策略的具体代码 缓存服务器IPhash(key)%服务器数量 这里还要多说一句&#xff0c;key的取值…

redis 分布式缓存 详解

1、Redis概述 1.1、NoSQL NoSQL(Not Only SQL)&#xff0c;意即不仅仅是SQL, 泛指非关系型的数据库。 1.2、Redis安装 首先需要从Redis官网上下载Redis的源码包&#xff0c;将下载的包上传到Linux&#xff0c;之后将gz文件进行解压。 # 解压gz文件 tar -zxvf redis-6.2.6…

本地缓存、分布式缓存以及多级缓存

像MySql等传统的关系型数据库已经不能适用于所有的业务场景&#xff0c;比如电商系统的秒杀场景&#xff0c;APP首页的访问流量高峰场景&#xff0c;很容易造成关系型数据库的瘫痪&#xff0c;随着缓存技术的出现很好的解决了这个问题。 一、缓存的概念&#xff08;什么是缓存…

分布式架构系列:缓存

一、缓存概述 缓存是分布式系统中的重要组件&#xff0c;主要解决高并发&#xff0c;大数据场景下&#xff0c;热点数据访问的性能问题。提供高性能的数据快速访问。 1.1缓存的原理 &#xff08;1&#xff09; 将数据写入/读取速度更快的存储&#xff08;设备&#xff09;&…

分布式缓存那些事儿

在前面的一些文章中&#xff0c;从实战的角度&#xff0c;讲解了有关memcached的应用、容灾、监控等等。但是缺乏对理论的讲解和原理性的剖析。本文将从理论的角度去介绍&#xff0c;让大家从宏观上对“分布式缓存、nosql”等技术有所了解&#xff0c;以便进一步学习和使用。在…