前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >css的div垂直居中的方法,百分比div垂直居中

css的div垂直居中的方法,百分比div垂直居中

作者头像
Dawnzhang
发布于 2019-02-27 08:26:38
发布于 2019-02-27 08:26:38
2.8K00
代码可运行
举报
运行总次数:0
代码可运行

前言

我们都知道,固定高宽的div在网页中垂直居中很简单,相信大家也很容易的写出来,但是不是固定高宽的div如何垂直居中呢?我们在网页布局,特别是手机等web端网页经常是不固定高宽的div,那么这些div如何垂直居中呢?这篇文章,我总结一下。

固定高宽div垂直居中

如上图,固定高宽的很简单,写法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 position: absolute;
 left: 50%;
 top: 50%;
width:200px;
height:100px;
margin-left:-100px;
margin-top:-50px;

不固定高宽div垂直居中的方法

方法一:

用一个“ghost”伪元素(看不见的伪元素)和 inline-block / vertical-align 可以搞定居中,非常巧妙。但是这个方法要求待居中的元素是 inline-block,不是一个真正通用的方案。

html如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="block" style="height: 300px;">

    <div class="centered">
        <h1>haorooms案例题目</h1>
        <p>haorooms案例内容,haorooms案例内容haorooms案例内容haorooms案例内容haorooms案例内容haorooms案例内容haorooms案例内容haorooms案例内容haorooms案例内容</p>
    </div>

</div>

css如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* This parent can be any width and height */
.block {
  text-align: center;
}

/* The ghost, nudged to maintain perfect centering */
.block:before {
  content: '';
  display: inline-block;
  height: 100%;
  vertical-align: middle;
  margin-right: -0.25em; /* Adjusts for spacing */
}

/* The element to be centered, can
   also be of any width and height */ 
.centered {
  display: inline-block;
  vertical-align: middle;
  width: 50%;
}

方法二:

可以用table布局方法,但是这种方法也有局限性!

写法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<table style="width: 100%;">
  <tr>
     <td style="text-align: center; vertical-align: middle;">
          Unknown stuff to be centered.
     </td>
  </tr>
</table>

由于table写法比较费时,你也可以用div代替table,写法如下:

html:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="something-semantic">
   <div class="something-else-semantic">
       Unknown stuff to be centered.
   </div>
</div>

css:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.something-semantic {
   display: table;
   width: 100%;
}
.something-else-semantic {
   display: table-cell;
   text-align: center;
   vertical-align: middle;
}

方法三,终极解决方法:

以上2中方法可能都有其局限性,我介绍的第三中方法是比较成熟的不是固定高宽div的垂直居中的方法!但是方法是css3的写法,想兼容IE8的童鞋们,建议用上面的方法!

方法和我们固定高宽的差不多,但是不用margin我们用的是 translate()

demo如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>haorooms不固定高度div写法</title>

    <style>
.center {
  position: fixed;
  top: 50%;
  left: 50%;
  background-color: #000;
  width:50%;
  height: 50%;
-webkit-transform: translateX(-50%) translateY(-50%);
}


    </style>
</head>
<body>
    <div class="center"></div>
</body>
</html>

我上面的css只是针对webkit内核的浏览器,其他内核浏览器写法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-webkit-transform: translateX(-50%) translateY(-50%);
-moz-transform: translateX(-50%) translateY(-50%);
-ms-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);

关于每个浏览器的写法,可以看看我之前的一篇文章:http://www.haorooms.com/post/css_common

有些弹出层的样式,也可以用这个方法居中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
position: fixed;
top: 50%;
left: 50%;
width: 50%;
max-width: 630px;
min-width: 320px;
height: auto;
z-index: 2000;
visibility: hidden;
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
backface-visibility: hidden;
-webkit-transform: translateX(-50%) translateY(-50%);
-moz-transform: translateX(-50%) translateY(-50%);
-ms-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);

css3不定宽高水平垂直居中

只要三句话就可以实现不定宽高水平垂直居中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
justify-content:center;//子元素水平居中
align-items:center;//子元素垂直居中
display:-webkit-flex;

在父级元素上面加上上面3句话,就可以实现子元素水平垂直居中。

运用margin:auto进行垂直居中

margin的值设置为auto,可以让我们对剩余空间进行分配!我们知道,块级元素设置为margin:0 auto;可以左右居中显示!那有没有办法让margin设置为margin:auto之后,上下左右都居中呢?上下左右都居中,就可以实现我们的垂直居中了!

答案是有的,只要我们让上下有足够的空间,就可以让margin的auto来分配上下空间。

我们可以利用定位的方式,让margin上下左右都有足够的空间!那么就可以用margin:auto来实现垂直居中了!

实现html如下:(做一个简单的垂直弹框)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="father">
    <div class="son"></div>
</div>

css代码如下,很简单,兼容性也蛮好,支持IE8+

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.father{position:fixed;width:100%;height:100%;top;0;left:0;background-color:rgba(0,0,0,.7);}
.son{position: absolute;top:0;left:0;bottom:0;right:0;width:50%;height:50%;margin:auto;background-color:red;}

这样就可以实现垂直居中了,是不是很简单?!!

原文链接:https://www.haorooms.com/post/css_div_juzhong

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-01-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
设计提效-Figma技巧篇
‍ 因为上一篇《设计提效-Figma插件篇》的不错反响,所以QQ团队的设计师们继续整理了一批超实用的提效秘籍,希望能助力大家一顿快捷操作猛如虎,早早打卡下班不辛苦。 一、快捷键面板|宝典大全
腾讯ISUX
2022/09/06
2K0
设计提效-Figma技巧篇
小程序开发实践:视图容器 view介绍,使用 view 搞定所有常见的 UI 布局
view 是最基础的,也是微信小程序第一个公布的容器组件。所谓容器组件,就像 HTML 里的 div 标签一样,是为容纳其它组件而存在的。它本身也可以有一些自己的样式,因为它本身也可以有样式,但它最重要的功能,是布局。
LIYI
2020/04/14
2.8K0
剖析 Figma 数据结构:不同图形的特有属性
两个 angle 的弧度值范围为 [0, PI*2),方向为顺时针,基准方向为正右(对应向量为 (1, 0))。
前端西瓜哥
2024/01/22
4970
剖析 Figma 数据结构:不同图形的特有属性
HarmonyOS NEXT - 通用属性
用户9936235
2025/03/31
970
鸿蒙开发:弹性布局Flex
正在开发一个搜索组件,其中一个功能是针对历史搜索的内容进行展示,由于搜索的内容长度不一,需要进行流式布局展示,效果如下:
程序员一鸣
2025/03/12
1380
鸿蒙开发:弹性布局Flex
css应知应会 第六集
作用:匹配的是,class属性值是一个由多个类选择器来组成的值列表(多类选择器),value是该列表中的一个独立选择器 的元素
李才哥
2020/08/17
1.7K0
css应知应会 第六集
CSS Flexbox与Grid:构建响应式布局的艺术
开启Flex布局模式。将一个元素设置为Flex容器,其直接子元素将成为Flex项目。
天涯学馆
2024/05/22
2510
CSS Flexbox与Grid:构建响应式布局的艺术
ArkUI容器类组件-弹性布局容器(Flex)
ArkUI 开发框架为了方便开发者实现灵活的页面布局方式,提供了弹性布局 Flex ,它用来为盒装模型提供最大的灵活性。 Flex 和 Row 、 Column 组件一样,也有主轴和纵轴之分。
小帅聊鸿蒙
2024/09/27
2890
ArkUI容器类组件-弹性布局容器(Flex)
Figma组件和自动布局的应用(三)
提到组件化,想必很多接触到大型项目的设计师都很有感触,可能不光是大型项目,就目前的一个产品开发的趋势,组件化都是一个不可逆的过程,越来越多的轻量型产品也都开始部署自己的组件库了。随着设计开发工具协同交叉的不断加强,设计师在做前期的产品设计时,也需要不断加强自己的组件化思维,这样既能够提升设计团队的生产力,也能让设计师更多的接触到产品需求及更专注于产品设计本身。
徐建国
2021/12/01
1.2K0
Figma组件和自动布局的应用(三)
图形化界面的开发(GUI)_Tkinter库的使用-2(Label+Message+Text)
本篇文章主要讲Tkinter库的Label标签控件,Message控件和文本控件Text,以及相对关的属性和方法以及示例。
laity
2025/02/27
2350
图形化界面的开发(GUI)_Tkinter库的使用-2(Label+Message+Text)
手把手带你上手D3.js数据可视化系列(一)手把手带你上手D3.js数据可视化系列(一)
上一篇文章「安利一些不错的D3.js资源 - 牛衣古柳 2021.06.29」的反响还不错,记得有新群友说是主管推给她文章才加过来的,也是很神奇。
古柳_DesertsX
2021/12/08
4.7K0
手把手带你上手D3.js数据可视化系列(一)手把手带你上手D3.js数据可视化系列(一)
Day4 chart基本属性分析
属性设置是基于chart实例的,所以我们必须先获取一个chart画板实例,获取方式: G2.Chart。创建 Chart 的方式如下:
IT人一直在路上
2019/09/16
5600
万字总结 CSS 布局
本文总结了主流的几种 CSS 的布局方法,无论你是一个想要学习 CSS 布局的新手,还是一个比较有经验但想要进一步巩固与了解最新CSS布局知识的前端开发者,这篇指南都能帮你全面了解如今CSS布局发展的现状。
用户8921923
2022/10/24
5.8K0
万字总结 CSS 布局
七、ArkTS 声明式UI-常用布局-弹性布局(Flex)
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-layout-development-flex-layout-V5
Harry技术
2025/01/13
1650
七、ArkTS 声明式UI-常用布局-弹性布局(Flex)
【Flutter实战】六大布局组件
老孟导读:Flutter中布局组件有水平 / 垂直布局组件( Row 和 Column )、叠加布局组件( Stack 和 IndexedStack )、流式布局组件( Wrap )和 自定义布局组件(Flow)。
老孟Flutter
2020/09/11
2K0
【Flutter实战】六大布局组件
Figma Variants组件集/变体组件(四)
Figma 官方对其超级组件使用的说明,害怕英文的同学可以查看这个链接,有个老哥已经将原版的翻译了一遍:https://www.figma.com/community/file/906004463907915536
徐建国
2021/12/01
1.4K0
Figma Variants组件集/变体组件(四)
CSS 零基础到实战(05)布局、盒子模型、弹性盒子【前端就业课 第二阶段】
流动布局有3种布局模型,分别是流动布局(常规默认时)、定位布局(relative)以及浮动布局,其中所述的流动布局、定位布局已在第一点讲解,接下来咱们查看浮动布局。
1_bit
2022/09/16
8750
CSS 零基础到实战(05)布局、盒子模型、弹性盒子【前端就业课 第二阶段】
CSS笔记
CSS中长度单位: px:像素(Pixel);em:相对长度单位,相对于当前对象内文本的字体尺寸;pt:点(Point),绝对长度单位;pc:派卡(Pica);in:英寸(Inch);mm:毫米;cm:厘米。 1 in = 2.54 cm = 25.4 mm = 72 pt = 6 pc
matt
2022/10/25
2.3K0
CSS笔记
【HarmonyOS之旅】基于ArkTS开发(二) -> UI开发之常见布局
线性布局(LinearLayout)是开发中最常用的布局。线性布局的子组件在线性方向上(水平方向和垂直方向)依次排列。
枫叶丹
2025/01/20
2690
【HarmonyOS之旅】基于ArkTS开发(二) -> UI开发之常见布局
Flutter(二)--布局机制、布局步骤、水平和垂直布局、组件大小动态调整Flutter(二)--布局机制、布局步骤、水平和垂直布局、组件大小动态调整
布局机制 flutter的布局机制是组件,flutter中几乎一切都是组件,除了图片、文字等,还有用来排列、限制、对齐这些可见组件的行、列、网格等(可理解为系统样式)。 image.png 布局步骤
用户8893176
2021/08/09
1.8K0
Flutter(二)--布局机制、布局步骤、水平和垂直布局、组件大小动态调整Flutter(二)--布局机制、布局步骤、水平和垂直布局、组件大小动态调整
推荐阅读
相关推荐
设计提效-Figma技巧篇
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档