CSS中实现元素居中的七种方法

在前端开发中,经常需要将元素居中显示,CSS提供了多种技术方法来实现元素的居中,在不同场景下有不同的使用方法、不同的效果,需要特别记住它们的应用场景才能够正常的居中。这篇文章就大致总结一下CSS中的居中方法。

一、元素分类

在CSS中,元素大致可以分为以下几种:

1.块级元素(Block-level Elements):

这些元素以块的形式显示在页面上,每个块级元素会独占一行(除非通过其他CSS属性进行修改)。 块级元素可以设置宽度、高度、内边距和外边距。 一些常见的块级元素包括<div>, <p>, <h1>-<h6>, <ul>, <li>, <section>, <footer>等。

2.行内元素(Inline Elements):

行内元素也称为内联元素,这些元素以行内的形式显示在页面上,它们不会独占一行,而是在同一行上与其他元素并排显示。 行内元素的宽度和高度默认由其内容决定,无法设置宽度和高度。 一些常见的行内元素包括<span>, <a>, <strong>, <em>, <img>, <input>等。

3.行内块元素(Inline-block Elements):

这些元素以行内块的形式显示在页面上,具有行内元素的特性,但可以设置宽度、高度、内边距和外边距。 行内块元素会在同一行上显示,但它们之间会保留空白间隔。 一些常见的行内块元素包括<button>, <label>, <select>, <textarea>, <img> 等。

二、使用 text-align: center 居中

使用 text-align: center; 可以在CSS中实现内联元素的水平居中。这个技术利用了CSS的 text-align 属性,通过对元素的文本对齐方式进行调整来实现居中效果。注:只展示主要代码。

<div class="container"><span>检测居中效果</span><br><img src="1.jpg" alt=""><br><input type="text" value="检测居中效果">
</div>
.container {text-align: center;
} 

在上述示例中,将容器的 text-align 属性设置为 center,使容器内的文本水平居中显示。由于内联元素的默认宽度与内容宽度一致,所以通过调整文本的对齐方式,元素就可以在容器中水平居中。

需要注意的是,这种方法适用于内联元素,而不适用于块级元素。对于块级元素,可以将其包裹在一个容器中,并对容器应用 text-align: center; 实现块级元素的水平居中。

这是一种简单而常用的方法,特别适用于文本、按钮、图标等内联元素的水平居中。然而,它只能实现水平居中,对于垂直居中需要采用其他的布局方法。若元素是单行文本, 则可设置 line-height 等于父元素高度来实现垂直居中。

三、使用 margin: 0 auto 居中

要将块级元素水平居中,可以使用 margin 属性将左右边距设置为 auto。

.container {width: 300px; /* 设置容器的宽度 */margin: 0 auto; /* 水平居中 */
}

在上述示例中,将容器的宽度设置为一个固定值,然后使用 margin: 0 auto; 将左右外边距设置为 "auto",实现元素的水平居中。由于左右外边距都设置为 "auto",浏览器会自动将剩余的空间均匀分配给两侧的外边距,从而使元素居中显示,这种方法适用于具有固定宽度的块级元素。

四、使用 Flexbox 居中元素

Flex 弹性布局,通过将容器的 display 属性设置为 flex,并使用 justify-content 和 align-items 属性分别进行水平和垂直居中设置,元素将在容器中居中显示。

.container {display: flex;justify-content: center; /* 水平居中 */align-items: center;     /* 垂直居中 */
} 

Flexbox 还提供了其他属性,如 flex-direction、flex-wrap、align-content 等,可以根据具体需求进行进一步的布局调整。使用 Flexbox 可以轻松实现各种居中效果,并且具有很好的浏览器兼容性。

五、使用 Grid 居中元素

网格布局 Grid 是另一种强大的布局模型,也可以用于实现元素的居中布局。通过将容器的 display 属性设置为 grid,并使用 place-items 属性设置为 center,元素将在容器中居中显示。

.container {display: grid;place-items: center; /* 水平和垂直居中 */
}

在上面的代码示例中,place-items: center是水平和垂直居中,如果只想水平居中可以用justify-items: center。如果只想垂直居中可以用 align-items: center

六、使用定位和负边距居中

首先将容器的左边距设置为50%(相对于父容器),然后使用transform: translateX(-50%);将元素向左平移50%的宽度,从而实现了水平居中。

.container {position: absolute;left: 50%;transform: translateX(-50%);
} 

下面是水平和垂直居中的示例。

.container {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);
} 

将要居中的元素的定位属性设置为 absolute。通过将元素的 top 和 left 属性都设置为 50%,元素的左上角将位于容器的中心。最后,通过 transform 属性和 translate 函数将元素向上和向左平移自身宽度和高度的一半,从而实现垂直居中的效果。

使用绝对定位和负边距可以适用于不同类型的元素,包括块级元素和内联元素。这是一种简洁而有效的方法,可以快速实现水平居中布局。

七、使用 calc() 函数居中

calc() 函数通过执行简单的数学运算,并返回计算结果作为CSS属性值。使用 calc() 函数可以根据具体的需求进行灵活的计算和布局,实现元素在水平或垂直方向的居中。

对于水平居中,可以使用 calc() 函数结合百分比和像素值来计算元素的左右外边距。通过将50%(容器的一半宽度)减去150像素(元素宽度的一半)来计算得到。

.container {width: 300px;margin-left: calc(50% - 150px);margin-right: calc(50% - 150px);/* background-color: blue; */
} 

对于垂直居中,可以使用 calc() 函数结合百分比、像素值和视口单位(如vh)来计算元素的上下外边距。通过将50vh(视口高度的一半)减去200像素(元素高度的一半)来计算得到的。

.container {height: 400px;margin-top: calc(50vh - 200px);margin-bottom: calc(50vh - 200px);
} 

请注意,calc() 函数的兼容性良好,但在使用时需要确保计算表达式正确并考虑浏览器的兼容性。

八、使用 table 居中

使用表格布局(Table Layout)可以实现元素的居中布局。虽然表格布局在现代响应式布局中不常用,但在某些特定情况下仍然可以作为一种解决方案。

要使用表格布局居中元素,需要创建一个包含一个单元格的表格,并将元素放置在该单元格中。

.container {display: table;width: 100%;
}
.content {display: table-cell;text-align: center;
}

<div class="container"><div class="content"><div>检测居中效果</div><p>检测居中效果</p><input type="text" value="检测居中效果"></div>
</div>

在上述示例中,容器的宽度被设置为100%以使其填充父容器的宽度。父容器设置为 display: table,子容器设置为 display: table-cell,并使用 text-align: center 将元素水平居中。

需要注意的是,使用表格布局可能会影响文档的语义性,因此仅在适用的情况下使用。在现代的CSS布局中,使用 Flexbox 或 Grid 布局更为推荐,因为它们提供更灵活和语义化的布局选项。

九、总结

本文介绍了在CSS中实现元素居中的几种常用技术方法,主要介绍的是水平居中,根据具体需求和布局,选择适合的方法实现元素的居中效果即可。这些方法可以单独使用或结合使用,取决于布局和设计要求。同时,还可以使用其他CSS属性和技术来进一步优化和调整居中效果。

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

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

相关文章

[递归]有理数树

有理数树 题目描述 二叉树指的是一种树形结构&#xff0c;它的每个结点有至多两个子节点。 现在有一个由有理数组成的无穷二叉树形状如下&#xff1a; 1/1______|______| |1/2 2/1___|___ ___|___| | | | 1/3 3/2 2/3 3/1在p/q结点位…

3.计算机网络补充

2.5 HTTPS 数字签名&#xff1a;发送端将消息使⽤ hash 函数⽣成摘要&#xff0c;并使⽤私钥加密后得到“数字签名”&#xff0c;并将其附在消息之后。接收端使⽤公钥对“数字签名”解密&#xff0c;确认发送端身份&#xff0c;之后对消息使⽤ hash 函数处理并与接收到的摘要对…

【中间件】服务化中间件理论intro

中间件middleware 内容管理 intro服务化middleware架构注册中心intro服务治理系统intro 本文主要intro服务化中间件的探讨 去年cfeng写了一篇博客走马观花般阐述了Spring Cloud下面的各种中间件&#xff0c;连深入使用都谈不上&#xff0c;只能说intro&#xff0c;在实际work中…

数字孪生助力污水处理升级

随着科技的发展&#xff0c;数字孪生技术在各行各业中得到了广泛应用。在污水处理领域&#xff0c;数字孪生技术为流程监控、效率提升、问题诊断等提供了强有力的支持。本文就借用山海鲸可视化软件的污水处理解决方案为大家介绍数字孪生在污水处理领域的作用。 一、实时监控 …

VsCode学习

一、在VsCode 上编写第一个C语言 在VsCode上写代码都是先打开文件夹&#xff0c;这样也方便管理代码和编译器产生的可执行程序&#xff0c;VsCode生成的配置文件等。 1.1打开文件夹 写代码前&#xff0c;首先创立一个文件夹存储以后我们写的VsCode代码&#xff0c;便于管理。…

SpringBoot:kaptcha生成验证码

GitHub项目地址&#xff1a;GitHub - penggle/kaptcha: kaptcha - A kaptcha generation engine. kaptcha介绍 kaptcha官网&#xff08;Google Code Archive - Long-term storage for Google Code Project Hosting.&#xff09;对其介绍如下&#xff0c; kaptcha十分易于安装…

linux CentOS7.6安装jenkins(小白版本)

前言 本人是一个前端开发者&#xff0c;由于有时候需要发版自己的东西&#xff0c;所以想搞一个Jenkins玩玩&#xff0c;看了网上好多教程&#xff0c;但是都不是针对小白的&#xff0c;比如linux怎么输入&#xff0c;怎么结束&#xff0c;自己也是搞了好久踩了好多坑 所以记录…

Linux(Kali\Ubuntu\CentOS\arm-Linux)安装Powershell

文章目录 Linux(Kali\Ubuntu\CentOS\arm-Linux)安装Powershell启动PowershellKaliUbuntuCentOSarm-Linux离线安装参考链接 Linux(Kali\Ubuntu\CentOS\arm-Linux)安装Powershell 启动Powershell pwshKali apt update && apt -y install powershellUbuntu # 更新包列…

filebeat配置解析【待续】

目录 filebeat概览filebeat是如何工作的工作原理采集日志注册表发送日志 容器日志采集的三种方式方式一&#xff1a;Filebeat 与 应用运行在同一容器&#xff08;不推荐&#xff09;方式二&#xff1a;Filebeat 与 应用运行不在同一容器方式三&#xff1a;通过 Kubernetes File…

oracle “ORA-25153:临时表空间为空”

从生产上面备份出来了一个数据库&#xff0c;应用在使用时显示ORA-25153临时表空间为空的报错&#xff0c;原因一般是数据库迁移时&#xff0c;没有迁移完整造成的 解决方法 1.创建新的临时表空间temp2 create temporary tablespace temp2 tempfile DATA size 100M autoexten…

【Python百题】--1.输出Hello,world【2023.11.22】

1.问题描述 编写一个Python程序&#xff0c;将字符串 ‘Hello World!’ 存储在变量 str 中&#xff0c;然后使用 print 语句将其打印出来。 2.解决思路 使用print()函数即可 3.代码实现 print("Hello,world")4.运行结果

系统移植-交叉编译工具链

不同架构的机器码 与 汇编语言 都不可移植&#xff0c; 且二者一一对应 c语言中三种成分&#xff1a; 1.分号结尾的叫做语句 语句可以让CPU执行&#xff0c;可以进行预处理&#xff0c;编译等生成机器码 2.#开头的为预处理指令 不带分号 CPU无法执行 3.注释&#xff0c;…

vue中列表渲染

列表渲染 实际开发中&#xff0c;使用每条数据的唯一标识作为key,也就是对于数组列表&#xff0c;对象中的属性如&#xff1a;id、手机号、身份证号、学号等唯一值&#xff0c;对象列表同理 只要不对列表的逆序添加&#xff0c;逆序删除等破坏顺序的操作&#xff0c;仅用于渲染…

Mysql 递归查询子类Id的所有父类Id

文章目录 问题描述先看结果表结构展示实现递归查询集合查询结果修复数据 问题描述 最近开发过程中遇到一个问题,每次添加代理关系都要去递归查询一下它在不在这个代理关系树上.很麻烦也很浪费资源.想着把代理关系的父类全部存起来 先看结果 表结构展示 表名(t_agent_user_rela…

【nlp】3.1 Transformer背景介绍及架构

Transformer背景介绍 1 Transformer的诞生2 Transformer的优势3 Transformer的市场4 Transformer架构4.1 Transformer模型的作用4.2 Transformer总体架构图4.2.1 输入部分4.2.2 输出部分包含4.2.3 编码器部分4.2.4 解码器部分1 Transformer的诞生 2018年10月,Google发出一篇论…

Opengl 纹理(知识点)

纹理&#xff08;知识点&#xff09; 以下是纹理用到的知识点&#xff0c;至于具体流程操作请参考&#xff1a; https://learnopengl.com/Getting-started/Textures 纹理环绕 纹理环绕&#xff08;Texture Wrapping&#xff09;的作用是定义在纹理坐标超出标准范围时系统如何…

Android 10.0 mtp模式下连接PC后只显示指定文件夹功能实现

1. 前言 在android10.0的系统定制化开发中,对于usb作为otg连接电脑时,在mtp模式下会作为一个存储器在电脑端显示,作为电脑的 一个盘符,来显示设备的内部存储的文件,所以说如果要对设备内部的资料做保密处理的时候,需要在mtp模式下不显示某些 文件夹,接下来就分析下相关…

【算法萌新闯力扣】:两句话中的不常见单词

力扣热题&#xff1a;两句话中的不常见单词 开篇 今天是备战蓝桥杯的第19天&#xff0c;今天到目前刷了4道力扣算法题。其中&#xff0c;这道题是对我来说收获最大的一道&#xff0c;让我更熟练地掌握了一些算法题中方法&#xff0c;于是来与大家分享一下。 题目链接: 884.两…

服务器中了elbie勒索病毒解决办法,elbie勒索病毒解密数据恢复

科技技术的不断发展&#xff0c;为企业的生产运营提供了极大便利&#xff0c;但网络安全威胁也不断增加&#xff0c;近期云天数据恢复中心陆续接到很多企业的求助&#xff0c;企业的服务器中了elbie勒索病毒&#xff0c;导致系统瘫痪&#xff0c;所有业务无法正常开展&#xff…

链表OJ--下

文章目录 前言一、链表分割二、环形链表I三、环形链表II四、链表的回文结构五、随机链表的复制 前言 一、链表分割 牛客网CM11&#xff1a;链表分割- - -点击此处传送 题解&#xff1a; 思路图&#xff1a; 代码&#xff1a; 二、环形链表I 力扣141&#xff1a;环形链表…