1,块级元素设置height和line-height或者text-align: center,可以让块级元素包裹的内联元素或者自身文本内容垂直居中或者水平居中;但是对包裹的块级元素和浮动元素不起作用。

2,块级元素包裹块级元素,设置被包裹元素margin: 0 auto达到水平居中,但是设置父元素的height和line-height或者子元素的vertical-align: middle不起作用,因为vertical-align: middle只对行内元素有效。总结设置子元素垂直居中有以下几种方法:

2.1,设置块级子元素display: inline-block

<div class="btn-container"><div class="btn-content"></div>
</div>.btn-container {width: 100%;height: 40px;background-color: red;line-height : 40px;text-align: center;font-size: 0px;
}.btn-content {display: inline-block;width: 100px;height: 30px;vertical-align: middle;background-color: green;
}

注意一定要设置父元素font-size: 0px。这是因为vertical-align: middle默认是和父元素的基线居中对齐,父元素的基线可以假想为字母x的底边,只有设置父元素font-size: 0px,才能将父元素的基线调整到中间,达到子元素在父元素中垂直居中的目的。

设置之前:

设置之后:

2.2,父块级元素包裹两个属性值为display: inline-block的子元素,并且有一个子元素的高度为100%,并且两个子元素都设置vertical-align: middle,达到另一个子元素垂直居中:

<div class="btn-container"><span class="btn-text">客户端</span><div class="btn-content"></div>
</div>.btn-container {width: 300px;height: 40px;background-color: red;
}.btn-text {display: inline-block;height: 100%;vertical-align: middle;background-color: green;
}.btn-content {display: inline-block;width: 100px;height: 30px;background-color: yellow;vertical-align: middle;
}

渲染结果如下图所示:

注:该情况也适用于子元素为一张图片加一个块级元素的情况

2.3,设置父元素的padding-top为(父元素高度-子元素高度)/2

.btn-container {width: 300px;height: 40px;background-color: red;padding-top: 5px;
}.btn-content {width: 100px;height: 30px;background-color: green;
}

那是否可以设置子元素的margin-top来达到同样的效果呢,也可以,但是有风险。根据规范,一个盒子如果没有上补白(padding-top)和上边框(border-top),那么这个盒子的上边距会和其内部文档流中的第一个子元素的上边距重叠。说白点就是,父元素的第一个子元素的上边距margin-top如果碰不到有效的border或者padding,就会不断一层一层向上找,把自己的margin当父元素的margin执行。

2.4,设置子元素为绝对定位,有以下3种方法可以实现水平和垂直居中:

.btn-container {position: relative;width: 300px;height: 40px;background-color: red;
}
//第一种方法
.btn-content {position: absolute;left: 0; top: 0; right: 0; bottom: 0;margin: auto;width: 100px;height: 30px;background-color: green;
}
//第二种方法
.btn-content {position: absolute;left: 50%;top: 50%;margin-top: -15px;margin-left: -50px;width: 100px;height: 30px;background-color: green;
}
//第三种方法
.btn-content {position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);width: 100px;height: 30px;background-color: green;
}

第二种方法必须知道子元素宽度和高度;如果不设置子元素尺寸,第一种方法子元素尺寸会和父元素一致,第三种方法会和子元素中包裹的内容一致;

2.5,使用flex弹性布局,弹性容器的每个子元素都变成一个弹性元素,而且是以相同方式布局的。不管是段落还是span元素,都变成弹性元素。

以2.2节为例:

.btn-container {width: 300px;height: 40px;background-color: red;display: flex;align-items: center;
}.btn-text {height: 100%;background-color: green;
}.btn-content {width: 100px;height: 30px;background-color: yellow;
}

可以看到弹性布局简单很多,所以h5布局中能用弹性布局的地方我们都应该尽量用弹性布局,在界面适配方面弹性布局也有一定的优势。

span 居中_H5元素的水平垂直居中布局总结相关推荐

  1. html 定位元素怎么居中,绝对定位元素的水平垂直居中的方法(3种任选)

    1.css实现居中 缺点:需要提前知道元素的宽度和高度. Document .box{ width: 600px; height: 400px; position: absolute; left: 5 ...

  2. HTML+CSS之设置元素的水平垂直居中

    本文主要介绍如何利用HTML和CSS实现元素的水平垂直居中. 1.弹性布局(不换行) justify-content:center:水平居中 align-items:center:垂直居中 .fath ...

  3. CSS文字或元素的水平垂直居中多种方式(简单明了)

    前言:水平居中,我们可以很容易想到使用text-align实现文字水平居中,使用margin:0px auto;可以实现元素水平居中:所以重点将是怎么实现文字和元素的垂直居中?? --- 本文将通过举 ...

  4. HTML元素的水平/垂直居中方式(简单代码和图)

    1.水平居中text-align:center; 在没有浮动的情况下,我们可以让需要居中的块级元素设为inline/inline-block,然后在其父元素上添加text-aline:center;即 ...

  5. 未知宽高元素的水平垂直居中

    大致有4种方法实现:         一.table布局(display:table)         二.绝对布局(position:absolute)+translate         三.转化 ...

  6. CSS水平垂直居中布局方案概述

    在前端开发中,通过CSS实现布局容器的居中,也有诸多方法方式,当然也是CSS面试题中的经典面试题,在本文章中会系统的分析综述 通过 Flexbox 布局模块 与 CSS Grid布局模 实现容器的居中 ...

  7. vue垂直布局_CSS水平垂直居中布局方案概述

    在前端开发中,通过CSS实现布局容器的居中,也有诸多方法方式,当然也是CSS面试题中的经典面试题,在本文章中会系统的分析综述 通过 Flexbox 布局模块 与 CSS Grid布局模 实现容器的居中 ...

  8. margin:auto实现绝对定位元素的水平垂直居中

    1.绝对定位元素的居中实现的一般方法 兼容性不错的主流用法是: 但,这种方法有一个很明显的不足,就是需要提前知道元素的尺寸.否则margin负值的调整无法精确.此时,往往要借助JS获得. CSS3的兴 ...

  9. 元素的水平垂直居中解决方法

    有时候为了使页面元素看起来更美观,常常会让元素水平居中,垂直居中.下面总结了几个常用的方法. 首先HTML结构如下: 1 <div class="out"> 2 < ...

  10. CSS实现子元素div水平垂直居中

    div基本布局 <div class="main"><div class="center"></div>

最新文章

  1. proc/[pid]/maps 文件解释
  2. 转 从头到尾彻底解析Hash表算法
  3. CSDN博客越来越垃圾了,到处放广告
  4. osm2pgsql windows “illegal option -W” error
  5. scikit-learning_特征分析(数据挖掘入门与实践-实验7)
  6. J2ee eclipse中配置 本地配置的maven
  7. 【Java】Java 反射机制浅析
  8. 信息: 开始协议处理句柄[http-nio-8080]_你必须要知道的HTTP协议原理
  9. 电商平台营销活动玩法大全、拓客、吸粉、裂变、引流、团购返现、限时折扣、找人代付、砍价代付、多人拼团、优惠套餐、秒杀折扣、满减优惠、电商营销、电商推广、商品促销、营销红包、Axure原型、rp原型
  10. Initial Audio Urban Essentials Heatup3 Expansion Mac(都市流派音色库)v1.0特别版
  11. FisherYates费雪耶兹随机置乱算法
  12. JavaWeb项目分层结构
  13. oracle设置默认角色,oracle的用户和角色管理
  14. 如何让word中清晰的图片无损导出为pdf?
  15. Hibernate必须掌握的知识
  16. 论文阅读:Generating Talking Face Landmarks from Speech
  17. 安利一下好用免费的思维导图绘制软件(实在篇)
  18. 免费录屏软件有哪些?录屏软件下载,认准这3款软件
  19. tar.gz和tar.xz文件
  20. 优先使用TimeUnit类中的sleep()(转自 ImportNew - 刘志军 翻译自 javarevisited)

热门文章

  1. 量化研究: Julia还是Matlab?
  2. centos7 mysql安装_CentOS7安装MySQL(详解)
  3. 【心电信号】基于matlab心电信号PTT+HRV+PRV【含Matlab源码 158期】
  4. 毕设题目:Matlab疾病识别与分类
  5. 【细胞分割】基于matlab GUI原子力显微镜图像分析【含Matlab源码 1371期】
  6. 【图像隐写】基于matlab DWT数字水印多种攻击效果对比【含Matlab源码 1134期】
  7. 【路径规划】基于matlab粒子群融合遗传算法栅格地图路径规划【含Matlab源码 526期】
  8. 【优化求解】基于matalb遗传算法求解岛屿物资补给优化问题【含Matlab源码 172期】
  9. 机器人控制学习机器编程代码_机器学习正在征服显式编程
  10. linux 停止路由转发策略_Linux静态路由