html中元素居中的五种方法

简介: html中元素居中的五种方法

网页开发中,经常会有嵌套元素中将子元素居中的要求。下边将五种常用的居中方法进行总结。

1:原始图(父子元素无border,无padding):

2:实现居中效果:

一:使用margin进行固定长度的偏移

在使用margin进行具体高度的偏移时,需要知道父元素和子元素的具体的宽高尺寸

1:水平方向居中

在进行水平方向上的居中时,可对子元素样式使用

margin:0 auto;

2:垂直方向居中

在使用margin进行垂直方向上的居中时,至少要满足三个条件中的一条才能达到垂直居中的效果,否则子元素和父元素会一同被带下来。这涉及到margin的合并,在我的另一篇博客《关于盒子模型中margin叠加现象的归类与思考》中我对这个现象经过查阅资料和实验做出了个人的推断理解。三种前提条件分别是:

1)为父元素设置border

2)为父元素设置padding

3)在父元素中添加overflow:hidden的样式。(在标准盒子模型中前两种会将盒子模型的既定尺寸扩充,在没必要设置paddingborder时不建议使用前两种方法。)

/*关键样式代码*/
#father{
          overflow: hidden;
       }
   #son{
          margin:0 auto;/*水平居中*/
          margin-top: 50px;
        }

**分析:**对父元素使用overflow:hidden子元素使用margin-top进行下移实现垂直居中。

**缺点:**在进行垂直居中时你需要明确父元素的height,并且进行计算,如果父元素的高度变了,子元素将不再垂直居中,还要再修改数据,维护性极差。

二:使用绝对定位并进行偏移

1)首先需要将父元素样式设置position:relative

2)将子元素样式设置position:absolute

3)使用lefttop进行定位实现居中;

注意: 只有在元素使用position:relative/absolute/fixed才能使用top/left/bottom/right/z-index属性,同时元素的floatclear会失效。

/关键样式代码/

#father{
         position:relative;
       }
   #son{
         position: absolute;
         left:50%;
         margin-left: -50px;
         top:50%;
         margin-top: -50px;
        }

注意: 在使用绝对定位进行百分比偏移时他是将子元素整体偏移到另半边,而不是将子元素的中轴线对准父元素的中轴线,所以还要使用margin-left:-50px;将子元素的一半偏移回来。

/*优化代码(使用css样式中的计算公式)*/
#son{
        position: absolute;
        left:calc(50% - 50px);
        top:calc(50% - 50px);
        }

注意: 计算公式中的运算符前后都需要有空格隔开!!!

缺点: 在使用left/top进行偏移50%之后,再使用margin-top/left偏移回子元素的一半。这就需要明白子元素的具体的尺寸,当子元素的尺寸有改变时,布局就会被破坏,维护性也极差。

三:使用绝对定位并margin自适应进行居中

1)首先需要将父元素样式设置position:relative

2)将子元素样式设置position:absolute

3)将left/top/bottom/right:0

4)margin:auto

/*关键样式代码*/
#father{
         position:relative;
       }
   #son{
         position: absolute;
         left: 0;
         top: 0;
         right: 0;
         bottom: 0;
         margin:auto;
        }

分析: 这种居中方式采用的是流体自适应居中,将left/top/bottom/right四个属性都设置为0表示子模块相对于四条边的偏移量都是零,这时再放进去一个margin:auto;,在满足前边四个属性的条件下进行marginauto布局,就可以实现垂直居中。

优点: 维护性高,不需要知道父子元素的具体尺寸也可以实现居中的效果。

四: 使用table-cell进行居中显示

/*关键样式代码*/
 #father{
            display: table-cell;
            vertical-align: middle;
        }
    #son{
            margin: 0 auto;
        }

分析: 将父元素display:设置为table-cell,此时就可以使用vertical-align: middle对内部的子元素进行垂直居中。之后在子元素样式中使用margin: 0 auto;实现水平居中

注意: 父容器的设置display: table-cell;后,如果想要将父容器本身使用margin居中无法达到效果,因为margindisplaytable-cell的无效。涉及到table的样式相对较为复杂,所以不建议使用。

五:使用弹性盒子来实现居中

css3中提供了一种响应式布局的方案:弹性盒子。他可以适应不同屏幕的大小和不同的设备类型。同时,它也提供了更加有效地方式来对容器的子元素进行排列和对齐,以

及分配剩余空白空间。但是由于现在弹性盒子是css3的新的布局模式,所以有些浏览器还没有兼容,需要添加一些浏览器前缀,以达到兼容的效果。

/*关键样式代码*/
 #father{
           display: flex;
           justify-content: center;
           align-items: center;
        }

分析: 设置displayflex,同时在默认情况下flex-directionrow,即主轴线为水平方向,副轴为垂直方向。设置justify-contentcenter,可以将元素在主轴(水平)方向上居中显示,设置align-items可以将元素在副轴(垂直)方向上居中显示。

优点: 维护性高,而且弹性盒子可以完成浮动和定位所能达到的效果,而且相当的简便。

最后的总结

1)明确各方案的优缺点,即是否易于维护;

2)明白定位中的四个属性在偏移时,需要反方向移回一半的宽高。

3)熟记五个方案,针对不同场景灵活运用。

相关文章
|
1月前
|
移动开发 开发者 UED
HTML5 语义元素详解
HTML5引入了诸多语义元素
WK
|
1月前
|
存储 移动开发 前端开发
HTML5新增了哪些其他元素和属性
这段文字介绍了HTML5中新增的多种元素和属性,包括页面布局元素如header、nav等,表单元素如email、tel输入框等,以及其他元素如canvas、svg等。此外,还介绍了全局及表单属性,例如contenteditable、placeholder等,这些新功能显著增强了HTML5在现代网页设计与开发中的实用性与灵活性。
WK
52 1
|
2月前
|
JavaScript 前端开发 容器
用HTML DOM实现有条件地渲染网页元素(上)
用HTML DOM实现有条件地渲染网页元素(上)
|
2月前
|
存储 JavaScript 前端开发
用HTML DOM实现有条件地渲染网页元素(下)
用HTML DOM实现有条件地渲染网页元素(下)
|
25天前
HTML 元素
HTML文档由HTML元素定义,元素包括开始标签、内容和结束标签。某些元素内容为空,可在开始标签中关闭。大多数元素可拥有属性,且元素间可相互嵌套,形成复杂结构。
|
1月前
|
移动开发 数据安全/隐私保护 UED
HTML5 表单元素详解
HTML5 引入了新的表单元素和属性,如 `<form>、<input>、<textarea>、<select>` 和 `<button>`,以及 `required、min、max` 等属性,增强了表单的创建与交互。其中,`<input>` 支持多种类型如 `email、url、date` 等,提供了更好的用户体验和数据验证。此外,HTML5 还新增了原生表单验证功能,简化了开发流程并提升了安全性。
|
1月前
|
XML JavaScript 数据格式
jquery中html()方法的使用
jquery中html()方法的使用
19 1
WK
|
1月前
|
Web App开发 存储 移动开发
HTML5新增了哪些表单元素
HTML5通过新增多种表单元素和属性,提升了用户体验与交互性。例如,`email`和`url`元素分别验证邮箱地址和网址格式;`number`和`range`便于输入数字及区间值;`date`等元素简化了日期时间的选择;`search`添加搜索图标,`color`提供颜色选择器;`datalist`结合`input`属性给予用户下拉列表选项;`keygen`用于生成密钥对以增强安全性;`output`则用于动态展示计算结果。这些改进共同提高了表单的功能性和易用性。
WK
24 2
|
1月前
|
数据采集 数据安全/隐私保护
html常见的表单元素有哪些,html表单元素有哪些?
html常见的表单元素有哪些,html表单元素有哪些?
17 0
|
1月前
|
JavaScript 前端开发
DOM的概念?获取html元素的方法有哪些?
DOM的概念?获取html元素的方法有哪些?
33 0