block、inline、inline-block 区别
前言
这是一道常见的面试题目,但是平时也经常在用,假装我在面试,看看能写出多少东西。
block
和inline
区别
- 默认的情况下,
block
会新起一行;inline
不会,会在同一行水平排列,也会自动换行 block
的宽度是父元素的 100%;inline
,宽度取决于内容,设置width
无效,height
无效(line-height
有效),margin
和padding
top
bottom
无效block
可以包含inline
和其他block
inline
无法包含block
,可以包含inline
这个是全网都这样说,但是实际上现代浏览器早就已经做了兼容处理,一样是可以正常使用的。
inline
坑点
最常见的问题可能就是img
下面存在空白,这是基线问题,解决方法有多样
- 设置
display:block
- 定义
vertical-align
- 定义
font-size:0
inline-block
和block
,inline
区别
- 对比
inline
,inline-block
可以设置width
,height
和margin
,padding
的top
和bottom
block
,inline-block
只是不用不会新起一行,而且可以包含block
,inline
和inline-block
inline
和inline-block
坑点
1 | <div class="container"> |
上述html
会看到 foo 和 bar 之间是有一个空格的,原因是html
中把所有换行符,空格,和制表符都合并为一个空白符,导致如果直接使用会在元素之间存在空格,解决方法有多样:
这个问题原因出现就是标签之间的空白符,所以如果我们不换行,标签之间不换行就可以解决了,但是可读性和编写体验很差
margin
负值,这个就…要考虑外部环境影响,浏览器之间也有可能出现不同,所以不建议舍弃闭合标签,就是把
</a>
取消不写,浏览器找不到闭合标签也不能计算标签之间的空白符,但是如果要兼容 IE6/7 最后一个闭合标签需要加上,同样地这个方法编写体验很差…修改字体大小,这个方法在我看来是最好的办法,逻辑上或者兼容性处理都是最好的
1
2
3
4
5
6
7
8
9.container {
font-size: 0;
// Chrome 默认最小字体限制解决兼容
-webkit-text-size-adjust: none;
a {
font-size: 12px;
}
}
当然网上也有很多其他的办法,比如letter-spacing
,word-spacing
等等,不过总是需要设置负值或者使用起来过于麻烦(比如table
的方法),方法总是多样的,私认为了解即可。