让不固定个数的子元素自适应居中

2016-02-17 02:59 9 1 收藏

图老师小编精心整理的让不固定个数的子元素自适应居中希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~

【 tulaoshi.com - 平面设计 】

今天群里工友提了一个需求,让固定宽度的子元素,在不确定宽度的容器内水平居中(自适应):UL 宽度不固定;LI 宽度固定,LI 是一个块。看起来还挺简单的。但大家为什么一直讨论不断。奇怪,实现了一下。发现其实还是很简单的。还是没有超出原来的解决方案,即使用 display:inline-block。实际要实现的效果应该是下面这个样子:

让不固定个数的子元素自适应居中,PS教程,图老师教程网

 

而事实上,这并不是简单的事。作为样式方面的主导者开发者,职责就是去解决这样的问题。那么写 Demo 吧。如果这个解决方案搞定了,那么,我们将可以轻易地做到,让不固定个数的子元素相对于窗口自适应居中。比如这样的导航,无论子元素是多少,都会自适应居中:

让不固定个数的子元素自适应居中,PS教程,图老师教程网

最终效果:UL宽度自适应水平居中

好吧。说一下实现的重点。如果子元素不是固定的话,我们通常的实现方法是利用来 display:inline-block 解决,在 IE6 ~ 7 中使用 display:inline 但要让这个元素拥有 layout,通常我们是添加 zoom:1; 来实现。这样,大概代码会是这样的:

#test{display:block;text-align:center;}#test li{display:inline-block;*display:inline;*zoom:1;width...

但这个子元素需要是块状的,有时候就会现出高低不平的现象,这很好解决,用加上一句:

#test{display:block;text-align:center;}#test li{display:inline-block;*display:inline;*zoom:1;/* 解决不能水平对齐问题 */vertical-align:top;}

好吧,现在能运行了。样子还不错,IE 下面已经可以达到我们要求的效果了。但,Firefox 等高级浏览器竟然出现了间隙,如下图:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/pmsj/)

让不固定个数的子元素自适应居中,PS教程,图老师教程网

好吧,真正要忧伤的东西来了。这是一个正常现象,只要用 display:inline-block 就会有这样的问题。因为 IE6~7 并不完全支持这个属性,所以不存在这样的问题。好吧,好像是因为空白引起的。如果把所有空白都删除了就没问题了。但这始终不是什么好办法。我们的解决方法是(多谢@鸽子一起解决这个问题):

@media screen and (-webkit-min-device-pixel-ratio:0){#test{/* 让 chrome 支持 12px 以下的字体 */-webkit-text-size-adjust:none;} }

但是。问题是这个纠结的浏览器,竟然不认 font-size:0 这样的写法。还好经测试,幸运的是 font-size:1px 它认识,而且效果刚好是我们想要的:没有间隙。最终的代码是:

#test{display:block;text-align:center;/* 解决间隙问题 */font-size:0;}#test li{display:inline-block;*display:inline;*zoom:1;/* 解决不能水平对齐问题 */vertical-align:top;/* 解决间隙问题后遗症解决 */font-size:13px;}/* 让 chrome 支持 12px 以下的字体 */@media screen and (-webkit-min-device-pixel-ratio:0){#test{-webkit-text-size-adjust:none;font-size:1px;}}

好吧,好久没写 CSS 了。在想,如果有天我开始记忆力不好,忘记 CSS 是怎么写的,怎么办?会不会像《Boston Legal》的 Deny Crane 一样抓狂。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/pmsj/)

多谢 Atrl 同学和 Justice 同学提供的更方便的方法,避免了 hack:

ul{ float: left;left: 50%;position: relative;}li{float: left;position: relative;right: 50%;}

来源:http://www.tulaoshi.com/n/20160217/1577869.html

延伸阅读
标签: Web开发
如果我们想在3列布局的最后加一行页脚,放版权之类的信息。就遇到必须对齐3列底部的问题。在table布局中,我们用大表格嵌套小表格的方法,可以很方便对齐三列;而用div布局,三列独立分散,内容高低不同,就很难对齐。其实我们完全可以嵌套div,把三列放进一个DIV中,就做到了底部对齐。下面是实现例子(白色背景框模拟一个页面): Bod...
标签: Web开发
用CSS让元素居中显示并不是件很简单的事情同样的合法CSS居中设置在不同浏览器中的表现行为却各有千秋。让我们先来看一下CSS中常见的几种让元素水平居中显示的方法。 1.使用自动外边距实现居中 CSS中首选的让元素水平居中的方法就是使用margin属性将元素的margin-left和margin-right属性设置为auto即可。在实际使用中,我们可以...
标签: Web开发
样式有点丑,为此,还重搞了个样式,哪知以为完工的时候,发现IE上工作不正常,自适应大小等无法实现。 原来它需要xhtml才行,而公司的产品是html的。为此,研究了一下自适应大小的实现。 原来一直觉得jquery取宽度高度很神奇,原来是直接取的dom中element的offsetWidth/offsetHeight等属性,当有element插入dom中,浏览器就会根据规则计算...
标签: Web开发
有时候我们需要一个链接看上去像按钮,所以就需要用到block属性,如果要几个按钮并排或者需要和其他文字混排的时候,inline-block就可以很好的解决这个问题。 只是不是所有人都响应了Mozilla的号召把Firefox升级到了3.0。遗憾的是,Firefox2不支持这个属性。网上查了一下,似乎有很多种建议方案,但是只有一个叫-moz-inline-stack的属...
标签: Web开发
前言 有时候我们不得不面对圆角,也很傻很天真的认为利用 CSS3 的新特性对浏览器分级支持是最好解决方案,但现实≠理想 需求3px 圆角 宽度自适应(随着文字字数扩展宽度并自动换行) 换肤 不使用图片(对可维护性/性能均有影响) 困惑 经典的解决方案看起来像这样: !DOCTYPE htmlhtmlheadmeta content="text/html; charset=utf-8&qu...

经验教程

863

收藏

51
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部