CSS布局奇淫技巧之--各种居中

  居中是我们使用css来布局时常遇到的情况。使用css来进行居中时,有时一个属性就能搞定,有时则需要一定的技巧才能兼容到所有浏览器,本文就居中的一些常用方法做个简单的介绍。

注:本文所讲方法除了特别说明外,都是兼容IE6+、谷歌、火狐等主流浏览器的。

先来说几种简单的、人畜无害的居中方法

1. 把margin设为auto

具体来说就是把要居中的元素的margin-left和margin-right都设为auto,此方法只能进行水平的居中,且对浮动元素或绝对定位元素无效。

2、使用 text-align:center

这个没什么好说的,只能对图片,按钮,文字等行内元素(display为inline或inline-block等)进行水平居中。但要说明的是在IE6、7这两个奇葩的浏览器中,它是能对任何元素进行水平居中的。

3、使用line-height让单行的文字垂直居中

把文字的line-height设为文字父容器的高度,适用于只有一行文字的情况。

4、使用表格

如果你使用的是表格的话,那完全不用为各种居中问题而烦恼了,只要用到 td(也可能会用到 th)元素的 align="center" 以及 valign="middle" 这两个属性就可以完美的处理它里面内容的水平和垂直居中问题了,而且表格默认的就会对它里面的内容进行垂直居中。如果想在css中控制表格内容的居中,垂直居中可以使用 vertical-align:middle,至于水平居中,貌似css中是没有相对应的属性的,但是在IE6、7中我们可以使用text-align:center来对表格里的元素进行水平居中,IE8+以及谷歌、火狐等浏览器的text-align:center只对行内元素起作用,对块状元素无效。

QQ截图20130925155722

QQ截图20130925155722

在ie6、7中可以通过css的text-algin来控制表格内容的水平方向的对齐,无论内容是行内元素还是块状元素都有效。

QQ截图20130925155722

但在ie8+以及chrome、firefox等浏览器中的text-align:center对块状元素无效,只能用表格自有的align属性。

5、使用display:table-cell来居中

对于那些不是表格的元素,我们可以通过display:table-cell 来把它模拟成一个表格单元格,这样就可以利用表格那很方便的居中特性了。例如:

QQ截图20131014161356

QQ截图20131014161356

但是,这种方法只能在IE8+、谷歌、火狐等浏览器上使用,IE6、IE7都无效。

 

那面所说的都是很基础的方法,自然不能称之为奇淫巧计,下面就来说一些需要使用一些技巧的居中方法。

6、使用绝对定位来进行居中

此法只适用于那些我们已经知道它们的宽度或高度的元素。

绝对定位进行居中的原理是通过把这个绝对定位元素的left或top的属性设为50%,这个时候元素并不是居中的,而是比居中的位置向右或向左偏了这个元素宽度或高度的一半的距离,所以需要使用一个负的margin-left或margin-top的值来把它拉回到居中的位置,这个负的margin值就取元素宽度或高度的一半。

QQ截图20130925155722

运行效果:

QQ截图20130925155722

如果只想实现一个方向的居中,则可以只使用left , margin-left 来实现水平居中,使用top , margin-top来实现垂直居中。

 

7、另一种使用绝对定位来居中的方法

此法同样只适用于那些我们已经知道它们的宽度或高度的元素,并且遗憾的是它只支持IE9+,谷歌,火狐等符合w3c标准的现代浏览器。

下面用一段代码来了解这种方法:

QQ截图20130925155722

运行效果:

QQ截图20130925155722

这里如果不定义元素的宽和高的话,那么他的宽就会由left,right的值来决定,高会由top,bottom的值来决定,所以必须要设置元素的高和宽。同时如果改变left,right , top , bottom的值还能让元素向某个方向偏移,大家可以自己去尝试。

 

8、使用浮动配合相对定位来进行水平居中

此方法也是关于浮动元素怎么水平居中的解决方法,并且我们不需要知道需要居中的元素的宽度。

浮动居中的原理是:把浮动元素相对定位到父元素宽度50%的地方,但这个时候元素还不是居中的,而是比居中的那个位置多出了自身一半的宽度,这时就需要他里面的子元素再用一个相对定位,把那多出的自身一半的宽度拉回来,而因为相对定位正是相对于自身来定位的,所以自身一半的宽度只要把left 或 right 设为50%就可以得到了,因而不用知道自身的实际宽度是多少。

这种使用浮动配合相对定位来居中的方法,优点是不用知道要居中的元素的宽度,即使这个宽度是不断变化的也行;缺点是需要一个多余的元素来包裹要居中的元素。

看下代码:

QQ截图20130925155722

 

运行效果:

QQ截图20130925155722

 

9、利用font-size来实现垂直居中

如果父元素高度是已知的,要把它里面的子元素进行水平垂直居中,则可以使用这种方法,且子元素的宽度或高度都不必知道。

该方法只对IE6和IE7有效。

该方法的要点是给父元素设一个合适的font-size的值,这个值的取值为该父元素的高度除以1.14得到的值,并且子元素必须 是一个inline或inline-block元素,需要加上vertical-align:middle属性。

至于为什么是除以1.14而不是其他的数,还真没有人知道,你只需要记住1.14这个数就行了。

QQ截图20131014161356

QQ截图20131014161356

在方法5中说过在IE8+、火狐谷歌等现在浏览器中可以用display:table-cell来进行居中,而这里的font-size的方法则适用于IE6和IE7,所以把这两种方法结合起来就能兼容所有浏览器了:

QQ截图20131014161356

QQ截图20131014161356         QQ截图20131014161356

上面的例子中因为要居中的元素是一个块状元素,所以我们还需要把他变成行内元素,如果要居中的元素是图片等行内元素,则可以省略此步。

另外,如果 vertical-align:middle 是写在父元素中而不是子元素中,这样也是可以的,只不过计算font-size时使用的  1.14 这个 数值要变成大约 1.5 这个值。

 

以上就是一些常见的居中方法了,如有疏漏或错误之处,敬请指正!

转载于:https://www.cnblogs.com/lzijian/p/5817440.html

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

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

相关文章

手写数字识别中多元分类原理_广告行业中那些趣事系列:从理论到实战BERT知识蒸馏...

导读:本文将介绍在广告行业中自然语言处理和推荐系统实践。本文主要分享从理论到实战知识蒸馏,对知识蒸馏感兴趣的小伙伴可以一起沟通交流。摘要:本篇主要分享从理论到实战知识蒸馏。首先讲了下为什么要学习知识蒸馏。一切源于业务需求&#…

linux zip/unzip命令

2019独角兽企业重金招聘Python工程师标准>>> 语  法&#xff1a;zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工 作目录>][-ll][-n <字 尾字符串>][-t <日 期时间>][-<压 缩效率>][压 缩文件][文件...][-i <范本样式>][-x <范本样式…

在Windows下不使用密码远程登陆Linux

在登陆Linux进行管理的时候我们通常会使用用户名和密码进行登陆&#xff0c;这样一来是比较麻烦&#xff0c;二来是不安全&#xff0c;为了解决这个问题&#xff0c;我们可以使用公私钥 (public keys和private keys)进行认证。简单来说公钥存放在服务器上&#xff0c;私钥存放在…

Core Data

简介 Core Data是iOS5之后才出现的一个框架&#xff0c;它提供了对象-关系映射(ORM)的功能&#xff0c;即能够将OC对象转化成数据&#xff0c;保存在SQLite数据库文件中&#xff0c;也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间&#xff0c;我们不需要编写任何…

2017将转行进行到底

2016 年说着转行&#xff0c;最后还是在匆匆中找了一份老本行&#xff0c;此刻的心情还是无爱&#xff0c;毕竟螺丝一直分不清啊&#xff0c;不喜欢就是不喜欢。看了django的教程&#xff0c;不得不感叹国外的书写的相对优秀一点&#xff0c;《learning django web development…

mysql非主键索引_主键索引和非主键索引的区别

1. 什么是最左前缀原则&#xff1f;以下回答全部是基于MySQL的InnoDB引擎例如对于下面这一张表如果我们按照 name 字段来建立索引的话&#xff0c;采用B树的结构&#xff0c;大概的索引结构如下如果我们要进行模糊查找&#xff0c;查找name 以“张"开头的所有人的ID&#…

优美的配色方案设计

2019独角兽企业重金招聘Python工程师标准>>> 怎么做好设计配色一直是个难题&#xff0c;虽然网站上有各种各样的色库&#xff0c;但配色仍然至关重要&#xff0c;不得已的话可以亲自动手&#xff0c;况且乐趣满满。 这个没有一套标准&#xff0c;所以看自己怎么喜欢…

mysql死锁释放时间参数_【Mysql】mysql 事务未提交导致死锁 Lock wait timeout exceeded; try restarting transaction 解决办法...

问题场景问题出现环境&#xff1a;1、在同一事务内先后对同一条数据进行插入和更新操作&#xff1b;2、多台服务器操作同一数据库&#xff1b;3、瞬时出现高并发现象&#xff1b;不断的有一下异常抛出&#xff0c;异常信息&#xff1a;org.springframework.dao.CannotAcquireLo…

springmvc视图解析器_SpringMVC视图及REST风格

什么是视图解析器&#xff1f;springMVC用于处理视图最重要的两个接口是ViewResolver和View。ViewResolver的主要作用是把一个逻辑上的视图名称解析成一个真的的视图&#xff0c;而SpringMVC中用于把View对象呈现给客户端的是View对象本身&#xff0c;而ViewResolver只是把逻辑…

mysql5.7.x 1251_MySql-8.0.x免安装版下载与配置,Navicat打开数据库链接报错1251的解决办法...

概述MySQL从5.7一下子跳到了MySQL8.0, 其中的变化必然是很大的, 这里就不说了, 本文主要讲解最新版MySQL安装的事情.实际上5.7版本后的mysql免安装版都是没有data文件和my.ini文件的&#xff0c;下面再具体说明怎么生成&#xff0c;注意不能自己手动新建.下载下载程序必然去官网…

To install 64-bit ODBC drivers

为了更充分的利用硬件资源&#xff0c;我想很多人都开使用64位操作系统了&#xff0c;同时你可以也发现了在64位操作系统上ODBC的驱动找不到了&#xff0c;所以ODBC的东西都没法用了。 因为2007以前版本的Office只有32位版本&#xff0c;所以我们不能在64位系统上使用ODBC。使用…

【Qt开发】QTableWidget设置根据内容调整列宽和行高

QTableWidget要调整表格行宽主要涉及以下一个函数 1.resizeColumnsToContents(); 根据内容调整列宽 2.resizeColumnToContents(int col); 根据内容自动调整给定列宽 3.horizontalHeader()->setResizeMode 把给定列…

深入浅出mysql数据开发_深入浅出MySQL数据库开发、优化与管理维护 PDF扫描版[513KB]...

深入浅出MySQL数据库开发、优化与管理维护 内容介绍&#xff1a;本书从数据库的基础、开发、优化、管理维护4个方面对MySQL进行了详细的介绍&#xff0c;其中每一部分都独立成篇。本书内容实用&#xff0c;覆盖广泛&#xff0c;讲解由浅入深&#xff0c;适合于各个层次的读者。…

Understand Lambda Expressions in 3 minutes(翻译)

本文翻译自CodeProject上的一篇简单解释Lambda表达式的文章&#xff0c;适合新手理解。译文后面我补充了一点对Lambda表达式的说明。 1.什么是Lambda表达式&#xff1f; Lambda表达式是一种匿名方法&#xff0c;多数情况下用来在LINQ中快速创建委托。简单地说&#xff0c;它代表…

Hibernate二级缓存配置

一、定义&#xff1a; 二级缓存是进程或集群范围内的缓存&#xff0c;可以被所有的Session共享&#xff0c;是可配置的插件 二、二级缓存原理图 解析&#xff1a;每次从二级缓存中取出的对象&#xff0c;都是一个新的对象。 三、配置步骤如下&#xff1a; 同理&#xff1a;以员…

redis配置主从没效果_跟我一起学Redis之加个哨兵让主从复制更加高可用

Redis哨兵(Sentinel)其实本质就是一个RedisServer节点&#xff0c;通过设置 运行模式 来开启哨兵的功能&#xff1b;主要功能如下&#xff1a;监控(Monitoring )&#xff1a;哨兵节点会不断地检查的主服务和从服务的运行状态&#xff1b;自动故障迁移(Automatic failover) &…

闰秒导致MySQL服务器的CPU sys过高

今天&#xff0c;有个哥们碰到一个问题&#xff0c;他有一个从库&#xff0c;只要是启动MySQL&#xff0c;CPU使用率就非常高&#xff0c;其中sys占比也比较高&#xff0c;具体可见下图。 注意&#xff1a;他的生产环境是物理机&#xff0c;单个CPU&#xff0c;4个Core。 于是&…

新安装数据库sqlserver2008r2,使用javaweb连接不上问题处理

鼠标右键【计算机】--》【管理】&#xff0c;打开界面如下&#xff1a; 选择自己数据库的实例名&#xff1a; 选择TCP/IP&#xff1a;右键【属性】&#xff0c;将所有TCP动态端口的【0】删掉&#xff0c;TCP端口设为1433&#xff1b;重启服务&#xff0c;即可连接。PS:不知道这…

vue 鼠标点击事件_VBA代码解决方案第115讲:点击鼠标实现精准控制触发事件的VBA代码第二方案...

大家好&#xff0c;我们今日继续讲解VBA代码解决方案的第115讲内容&#xff1a;工作表事件中&#xff0c;根据Target参数不同&#xff0c;实现精准控制触发事件的VBA代码第二方案。在上一讲中我们讲了利用Address的属性实现控制触发事件的方案&#xff0c;今日讲解第二方案&…

(翻译)31天Windows Phone学习-1-项目模板

今天在在外文网站Google关于Windows Phone 7的学习资料&#xff0c;无疑间Google到了Jeff Blankenburg的 31 Days of Windows Phone这个系列&#xff0c;感觉写的比较基础和浅显易懂&#xff0c;适合我这种入们级的人学习&#xff0c;所以准备拿来对Windows Phone 7的简单入门学…