css 实现水平居中的方法总结

css 实现水平居中的方法总结

原博客链接: www.jianshu.com/p/f4b9d1e2c…

css 实现水平居中,垂直居中,水平垂直居中,是css 入门的必修课题,也是代码实践,笔试面试中经常遇到的场景。这次的内容主要围绕着几种场景下的,多种水平居中方法的实现

实现场景:蓝色方块需要在父元素内部水平居中

1. 居中元素为块级元素

基础代码

<div class="container">
    <div class="box">牛</div>
</div>
复制代码
.container{
  width: 100px;
  border:1px solid red;
  height: 100px;
}
.container .box{
  font-size: 20px;
  line-height: 50px;
  background-color: blue;
  color: white;
}
复制代码

块级元素的特点:可设置元素的宽度,在不设置宽度时, 元素的宽度会自动填满其父元素宽度,并独占一行

1.1 margin: auto

居中元素设置宽度,并且设置 margin: auto 可实现水平居中

.container .box{
  height: 50px;
  width: 50px; /* 设置宽度 */
  margin: 0 auto; /* 设置宽度 */
}
复制代码

问题: margin: auto 实现水平居中的前提是, 元素的宽度已知,当宽度值未知时,见2.2

2. 居中元素为行内元素

基础代码

<div class="container">
    <span class="box">牛</span>
</div>
复制代码
.container{
  width: 100px;
  border:1px solid red;
  height: 100px;
}
.container .box{
  font-size: 20px;
  background-color: blue;
  color: white;
}
复制代码

行内元素的特点: 行内元素的宽度为元素自身撑起的宽度,和其他元素在同一行,高度,宽度,内边距等都是不可控的,即设置padding-left, padding-right, margin-left, margin-right, height, width 都无法生效

2.1 text-align: center

利用行内元素的特点,设置 text-align:center 使元素居中

.container{
  text-align: center;
}
复制代码

2.2 display:inline-block 改变模型

利用 行内元素设置 text-align 实现水平居中的方法,可以针对居中元素为块级元素,但宽度不确定时 (即1.1 问题)的场景

<div class="container">
    <div class="box">牛</div>
  </div>
复制代码
.container{
  text-align: center;
}
.container .box{
  display: inline-block;
  *display: inline; /*兼容性代码*/
  *zoom: 1; /*兼容代码*/
}
复制代码

问题: 需要解决 display: inline-block 在IE 下的兼容性问题

3. 利用定位实现水平居中(已知宽度)

相对定位: 相对定位就是将元素偏离元素的默认位置,但是并没有脱离文档流,只是视觉上发生的偏移,不会改变元素的display 属性

绝对定位: 相对于设置了 相对定位的上层元素或者顶级元素的相对位置,无论设置的元素为块级元素还是行内元素,position 设置成absolute 之后 , 元素display 表现为 block, 元素脱离文档流,父元素无法知道该元素的高度

因此,从以上的定义我们可以得到一种新的水平居中的方式,父级元素设为相对定位,居中元素设置为绝对定位,设置居中元素的宽度,并相对于父元素设置位置

.container{
  position: relative;
}
.container .box{
  position: absolute;
  width: 50px; /*设置宽度*/
  left: 50%; /*左移50%*/
  margin-left: -25px; /*修正位置*/
}
复制代码

缺点: 缺点是需要知道元素的宽度

4 利用定位,translate 实现水平居中(未知宽度)

对于已知元素的宽度,我们可以使用3中的 margin-left: -25px; /*修正位置*/ 进行精确的定位,而对于不知道宽度的元素,我们可以使用 translate 来精准定位,只需要将 margin-left: -25px; /*修正位置*/ 替换成 transform: translate(-50%, 0) 即可

.container .box{
  font-size: 20px;
  background-color: blue;
  color: white;
  position: absolute;
  left: 50%;
  transform: translate(-50%, 0);
  width: 50px;
}
复制代码

5. flex 布局实现

Flex是Flexible Box的缩写,意为”弹性布局”,父元素设置成flex 布局,可以将子元素设置为水平居中, (但是flex布局部分浏览器无法使用)

.container{
  display: flex;
  justify-content: center
}
复制代码

6. tabel-cell布局

实际项目中并不常见,故暂不提及。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101414.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Silverlight游戏设计(Game Design):(十四)练习用游戏素材资源的获取及相关工具使用心得…[通俗易懂]

    Silverlight游戏设计(Game Design):(十四)练习用游戏素材资源的获取及相关工具使用心得…[通俗易懂]通过前6节的Demo制作演示,大家应该已经相当熟悉这款Silverlight-2D游戏场景编辑器了;通过它我们可以构建出各种类型的游戏,这也让广大的Silverlight游戏爱好者们变得蠢蠢欲动,近一段时间里有很多朋友询问我游戏素材资源是如何获取的,那么本节我将向大家分享这方面的经验与心得,漂亮的游戏素材配合上不断的游戏编码练习,在成就感中提升自身的游戏设计能力,让我们一同努力吧!推荐一,免费…

    2022年6月2日
    38
  • r语言t检验输出检验统计量_两样本t检验原理与R语言实现

    r语言t检验输出检验统计量_两样本t检验原理与R语言实现t检验也称为studentt检验,可以用来比较两个均值的差异是否显著,可分为单总体检验、双总体检验、配对样本检验。1.1历史要了解t检验,就不得不提及他的发明者威廉·西利·戈塞特(WilliamSealyGosset)。戈塞特先生作为一个拥有化学和数学两个学位的牛津大学新秀,于1899年因化学专长进入爱尔兰都柏林的吉尼斯酿造公司工作。戈塞特先生在公司解决的第一个难题是:如何准确测量一个瓶中酵…

    2022年6月19日
    33
  • pycharm2022 02激活码【2022最新】

    (pycharm2022 02激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html4KDDGND3CI-eyJsa…

    2022年4月1日
    111
  • 零基础学Java(12)静态字段与静态方法

    零基础学Java(12)静态字段与静态方法静态字段与静态方法之前我们都定义的main方法都被标记了static修饰符,那到底是什么意思?下面我们来看看静态字段如果将一个字段定义为static,每个类只有一个这样的字段。而对于非静态的实例

    2022年7月29日
    6
  • 从源代码到可执行文件

    在理解一个源代码是如何成为可执行文件时,我简单的回顾下硬件层面、操作系统层面的知识。开机启动一BIOS扫描基本设备,cpu、memory、displayetc,从硬盘启动,读盘面1磁道1扇区1

    2021年12月25日
    45
  • 使用echarts时提示框的数据加单位

    使用echarts时提示框的数据加单位使用echarts时提示框的数据加单位

    2022年4月21日
    133

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号