元素的居中方式总结

最近有点空闲时间,所以想好好看看几个一直没机会看的问题。把它写下来,是促进自己更好地理解,同时也是一个备忘吧!

先说元素居中,元素居中,从最开始接触前端就一直挥之不去的一个问题,也许是太忙了,这个本该认真研究的问题,竟然一直都没有好好总结,总是遇到了临时应付。一个个小问题的深度剖析和积累,达到量的积累才能获得质的改变。(当然,同时,所有很大很大的东西其实都是由一点一点的小东西组成的,比如一个大的网站是由很多有组织的居中,或者浮动等层层嵌套和叠加等而实现的。)所以,这是一个好的开头,元素居中,我的第一个深度剖析和总结的问题!

很多时候,我们实现居中可能只用某一种方式,习惯了就会基本上一直使用。讨论的意义在于融会贯通,也许实际项目中并不一定会用到其中的很多种居中方式,但是,这是一件一加一远大于二的事,别人给你说一千遍,也不如你自己亲自实践一遍,实践总是会给你意想不到的“小奖励”,你在实践的过程中很多属性你会从陌生到了然于胸,而且很多并不能够言传。

先来划分维度,这里讲从水平居中和垂直居中两个纬度来讨论。

一,水平居中

顾名思义就是水平方向上的居中,情境有很多。比如,按钮上的文字,标题,图片相对父容器等等。

1.自动外边距:块级、定宽的元素水平居中

从很多文章中了解到,这应该是大家使用最普遍的一种水平居中方式。对于一个有固定宽度的块级元素,只要设置margin: 0px auto;即可实现水平的居中效果。如果有父容器则相对于父容器居中,否则相对于body居中。不定宽的话,这个块级元素将会占据整整一行。

原理理解:左右auto也就是左右一样多,这样就很容易理解为什么能够水平居中了。

<div style="height: 200px;width: 200px;background-color: antiquewhite;margin: 0px auto;">定宽块状元素,左右margin auto</div>

2.文本的text-align: center:行内元素水平居中

这个居中方式只针对文本和行内元素有效(块级元素可通过设置display:inline使其适用。)。给父元素设text-align:center,则其子元素就能够水平居中。这本是针对文字的一个样式,这样的使用方式很方便,但是严格意义上来说有点不正规吧,但是,真的很好用哦,兼容性也超好。

原理理解:类似于word中文字的居中,这里你把所有行内元素想象成文字就好了。

<div class="text-center"><span>文本,同时也是行内元素的居中</span><img src="img/img.jpg" /></div>

3.加table标签,为table设自动外边距:不定宽块级元素水平居中。

此时,块级元素宽度会随着内容变化,但是布局始终是居中显示的。

原理:使用了表格单元格的特殊属性。

<table style="margin: 0 auto;"><tbody><tr><td><div style="background-color: aquamarine;">不定宽块状元素,加table标签,给table设margin auto。实现居中</div></td></tr></tbody>
</table>

4.绝对定位结合百分比:不定宽块级元素水平居中。

原理理解:容器相对于body有一半的left,然后内容相对屏幕的中间那条线向左移动自身一半的距离,刚好实现了居中。

<div style="position: absolute;left: 50%;"><div style="position: relative;left: -50%;background-color: purple;">同时设置容器和元素position然后再分别设置left值</div>
</div>

二,垂直居中

垂直居中同样也要分情况讨论,父元素高度确定的单行文本,父元素确定的多行文本,图片和块状元素等。

1.line-height=height:父元素高度确定的单行文本

原理理解:文字在一行内部是居中显示的,让行高等于元素高,这样文字在行内居中自然也就在元素内部居中了。

<div style="height: 60px;line-height: 60px;background-color: lawngreen;">父元素高度确定的单行文本。上下居中。</div>

2.display:table-cell;vertical-align: middle:父元素高度确定的多行文本。

原理理解:这是通过table-cell激活了vertical-align:middle,也就是垂直居中;

<div style="height: 200px;display:table-cell;vertical-align: middle;background-color: skyblue;">多行文本。。。。
</div>

3.绝对定位居中技术:

原理理解:它通过激活margin:auto;来实现居中,W3C默认的是元素margin:auto,时上下边距为零的,但是,通过绝对定位和相对定位,然后设置left,bottom,right,top值为零,模拟一个从文档流中分离的边界,这是设置margin:auto,就可以让上下左右margin都相同了。

.center-container{position: relative;height: 100px;}
.absolute-center{width: 50%;overflow: auto;margin: auto;position: absolute;top: 0;bottom: 0;left: 0;right: 0;}

* 容器是需要有高度的,并且定位属性为relative。

* 内容要有宽度或者高度,以防它占据整个容器。

* overflow: auto;防止溢出时错误显示。设为auto溢出时会出现滚动条。保持在容器内部。

原理详解:A:普通内容流中,margin:auto;的效果等同于让上下边距为零,这是W3C官方文档中定义的。

     B:position:absolute;是绝对定位块跳出了内容流,内容流中其余部分渲染时绝对定位部分不进行渲染。

     C:为区块设置 top: 0; bottom: 0; left: 0;right:0;将给浏览器重新分配一个边界框,此时该元素将填充其父元素所有可用空间;一般父元素为body或者声明position:relative;的元素。

     D:给内容块设置一个高度或者宽度,能够防止让内容块占据所有可用空间。

     E:由于,内容块脱离文档流,设置了margin:auto后浏览器会给margin top和bottom设置相同的值,从而实现上下居中。

(1)、容器内的绝对居中

这是直接利用了margin的均分来实现的。

<div class="center-container" style="background-color: aquamarine;">我是容器<div class="absolute-center" style="background-color: bisque;height: 50%;">我是内容,我现在是在容器内部居中显示的。</div>
</div>

(2)、视区内的绝对居中

结合position:fixed;z-index来实现。

<div class="center-container" style="background-color: aquamarine;">我是容器<div class="absolute-center" style="position:fixed;z-index:999;background-color: coral;width: 30%;height: 200px;">我是在视区内绝对居中的。<br />绝对居中</div></div>

(3)、侧边栏

给left或者right设置具体值,然后另一个auto就好了。

<div class="center-container" style="background-color: aquamarine;">我是容器<div class="absolute-center" style="left: auto;right: 10px;background-color: lawngreen;width: 300px;">我是在视区内偏右侧上下绝对居中的。</div></div>

(4)、响应式居中

结合百分比。

<div class="center-container" style="background-color: aquamarine;">我是容器<div class="absolute-center" style="width:60%;height:60%;min-width:200px;max-width:400px;background-color: mediumaquamarine;">响应式居中。</div>
</div>

(5)、图片居中

这个要控制图片高度auto,放置图片显示错误。

<div class="center-container" style="background-color: orchid;height: 200px;"><img style="width:200px;height: auto;display: table;" class="absolute-center" src="img/img.jpg" />
</div>

还有很多适用情况,重要的是理解原理,然后灵活应用。

4.floater DIV:

原理理解:这是通过一个浮动的div,宽度为百分之百,高度为容器的一半,然后通过负的下边距,来把需要居中的元素拉到格式的位置来实现的,这种方式不是很灵活,虽然能够实现居中。

<div style="background-color: hotpink;height: 200px;"><div style="float: left;height: 50%;width: 100%;margin-bottom: -50px;"></div><div style="background-color: aquamarine;clear: both;height: 100px;">我是内容</div>
</div>

5.相同的padding top和bottom实现居中:

原理理解:这个就很好理解了,上下padding相同,自然就居中了。不过灵活性也不大。

<div style="background-color: darkorange;padding: 20px 0;"><div style="background-color: burlywood;">相同的上下padding</div>
</div>

 

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

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

相关文章

JArchitect对Java开源贡献者免费

JArchitect是用于Java代码库的静态分析工具&#xff0c;它提供交互式GUI和HTML报告&#xff0c;用于查找代码中过于复杂或有问题的区域&#xff0c;执行分析以重构并比较随时间的变化。 在版本3中&#xff0c;添加了类似LINQ的查询语言&#xff0c;该工具使该工具成为功能极其强…

android让一个控件跟上面控件对其,学个明白--Android控件架构

Android控件架构1.什么是View&#xff1f;View是Android中所有控件的基类。View是界面层的控件的一种抽象&#xff0c;它代表了一个控件。在Android中每个控件都会在界面中占得一块矩形的区域。在Android中控件被分为两类&#xff1a;View和ViewGroup。ViewGroup控件作为父控件…

分享一个自制的计算子网划分的小工具

使用 javascirpt 写的&#xff0c;因此可以使用浏览器浏览即可 code: <meta charset"utf-8">输入划分网段的数量&#xff1a; <input id"inp_netCount" /> <input type"button" οnclick"createElem()" value"sta…

tmux颜色高亮跟vim不一致的情况

安装完tmux之后&#xff0c;按照网上大神的配置&#xff0c;稍微配置了下~/.tmux.conf&#xff1a; # 改变快捷键前缀 unbind C-b set -g prefix C-a # 绑定配置加载按键 bind r source-file ~/.tmux.conf \; display-message "Config reloaded.."# 设置终端类型为2…

html5表白页面3d,七夕节表白3d相册制作(html5+css3)

七夕节表白3d相册制作涉及知识点定位阴影3d转换动画主要思路&#xff1a;通过定位将所有照片叠在一起&#xff0c;在设置默认的样式以及照片的布局&#xff0c;最后通过设置盒子以及照片的旋转动画来达到效果。代码如下&#xff1a;3d相册/* 使用单位将所有照片叠在一起 */img{…

(1)pandas 基础教程

步骤1、环境准备 右击桌面上选择【Open in Terminal】 打开终端。在弹出的终端中输入【ipython】进入Python的解释器中&#xff0c;如图1所示。 图1 ipython解释器步骤2、导入所需要的包 导入实验常用的python包。如图2所示。【import pandas as pd】pandas用来做数据处理。【i…

CSS3效果:波浪效果

实现效果 如图所示&#xff1a; 首先得准备三张图&#xff0c;一张是浅黄色的背景图loading_bg.png&#xff0c;一张是深红色的图loading.png&#xff0c;最后一张为bolang.png。 css代码 body{background:#ffe894;}.loading_bg{width:113px; height:111px;background:url(lo…

html创建文件域的代码,word如何插入域代码

在word里怎么进行域代码的设置&#xff1f;如果知道要插入的域的域代码&#xff0c;可以将其直接键入在文档中。首先按 CtrlF9&#xff0c;然后在括号中键入代码就可以了。【Word插入域方法】1、Word2007中&#xff0c;在要插入域的位置单击。2、在“插入”选项卡上的“文字”组…

前端页面适配的rem换算

为什么要使用rem 之前有些适配做法&#xff0c;是通过js动态计算viewport的缩放值&#xff08;initial-scale&#xff09;。 例如以屏幕320像素为基准&#xff0c;设置1&#xff0c;那屏幕375像素就是375/3201.18以此类推。 但直接这样强制页面缩放过于粗暴&#xff0c;会导致页…

css清除浮动

css设计浮动属性的主要目的&#xff0c;是为了实现文本绕排图片的效果。 一.浮动 当浮动一张图片或者其他元素时&#xff0c;浏览器会将浮动元素往上方推&#xff0c;直到它碰到父元素的内边界。后面的元素不再认为浮动元素在文档流中位于它的前面了&#xff0c;因为它就会占…

gitlab搭建配置;ssh配置;

1.centos7上搭建gitlab&#xff0c;过程略&#xff1b; 命令&#xff1a;gitlab-ctl [start] [stop] [restart] [reconfigure] [tail] 查看gtilab日志 [status] 查看gitlab运行状态信息 2.修改默认ip端口&#xff1a; vim /etc/gitlab/gitlab.rb &#xff1b; external_url h…

家用计算机历史记录,教您如何查看电脑使用记录

很多朋友想查看自己之前使用过的文件或者文档来查询资料&#xff0c;或者是想看电脑是否被人使用过&#xff0c;但是&#xff0c;如何查看电脑使用记录呢&#xff1f;下面系统之家小编教大家查看电脑使用记录小技巧&#xff0c;不用担心找不到电脑使用记录。希望对大家有所帮助…

类的无参方法和Doc注释

一:Java Doc注释: 语法: /** *AccpSchool 类 *author JadeBird *version 1.0 2018/5/26 */ Java Doc是前Sun公司提供的一种技术,它能够从程序代码中抽取类,方法,成员等的注释,形成一个和源代码配套的API帮助文档(简答地说,就是介绍该类,类的方法和成员变量的文档). 因此只要在编…

Spring MVC,Ajax和JSON第3部分–客户端代码

如果您一直关注有关Spring&#xff0c;Ajax和JSON的简短博客系列&#xff0c;那么您会回想起我到目前为止已经创建了一个Spring MVC Web应用程序&#xff0c;该应用程序显示一个表单&#xff0c;该表单允许用户选择一堆项目并向服务器提交购买请求。 然后&#xff0c;服务器用一…

笔记36 Spring Web Flow——配置

Spring Web Flow是一个Web框架&#xff0c;它适用于元素按规定流程运行的程序。Spring Web Flow是Spring MVC的扩展&#xff0c;它支持开发基于流程的应用程 序。它将流程的定义与实现流程行为的类和视图分离开来。在介绍Spring Web Flow的时候&#xff0c;我们将暂时放下Spitt…

一些关于Viewport与device-width的东西~(转)

内容转自 http://www.cnblogs.com/koukouyifan/p/4066567.html 非常感谢 口口一凡 为我们提供的这篇文章&#xff0c;受益匪浅&#xff0c;特地转到自己的博客收藏起来。 以下是原文内容。 进行移动web开发已经有一年多的时间了&#xff0c;期间遇到了一些令人很困惑的东西。…

创建委托登录模块(用于JBoss EAP 6.1)

[如果只想查看代码&#xff0c;请向下滚动] 动机 在RHQ中&#xff0c;我们需要一个安全域&#xff0c;该域可用于通过容器管理的安全性来保护REST-api及其Web应用程序。 过去&#xff0c;我只是使用经典的DatabaseServerLoginModule对DatabaseServerLoginModule进行身份验证。 …

【C++】开源:FLTK图形界面库配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍FLTK图形界面库配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0…

蜗牛学院:中国人,努力获得了荣誉却要压抑克制

上周&#xff0c;在取得双11三连冠的佳绩之后&#xff0c;百雀羚顺势推出了一支视频广告《你应该骄傲》。 广告内容感动了无数人&#xff0c;并在广告圈和自媒体引发了持续刷屏。&#xff08;视频见文末&#xff09; 从《一九三一》到《韩梅梅快跑》&#xff0c;百雀羚今年多次…

学计算机专业独立显卡有必要吗,不玩游戏独立显卡有什么作用_如果不玩游戏需要选择独立显卡吗-系统城...

现在有些笔记本刚买来的时候会有自带的独立显卡和集成显卡&#xff0c;有些朋友在买了笔记本后并不想玩游戏&#xff0c;这时候他们就有了一个疑问不玩游戏独立显卡有什么作用呢&#xff1f;如果不玩游戏需要选择独立显卡吗&#xff1f;小编在这里就给大家带来电脑独立显卡的作…