内联块inline-block块下沉、多余的水平间隙垂直间隙的问题

把导航设置为inline-block以后总是会多出4px的垂直间隙

 

display有几种属性:
inline是内联对象,比如标签等,可以“堆在一起”显示,宽高由内容决定,不能设置;
block是块对象,比如

通俗点讲就是

“可定宽高的堆在一起”显示

为什么会有间隙

inline-blcok块之间的不可见符号会被保留父层字体的1/3大小的空间

 

1、块下沉

排列多个元素在一行时,也就是多个内联块元素并列时,会导致块下沉

解决方案:与baseline有关 ,设置vertical-align:top/middle/bottom

2、间距问题

有空隙

解决方案:父元素中设置font-size:0

原理: 设计者在设计这个inline-block时,是为了放置文字而设置的
 

解决方案

四个div之间有小间距,解决办法:
让水平间隙消失就是在父级上加font-size:0;
让垂直间隙消失,就在子元素上加vertical-align:bottom;//或者top也行

在百度上一搜,倒是有解决方案,但是没有一个能用。什么去掉换行空格啦(试过好多次,不行),设置字体大小为0啊(公司的电脑上没有成功,在家里试发现是可以的),设置margin偏移啊(鄙视这种做法,不采纳),空隙仍然在那里。最后还是功夫不负有心人,另外一篇文章里面说到可以设置vertical-align为top。


如果子标签内加上任意文字,则display:inline-block元素不会生成垂直方向有空白!

 

水平间隙其他解决方案

知道了原因,方案就好找了,我把它分为以下几种

内联块inline-block块下沉、多余的水平间隙垂直间隙的问题_第1张图片

原始状态

  • item1
  • item2
  • item3
  • item4
  • item5

1、改变书写结构

  • item1
  • item2
  • item3
  • item4
  • item5
  • item1
  • item2
  • item3
  • item4
  • item5
  • item1
  • item2
  • item3
  • item4
  • item5
  • item1
  • item2
  • item3
  • item4
  • item5

效果图

以上几种均可以完美的达到去除间隙的作用
但是,从代码的可读性上看,或多或少有一些不足

2、打包工具

使用打包工具或者自写脚本,在上线前将响应HTML代码打包成一行,即可

3、丢失结束标签

  • item1
  • item2
  • item3
  • item4
  • item5

此方法虽然可以解决此问题,但是在Doctype为xhtml时将报错,所有方法是否适用须视情况而定。

4、css hack

知道间隙的产生原因和间隙的大小后,动手写一个css hack也是一种很好的方法
1、将父容器的字体大小设置为0,可解决绝大多数浏览器(老版本safari不支持)
2、针对不支持上条的浏览器设置字块或字符间间隙letter-spacing/word-spacing,推荐letter-spacing,因为此属性不会产生负间隙,但需要注意,要在子元素上设置letter-spacing:0
3、如果你转化但是块对象,那需要为低版本浏览器设置inline兼容,不让样式会乱掉
总结以上几点给出以下代码

.parent {
    letter-spacing: -.3333em;
    font-size: 0;
}
.child {
    display: inline;
    display: inline-block;
}

 

你可能感兴趣的:(html/css)