css - 为什么inline-block的元素加上负边距,它和block的元素表现出不一样的行为?
天蓬老师
天蓬老师 2017-04-17 14:22:43
[HTML讨论组]

去掉idbdisplay:inline-block时有不同的表现,想不通为什么会这样,代码如下

#a {
    width: 200px;
    height: 100px;
    background: #f00;
}

#b {
    display: inline-block;
    width: 200px;
    height: 100px;
    margin-top: -131px;
    background: #0f0;
}
<body>
    <p id="a"></p>
    <p id="b"></p>
</body>

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(2)
怪我咯

这是一个涉及到linebox的baseline的问题,如果不熟悉,推荐读一下以下的博客
1.(翻译)关于Vertical-Align你需要知道的事情
2. 天镶的博客
3. 我自己写的关于baseline的博客---有点乱^_^


block元素表现的行为就不解释了,下面主要解释inline-block元素加上负边距的表现

先上我自己的代码

    .father {
        margin: 100px auto;
        width: 300px;
        height: 300px;
        background: #00ff00;
        /*font-size: 50px;  待会会修改这里*/
    }
    .child {
        width: 100px;
        height: 100px;
        background: yellow;
        display: inline-block;
        margin-top: -100px;
    }
<p class="father">
    <p class="child"></p>x
</p>


Question:为什么黄色child不会整个都出去呢?

①这个linebox的元素有黄色child(inline-block元素)和内容为x的匿名文本框。
②inline-block如果没有内容,则其baseline为其marginbox的下边缘。
③普通文本框的baseline由font-zie和line-height决定。
④linebox的baseline为各元素中最低的一条baseline,在这里是内容为x的匿名文本框的baseline。

本来高度为100px的黄色child设置margin-top为-100px,应该跑出蓝色father才对,但是inline-block元素处于linebox中,需要对齐linebox的baseline,即匿名文本框的baseline,他就跑不出绿色father的手掌心了,所以实际上黄色child上升的高度不是100px。

我们可以试着将绿色father的font-size设置为50px(代码中的注释),这样会导致linebox中匿名文本框的baseline位置降低,从而黄色child也跟降低下来进行baseline对齐。

设置font-size后的效果图


好了,啰嗦了这么久,回到我们现在的题目来看inline-block元素加上负边距的表现

1.注释掉#b的margin-top: -131px,之后的效果图

2.现在将#b的margin-top: -131px重新加上去,毫无疑问我们会看到,绿色b上移,但不会上移131px,而是小于131px,跟我们上面解释那么长的代码的原因是一样的。

可能会产生的疑问:
这里跟上面的例子有点不一样,这里没有x匿名文本框,不过有空格、换行产生的空白符文本框。


3.如果要改变绿色b上移的高度,我们只需要改变linebox的baseline就可以了,下面简单给出几种方式。

①设置绿色b父级元素(可以是body)的font-size或者line-height的值。(改变了匿名文本框的baseline)

设置body{line-height:100px;}后的效果图

可以看到绿色b下降了一点

②改变绿色inline-block元素的baseline,在绿色p中写入x字符,如<p id="b">x</p>

总结:
①关于各元素baseline位置改变的知识,在我的博客有粗略讲解,文章开头有链接
②欢迎指正错误


不知不觉写了好多,点个赞支持一下咯O(∩_∩)O哈哈~

PHP中文网

没发现有什么不同,可以给个截图之类的吗,或者加个详细一点的描述。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号