一文大白话讲清楚CSS元素的水平居中和垂直居中

news2025/1/3 11:52:38

文章目录

  • 一文大白话讲清楚CSS元素的水平居中和垂直居中
  • 1.已知元素宽高的居中方案
    • 1.1 利用定位+margin:auto
    • 1.2 利用定位+margin负值
    • 1.3 table布局
  • 2.未知元素宽高的居中方案
    • 2.1利用定位+transform
    • 2.2 flex弹性布局
    • 2.3 grid网格布局
  • 3. 内联元素的居中布局

一文大白话讲清楚CSS元素的水平居中和垂直居中

  • 先说为啥就要讲居中,不讲别的,因为很简单,因为居中常用且关键
  • 那讲一个元素居中,先得看这个元素是个什么货色了吧
  • 一般有两种货色,
  1. 元素的宽高已知
  2. 元素的宽高未知
  • 为啥这么分,因为宽高已知的号操作啊,我都知道你多大了,然后页面就那么大,如果你不居中我就移动呗,移动到居中
  • 剩下的不知道宽高的,那没法移啊,不知道移到哪合适,那就要另外另外想办法了
  • 所以,先讲宽高已知的

1.已知元素宽高的居中方案

1.1 利用定位+margin:auto

  • 上代码
<style>
    .parent{
        width: 300px;
        height: 300px;
        border: 1px solid green;
        position: relative;
    }
    .child{
        width: 100px;
        height: 100px;
        background-color: red;
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        margin: auto;
    }
</style>
<div class="parent">
    <div class="child"></div>
</div>
  • 父元素设置相对定位,子元素设置绝对定位,并且子元素的4个定位属性都设置为0,这时候如果子元素没有宽高,会被拉满父元素
  • 但是这时候他有宽高,所以它显示100x100,但是这时候子元素的虚拟占位已经撑满了整个父级,如果我们再给一个margin:auto他就可以上下左右都居中了。
  • 哪有又问了,凭啥margin:auto就居中了,要是不给auto,给个margin: 10 50 50 10呢。
  • 那就会按照这个margin去排列。
  • 说白了就是这么个意思,现在父元素下子元素的虚拟占位跟父元素一样大,然后我们把子元素的位置放进去,放进去因为不一样大,就要考虑跟父元素哪个边近一点。有可能哪个都想近一点,哪个都想远一点,那怎么办,auto,你们自己看着分吧,看着分怎么分,平分呗。所以居中了。
  • 明白了没有。

1.2 利用定位+margin负值

  • 直接上代码
<style>
    .parent{
        width: 300px;
        height: 300px;
        border: 1px solid green;
        position: relative;
    }
    .child{
        width: 100px;
        height: 100px;
        background-color: red;
        position: absolute;
        top:50%;
        left: 50%;
        margin-top: -50px;
        margin-left: -50px;
    }
</style>
<div class="parent">
    <div class="child"></div>
</div>
  • 这个啥意思,这个好理解,就是我先把你top:50%,left:50%,如果子元素宽高小到极限的话是不是已经居中了,但是现在你有宽度各位一百,那怎么办,我在倒着往回移元素本身的一半不就OK了
  • 上图
    在这里插入图片描述

1.3 table布局

  • 设置父元素的display:table-cell,子元素设置display:inline-block,利用vertical和text-align让所有行内块级元素水平垂直居中
  • 上代码
<style>
    .parent{
        display:table-cell;
        width: 300px;
        height: 300px;
        vertical-align:middle;
        text-align: center;
        border: 1px solid black;
    }
    .child{
        display:inline-block;
        width: 100px;
        height: 100px;
        background-color: red;
    }
</style>
<div class="parent">
    <div class="child"></div>
</div>

在这里插入图片描述

2.未知元素宽高的居中方案

2.1利用定位+transform

  • 这个跟定位+margin-负值用法是一样的
  • 只不过margin-负值的时候我们需要负元素宽高的一半,所以我们必须先知道宽高是多少,然后才能写
  • transform的也是负值,不过translate会自动获取元素的宽高,并以元素的宽高为基准进行百分比偏移,所以我们可以设定偏移量为元素宽高的50%
  • 上代码
<meta charset="utf-8">
<style>
    .parent{
        width: 300px;
        height: 300px;
        border: 1px solid green;
        position: relative;
    }
    .child{
        background-color: red;
        position: absolute;
        top:50%;
        left: 50%;
        transform:translate(-50%,-50%);
        /*用位移代替margin进行偏移了*/
        /*margin-top: -50px;*/
        /*margin-left: -50px;*/
    }
</style>
<div class="parent">
    <div class="child">我是子元素,我没有设置宽高</div>
</div>
  • 搞定
    在这里插入图片描述

2.2 flex弹性布局

  • 这个最简单,只要父元素设置display:flex,子元素通过justify-content:center和align-items:center轻松实现居中
<meta charset="utf-8">
<style>
    .parent{
        width: 300px;
        height: 300px;
        border: 1px solid green;
        display: flex;
        align-items:center;
        justify-content:center;
    }
    .child{
        background-color: red;
    }
</style>
<div class="parent">
    <div class="child">我是子元素,我没有设置宽高</div>
</div>
  • 搞定
    在这里插入图片描述

2.3 grid网格布局

  • grid网格布局和flex弹性布局用法一毛一样,但是兼容性差
  • 直接上代码
<meta charset="utf-8">
<style>
    .parent{
        width: 300px;
        height: 300px;
        border: 1px solid green;
        display: grid;
        align-items:center;
        justify-content:center;
    }
    .child{
        background-color: red;
    }
</style>
<div class="parent">
    <div class="child">我是子元素,我没有设置宽高</div>
</div>

3. 内联元素的居中布局

  • 上面讲的都是块级元素的居中方式,下面讲内联元素的
  1. 水平居中
  • 行内元素可设置text-algin:center
<meta charset="utf-8">
<style>
    .parent{
        width: 500px;
        height: 300px;
        text-align: center;
        background-color: green;
    }
    .child{
        background-color: red;
    }
</style>
<div class="parent">
    <span class="child">我是子元素,我是内联元素<br>我的水平居中只需要父元素text-align:center就行</span>

</div>

在这里插入图片描述

  • 如果子元素的布局是flex,则父元素的justify-content:center就行
<meta charset="utf-8">
<style>
    .parent{
        width: 300px;
        height: 300px;
        background-color: green;
        display: flex;
        justify-content:center
    }
    .child{
        background-color: red;
        line-height: 300px;
    }
</style>
<div class="parent">
    <span class="child">我是子元素,我是内联flex元素<br>我的水平居中只需要父元素justify-content:center就行</span>
</div>

在这里插入图片描述

  1. 垂直居中
  • 单行文本垂直居中,只需要让子元素的line-height=父元素的height
<meta charset="utf-8">
<style>
    .parent{
        width: 600px;
        height: 300px;
        background-color: green;
        display: flex;
        justify-content:center;

    }
    .child{
        width: 400px;
        background-color: red;
        line-height: 300px;
    }
</style>
<div class="parent">
    <span class="child">单行文本,垂直居中line-height=父height</span>
</div>

在这里插入图片描述

  • 多行文本父元素垂直居中,可以设置父元素display:table-cell,vertical-align:middle
<meta charset="utf-8">
<style>
    .parent{
        width: 600px;
        height: 300px;
        background-color: green;
        display:table-cell;
        vertical-align:middle;

    }
    .child{
        width: 400px;
        background-color: red;

    }
</style>
<div class="parent">
    <span class="child">我是多行文本,垂直居中只需要让父元素display:table-cell;vertical-align:middle</span>
</div>

在这里插入图片描述

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

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

相关文章

30. 区间交集

题目描述 给定一组闭区间&#xff0c;其中部分区间存在交集。 任意两个给定区间的交集&#xff0c;称为公共区间(如:[1,2],[2,3]的公共区间为[2,2],[3,5],[3,6]的公共区间为[3,5])公共区间之间若存在交集&#xff0c;则需要合并(如:[1,3],[3,5]区间存在交集[3,3],需合并为[1,5]…

redis cluster实验详解

华子目录 实验环境准备部署redis cluster添加节点删除节点redis cluster集群维护 实验 环境准备 再开3台主机 先把之前3台源码编译的redis删除 [rootredis-node1 ~]# cd /usr/local/redis/ [rootredis-node1 redis]# make uninstall[rootredis-node2 ~]# cd /usr/local/redi…

微服务-服务保护和分布式事务

假如微服务中某个服务出现了故障,那我们需要为这个服务做好一些兜底的方案,健壮性的处理,这就是服务保护.以前我们写的是单体项目,不论项目多复杂,操作多少张表,最终都能够满足事务ACID的特性,但是我们分成了很多个服务之后,由于很多的服务是独立的,有各自的数据库,破坏了事务A…

【已解决】PDF文档有密码怎么办(2024新)免费在线工具PDF2Go

强大的解密工具PDF2Go使用指南 一、PDF2Go简介 PDF2Go是由德国QaamGo公司开发的在线PDF工具箱&#xff0c;以其强大的功能和用户友好的界面而闻名。它不仅免费&#xff0c;而且不需要用户注册或安装任何软件&#xff0c;只需打开浏览器即可使用。 二、功能特点 1. 免费且无需…

Ashy的考研游记

文章目录 摘要12.1112.2012.21 DAY1&#xff08;政治/英语&#xff09;政治英语 12.22 DAY2&#xff08;数学/专业课&#xff09;数学专业课 结束估分 摘要 在24年的12月里&#xff0c;Ashy完成了他的考研冲刺&#xff0c;顺利的结束了他本年度的考研之旅。 在十二月里&#…

Flutter-插件 scroll-to-index 实现 listView 滚动到指定索引位置

scroll-to-index 简介 scroll_to_index 是一个 Flutter 插件&#xff0c;用于通过索引滚动到 ListView 中的某个特定项。这个库对复杂滚动需求&#xff08;如动态高度的列表项&#xff09;非常实用&#xff0c;因为它会自动计算需要滚动的目标位置。 使用 安装插件 flutte…

XIAO Esp32 S3 轻松发送 HTTP 请求,打造智能物联网应用

让物联网更智能,连接更便捷! ESP32 是一款高性能的物联网开发平台,它不仅支持 Wi-Fi 和蓝牙,还是实现各种智能设备连接和控制的理想选择。今天,我们为你展示如何利用 ESP32 发送 HTTP 请求,轻松实现设备间的数据传输和远程控制。 为什么选择 ESP32 发送 HTTP 请求? 强大…

Unity中实现转盘抽奖效果(一)

实现思路&#xff1a; 旋转转盘的z轴&#xff0c;开始以角加速度加速到角速度最大值&#xff0c;结束的时候&#xff0c;以角加速度减速使角速度减少到0&#xff0c;然后转盘z轴旋转的角度就是加上每秒以角速度数值大小&#xff0c;为了使角度不能一直增大&#xff0c;对360度…

Postman[8] 断言

1.常见的断言类型 status code: code is 200 //检查返回的状态码是否为200 Response body&#xff1a; contain string //检查响应中包含指定字符串包含指定的值 response body:json value check/ /检查响应中其中json的值 Response body&#xff1a; is equal to string …

教程:从pycharm基于anaconda构建机器学习环境并运行第一个 Python 文件

1. 安装 PyCharm 访问 PyCharm 官方网站&#xff1a;https://www.jetbrains.com/pycharm/。下载社区版&#xff08;免费&#xff09;或专业版&#xff08;收费&#xff0c;提供更多功能&#xff09;。按照操作系统的安装指导安装 PyCharm。安装后打开 PyCharm&#xff0c;并根…

记录一下图像处理的基础知识

记录一下自己学习的图像处理的基础知识。 一、图像的文件格式以及常用的图像空间 1、文件格式 常见的图像文件格式有 jpg, png, bmp, gif &#xff08;1&#xff09;jpg&#xff1a;有损压缩算法&#xff0c;大幅减小文件大小&#xff0c;便于存储和传输&#xff0c;兼容性…

0030.停车场车位预约管理系统+论文

一、系统说明 基于springbootvueelementui开发的停车场车位预约管理系统,系统功能齐全, 代码简洁易懂&#xff0c;适合小白学编程。 二、系统架构 前端&#xff1a;vue| elementui 后端&#xff1a;springboot | mybatis 环境&#xff1a;jdk1.8 | mysql8.0 | maven 三、代…

SpringCloudAlibaba实战入门之路由网关Gateway断言(十二)

上一节课中我们初步讲解了网关的基本概念、基本功能,并且带大家实战体验了一下网关的初步效果,这节课我们继续学习关于网关的一些更高级有用功能,比如本篇文章的断言。 一、网关主要组成部分 上图中是核心的流程图,最主要的就是Route、Predicates 和 Filters 作用于特定路…

Postman[4] 环境设置

作用&#xff1a;不同的环境可以定义不同的参数&#xff0c;在运行请求时可以根据自己的需求选择需要的环境 1.创建Environment 步骤&#xff1a; Environment-> ->命名->添加环境变量 2.使用Environment 步骤&#xff1a;Collection- >右上角选择需要的环境

【PCIe 总线及设备入门学习专栏 4.5 -- PCIe Message and PCIe MSI】

文章目录 PCIe Message 与 MSIPCIe Message 和 MSI 的作用与关系MSI 的配置与寄存器MSI 和 ARM GIC 的关系示例&#xff1a;MSI 在 ARM GIC 的实际应用总结 PCIe Message 与 MSI 本文将介绍 PCIe message 的作用以及message 与 MSI 的关系&#xff0c;再介绍 MSI 如何配置以及…

jquery-validate在前端数据校验中的应用以及remote异步调用实践-以若依为例

目录 前言 一、关于Jquery Validate组件 1、validate是什么 2、内置验证方式及触发方式 3、自定义验证规则 二、基本验证实战以及Remote验证 1、基本验证实现 2、remote校验方式 三、总结 前言 随着技术的不断演进&#xff0c;在我们的日常开发过程中&#xff0c;大家一…

连锁餐饮行业数据可视化分析方案

引言 随着连锁餐饮行业的迅速发展&#xff0c;市场竞争日益激烈。企业需要更加精准地把握运营状况、消费者需求和市场趋势&#xff0c;以制定科学合理的决策&#xff0c;提升竞争力和盈利能力。可视化数据分析可以帮助连锁餐饮企业整合多源数据&#xff0c;通过直观、动态的可…

WPF 样式

WPF 有自己的样式设置系统&#xff0c;也自带类似 Winform 的默认样式。默认样式比较一般&#xff0c;我们可以使用下面几种方式自定义好看的 wpf 样式。 1. 本地直接设置 比如更改按钮的背景色和字体颜色&#xff0c; <Grid><StackPanel Orientation"Horizon…

RabbitMQ实现生产者消费者

一.启动MQ 注意管理员身份进入cmd才行,我这里是在本地安装的MQ,推荐使用虚拟机安装 二.思路 官方解释RabbitMQ结构: 自我理解RabbitMQ结构: 其实RabbitMQ的服务器就像邮局一样,我们的生产者和消费者对于这个服务器来说都是消费者,因为服务器都可以向两者发送消息 环境准备 …

虚拟机用网线连其他设备(ROS多机网络配置)

电脑配置 把局域网的网线插入电脑&#xff0c;点击这边 配置以太网的IP 比如说我ROS主机的IP想设为192.168.144.10&#xff0c;那我笔记本的以太网IP可以设为192.168.144.8。 假设还有另外一个电脑&#xff08;ROS从机&#xff09;&#xff0c;他的IP被设置未192.168.144.4…