之前用的display属性的值只会用inline或者block,这两个值的显示形式如下:
(1)inline:设置了display:inline;属性的元素,不会自动换行,并且即使元素设置了宽高也没有效果,属于行内元素,典型的inline元素有<span>, <a>, <label>, <input>, <img>, <strong> 和<em>
(2)block:设置了display:block;属性的元素,会自动换行,并且可以设置其高宽,属于块级元素,典型的block元素有:<div>, <p>, <h1>, <form>, <ul> 和 <li>
例子:
<style>
ul{list-style: none;}
li{display: inline;width:200px;height: 30px;text-align: center;line-height: 30px;background: #ccc;}
</style>
</head>
<body>
<ul>
<li>test1</li>
<li>test2</li>
<li>test3</li>
<li>test4</li>
</ul>
</body>
实现效果:
可以看到,即使我们给每一个li元素设置了相应的宽和高,显示的效果依然是背景色只是包裹li元素内的字所撑开的宽度和高度
如果将其改为display:block;效果如下:
默认情况下,inline-block的表现形式和inline一样,只有在给元素设置了宽和高的时候才会显示出差别
然而到了这里,故事并没有结束:
现在一些流行的浏览器都支持inline-block,但是IE6&7并不支持,但使用display:inline-block在IE下会触发layout,从而使内联元素拥有了display:inline-block属性的表症。对块元素设置display:inline-block属性无法实现inline-block的效果。这时块元素仅仅是被display:inline-block触发了layout,而它本就是行布局,所以触发后,块元素依然还是行布局,而不会如Opera中块元素呈递为内联对象。
解决方案(1):
ul{list-style: none;}
li{display: inline-block;width:200px;height: 30px;text-align: center;line-height: 30px;background: #ccc;border:1px solid black;}
li{display: inline;}
即设置两次,这个hack只是针对IE7以下版本.
解决方案(2):
ul{list-style: none;}
li{display: inline;zoom:1;width:200px;height: 30px;text-align: center;line-height: 30px;background: #ccc;border:1px solid black;}
这个也是针对IE7及以下版本