内联块inline-block的垂直间隙问题

问题背景:移动端编程里面的左右按钮布局,没有用表布局,而用了浮动(为了让2个各占一半宽度的按钮排列在一行),由于浮动元素脱离了原本的文档流,导致父元素(块元素)所占高度为0,当父元素的display属性设置成内联块inline-block时,惊奇的发现它能占用浮动元素的高度了,但是用了一段时间之后发现它有个缺点,就是底部多出一部分空隙,不知道怎么干掉,而这两个按钮恰好要放到底部,不允许下面还有空隙,代码如下。

<style type="text/css">
.box1 {
  border: 1px solid red;
  width: 100%;
}
.box2 {
  box-sizing:border-box;
  border: 1px solid;
  display: inline-block;
  width: 100%;
}
span {
  width: 50%;
  background-color: #ddd;
  display: inline-block;
  text-align:center;
  padding:0.5em 0;
  float:left;
}
</style>
<div class="box1">
    <div class="box2">
        <span>确定</span>
        <span>取消</span>
    </div>
</div>

效果如下图:

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

<style type="text/css">
.box1 {
  border: 1px solid red;
  width: 100%;
}
.box2 {
  box-sizing:border-box;
  border: 1px solid;
  display: inline-block;
  width: 100%;
  vertical-align: top; /* 经过尝试发现设置成其他的值也可以消除间隙,只要设置了vertical-align */
}
span {
  width: 50%;
  background-color: #ddd;
  display: inline-block;
  text-align:center;
  padding:0.5em 0;
  float:left;
}
</style>
<div class="box1">
    <div class="box2">
        <span>确定</span>
        <span>取消</span>
    </div>
</div>

加上回家之后发现font-size设置为0的方案是可行的,所以第二种修正代码如下:

<style type="text/css">
.box1 {
  border: 1px solid red;
  width: 100%;
  font-size: 0; /* 设置成0 */
}
.box2 {
  box-sizing:border-box;
  border: 1px solid;
  display: inline-block;
  width: 100%;
  font-size: 16px; /* 覆盖掉父元素的配置 */
}
span {
  width: 50%;
  background-color: #ddd;
  display: inline-block;
  text-align:center;
  padding:0.5em 0;
  float:left;
}
</style>
<div class="box1">
    <div class="box2">
        <span>确定</span>
        <span>取消</span>
    </div>
</div>

第二种方案是不理想的,不能继承全局的字体大小,所以第一种更优。
之前还搜到一个网友的方法,把内联块儿浮动之后可以消除间隙,这个是可行,但是浮动之后又变成不占用高度空间了,又得把父元素弄成内联块,这样就死循环了。

时间: 2024-12-27 10:33:06

内联块inline-block的垂直间隙问题的相关文章

web兼容学习分析笔记--块级、内联、内联块级元素

一.块级.内联.内联块级元素 (1)块级元素:block **独占一行 **可设置width,height,margin,padding **内部可包含块级或内联元素 (3)内联(行内)元素:inline **和其他inline元素同行显示 **可以设置margin-left,margin-righ,padding-left,padding-right, **无效设置widht,height,margin-top,margin-bottom,padding-top,padding-bottom

html的块级、内联、内联块级元素基础

概念 块级:block 内联:inline 内联块级:inline-block 在html元素中,元素会有display属性 display属性默认值是block,那么该元素是块级元素. display属性默认值是inline,那么该元素是内联元素. 没有元素的display默认值是inline-block. display属性值可以被设置,比如可以把块级元素div的display的值设成inline,那么它就变成了内联元素,不再独行显示. 特征 1.块级元素 独占一行. 可设置width,he

块模型、内联模型、内联块模型

块模型(block模型) 1.块模型被浏览器渲染执行的时候会独占一行空间 2.即使块模型的宽度小于页面的宽度,块模型也会独占一行,也就是说块模型独占与它的宽度有关 3.如果要为一个html控件设置高度和宽度,那么这个控件必须是块模型,加display:block变成块模型 如超链接:<a href="https://i.cnblogs.com" style="background-color: #dedef8; display:block"></a

内嵌元素、块元素、内联块的区分以及内嵌元素的问题

那么什么是块元素,什么是内嵌元素他们都有什么特征呢请看下面的代码? <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <!-- 一.块的特征 1.默认独占一行 2.没有宽度时,默认撑满一排 3.支持所有css命令 1.无默认样式: <div ><nav><section><head

18 12 27 css 盒模型使用 以及相关技巧问题 元素溢出 块元素、内联元素、内联块元素

盒子模型的实际尺寸 盒子的width和height设置的是盒子内容的宽和高,不是盒子本身的宽和高,盒子的真实尺寸计算公式如下: 盒子宽度 = width + padding左右 + border左右 盒子高度 = height + padding上下 + border上下 margin相关技巧 1.设置元素水平居中: margin:x auto;2.margin负值让元素位移及边框合并 外边距合并 外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距.合并后的外边距的高度等于两个发生合

html -- 块元素、内联元素、内联块元素 练习

html标签(也叫元素)大概可以统分为三大类,块元素.内联元素.内联块元素. 块元素 1,常用的块元素:ul.li.div.p.dl.dt.dd.h1~h6. 2,块元素支持所有的样式. 3,盒子独占据一行,即使设置了宽度. 4,如果没有设置宽度,默认宽度为父元素的100%. 内联元素 1,常用的内联元素:span.a.em.i.b.strong. 2,只支持部分样式,比如说,不支持宽.高.margin上下.padding上下. 3,盒子并在一行. 4,宽高由内容挣开. 5,如果代码换行,盒子之

HTML中块状,内联内联块元素区分

html的元素可分为三种:块状,行内,内联块 1.块状元素特点:1)一个块级元素独占一行2)元素的高度,宽度,行高以及顶部和底部边距都可以设置3)元素宽度在不设置的情况下,是它本身父容器的100%(和父元素的宽度一致)除非设定一个宽度如:div,h标签,p,form,ul,li 2.内联元素(行内元素)特点:1)和其他元素都在一行上2)元素的高度.宽度以及顶部和底部边距不可以设置3)元素的宽度就是它包含的文字或图片的宽度,不可改变如:span,a,i,em,strong 3.内联块元素就是同时具

【转】ios内联函数 inline

ios内联函数 inline 缘由 由于在学习使用UIScrollVew开发的过程中,碰到下面这个属性(设置内边距): @property(nonatomic) UIEdgeInsets scrollIndicatorInsets; // default is UIEdgeInsetsZero. adjust indicators inside 1 光看UIEdgeInsets这个类型,一时还不知道它的具体内部结构是怎么样的,于是继续点进去发现它的定义如下: typedef struct UIE

(转)内联(inline)函数与虚函数(virtual)的讨论

本文转自: http://topic.csdn.net/t/20051220/09/4469273.html 函数的inline属性是在编译时确定的, 然而,virtual的性质是在运行时确定的,这两个不能同时存在,只能有一个选择,文件中的inline关键字只是对编译器的建议,编译器是否采纳是编译器的事情. 1.内联函数是个静态行为,而虚函数是个动态行为,他们之间是有矛盾的. 2.我们之所以能看到一些象内联函数的虚函数,是因为某个函数是否是内联函数不是由我们说的算,而是由编译器决定的.我们只能向