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

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

 

display有几种属性:
inline是内联对象,比如<a/><span/>标签等,可以“堆在一起”显示,宽高由内容决定,不能设置;
block是块对象,比如<div/><p/>标签等,要占一整行,但是宽高可以自定义;
为了弥补inline和block的不足,又扩充了inline-block属性;
inline-blcok可以将对象呈递为内联对象,而内容作为块对象呈递。

通俗点讲就是

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

为什么会有间隙

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元素不会生成垂直方向有空白!

 

水平间隙其他解决方案

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

原始状态

<ul>
    <li>item1</li>
    <li>item2</li>
    <li>item3</li>
    <li>item4</li>
    <li>item5</li>
</ul>

1、改变书写结构

<ul>
    <li>item1</li><li>item2</li><li>item3</li><li>item4</li><li>item5</li>
</ul>
<ul>
    <li>
        item1</li><li>
        item2</li><li>
        item3</li><li>
        item4</li><li>
        item5</li>
</ul>
<ul>
    <li>item1</li
    ><li>item2</li
    ><li>item3</li
    ><li>item4</li
    ><li>item5</li>
</ul>
<ul>
    <li>item1</li><!--
  --><li>item2</li><!--
  --><li>item3</li><!--
  --><li>item4</li><!--
  --><li>item5</li>
</ul>

效果图

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

2、打包工具

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

3、丢失结束标签

<ul>
    <li>item1
    <li>item2
    <li>item3
    <li>item4
    <li>item5
</ul>

此方法虽然可以解决此问题,但是在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;
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值