CSS必学:元素之间的空白与行内块的幽灵空白问题

这篇具有很好参考价值的文章主要介绍了CSS必学:元素之间的空白与行内块的幽灵空白问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:WangMin
格言:努力做好自己喜欢的每一件事
CSDN原创文章
博客地址 👉 WangMin

我们在开发的过程中,难免会出现一些难以预料的问题。那么其中,CSS空白现象就是非常常见的问题之一。虽然它已经被发现很久,但仍然有许多新手和经验丰富的开发者们忽略了它对页面布局的影响。我们一起来看看吧!

CSS必学:元素之间的空白与行内块的幽灵空白问题

元素之间空白的产生及解决方案

在学习元素之间空白的产生之前,我们需要知道块级元素与行内元素的区别

块级元素是会独占一行的,按垂直方向排列。

CSS必学:元素之间的空白与行内块的幽灵空白问题

行内元素不会占据整行,在一条直线上排列,都是同一行,按水平方向排列

CSS必学:元素之间的空白与行内块的幽灵空白问题

除了块级元素和行内元素,还有一种行内块元素,其实质上也是行内元素,所以多个行内块元素之间也会出现空白间隔的问题。img元素就是典型的行内块元素,这里就不举例了。

从上面我们可以明显的看出在没有设置margin的情况下,多个块级元素之间没有空白,而是从上到下紧挨这排列的

同样,行内元素span 也没有设置margin,但是多个行内元素之间存在空白部分,这是为什么呢?

因为在html中行内元素间的换行符/空格是有意义的,浏览器会在渲染时将行内元素之间的换行符/空格转换为一定像素的空白。

那知道了这个原因,就应该很容易地解决这个问题了,我们只需要在写代码的时候,将换行符删掉不就可以了吗?来试一试吧

案例1

<div class="box">
     <span class="span1">行内元素span</span><span class="span2">行内元素span</span><span class="span3">行内元素span</span>
</div>
<style>
    .box{
         width:400px;
         height: 100px;
         border:3px solid #fa0b0b75;
         background:#ccc;       
    }
   span{
        color:#fff;
   }
  .span1{
         background:bisque;
   }
  .span2{
         background:goldenrod;
   }
  .span3{
        background:yellowgreen;
   }
</style>

案例效果如下:

CSS必学:元素之间的空白与行内块的幽灵空白问题

这种方式虽然可以解决元素之间的空白问题,但是当页面中存在3个及以上的行内元素或者行内块元素时,这样删掉换行符会让代码看起来不清晰,很杂乱,不利于后期维护和修改,所以这种解决方式是不推荐的。

上面提到换行符/空格是有意义的,也就是说换行符/空格是属于文字,是文字的话,就可以利用font-size来控制它的大小。来试一试吧

案例2

<div class="box">
     <span class="span1">行内元素span</span>
     <span class="span2">行内元素span</span>
     <span class="span3">行内元素span</span>
</div>
<style>
    .box{
         width:400px;
         height: 100px;
         border:3px solid #fa0b0b75;
         background:#ccc;
         font-size:0;
    }
   span{
        color:#fff;
   }
  .span1{
         background:bisque;
   }
  .span2{
         background:goldenrod;
   }
  .span3{
        background:yellowgreen;
   }
</style>

案例效果如下:

CSS必学:元素之间的空白与行内块的幽灵空白问题

你会发现span元素消失了,那是因为span的高度与宽度是由里面的内容撑开的,span继承了父元素div的 font-size:0属性,所以里面的内容看不见,span 也就无法呈现在页面上。如果想要span显示,就要在span元素上设置想要的字体大小。

<div class="box">
     <span class="span1">行内元素span</span>
     <span class="span2">行内元素span</span>
     <span class="span3">行内元素span</span>
</div>
<style>
    .box{
         width:400px;
         height: 100px;
         border:3px solid #fa0b0b75;
         background:#ccc;
         font-size:0;
    }
   span{
        color:#fff;
        font-size:16px;
   }
  .span1{
         background:bisque;
   }
  .span2{
         background:goldenrod;
   }
  .span3{
        background:yellowgreen;
   }
</style>

这里得到的效果就和案例1的是一样的。

这种解决方案就是给父元素设置font-size:0;在给需要显示文字的元素单独设置文字大小。建议使用这种方式来解决元素之间空白问题。

还有一种方式就是给元素设置浮动,但是注意要给父元素清除浮动防止,父元素高度塌陷。

案例3

<div class="box">
     <img src="./img/5.png"/>
     <img src="./img/5.png"/>
     <img src="./img/5.png"/>
</div>
<style>
    .box{
         width:400px;
         height: 100px;
         border:3px solid #fa0b0b75;
         background:#ccc;
         overflow: hidden;//防止父元素高度塌陷
    }
   img{
         float: left;
         width: 100px;
   }
</style>

案例效果对比如下:

设置浮动之前:

CSS必学:元素之间的空白与行内块的幽灵空白问题

设置浮动之前:

CSS必学:元素之间的空白与行内块的幽灵空白问题

关于元素浮动导致的父元素塌陷的问题,可以参考【精选】CSS 浮动和清除浮动方法总结-CSDN博客这篇文章。

解决方案总结

1、去掉换行符和空格(不推荐)

2、给父元素设置font-size:0;在给需要显示文字的元素单独设置文字大小。(推荐)

3、给行内元素或者行内块元素设置浮动,但是要注意给父元素清除浮动,防止父元素高度塌陷。

行内块的幽灵空白问题

可能有很多人不知道行内块的幽灵空白是什么?其实这是在开发中常常会遇到的问题。你可能就遇到过,只是不清楚是什么问题,下面这张图让你明白什么是行内块的幽灵空白。这里就用典型的行内块元素img来举例。

CSS必学:元素之间的空白与行内块的幽灵空白问题

上图红框中就是行内块产生的幽灵空白部分,那它是怎么产生的呢?

当在一个没有设置高度的块元素中添加了一个行内块元素时,幽灵空白部分就会产生。其实这么说也不是很准确。

大家都知道其实图片垂直对齐方式默认是以文字的基线对齐的,那么这就和字母代表x和g就很大的关系了。
CSS必学:元素之间的空白与行内块的幽灵空白问题

从上图中可以看到字母x以基线对齐的标准字母,而字母g的下半部分是超出基线的位置的,为了字母g可以完整的出现,页面中会预留出一点位置,幽灵空白部分部分就产生了。

字母x和g代表的是字母中的两种呈现方式。

关于文字对齐这里就不多说了,后面我会详细的大家说的。

我们怎么来解决这个问题呢?前面提到图片垂直对齐方式默认是以文字的基线对齐的,那改变它的垂直对齐方式是否可以解决这个问题呢?改变图片的对齐方式我们可以用vertical-align这个属性,来试一试吧!

案例4

<div class="box">
      <img src="./img/5.png"/>xy
</div>
<style>
    .box{
          width:400px;
          border:1px solid #fa0b0b75;
          background:blanchedalmond;
        }
     img{
          vertical-align:bottom
        }
</style>

案例效果如下:

CSS必学:元素之间的空白与行内块的幽灵空白问题

从上图我们可以看到幽灵空白部分消失了,所以通过给图片改变其默认的垂直对齐方式是可以解决这个问题的。具体设置哪一种垂直对齐方式要看网页设计需求,这是一种比较推荐的解决方案。vertical-align属性的取值如下:

属性 属性值 含义
vertical-align baseline (默认值) 与文字基线对齐
vertical-align bottom 与文字底部对齐
vertical-align middle 与文字中部对齐
vertical-align top 与文字顶部对齐

其实也可以直接将行内块元素转换为块元素,撑开父元素就不会存在幽灵空白部分,但前提是父元素中只有行内元素,没有其他内容,这种方式才起作用。

案例5

<div class="box">
      <img src="./img/5.png"/>
</div>
<style>
    .box{
          width:400px;
          border:1px solid #fa0b0b75;
          background:blanchedalmond;
        }
     img{
          display: block;
        }
</style>

案例效果如下:

CSS必学:元素之间的空白与行内块的幽灵空白问题

上面提到图片的垂直对齐方式于文字对齐有关系,那么我们可不可以通过设置文字大小来解决这个问题呢?

其实道理跟案例2是一样的,同样给父元素设置font-size:0,如果图片后面有内容,可以在需要显示文字的元素单独设置文字大小,这里就不举例子了。

解决方案总结

1、给行内块元素设置vertical-align,但是注意属性值不能为baseline,值可以是bottom、 middle、top,根据需求而定。

2、若父元素只有一张图片,没有其他内容,将图片设置为块元素,即给图片添加display: block属性。

3、给父元素设置font-size:0,如果图片后面有内容,可以在需要显示文字的元素单独设置文字大小。


以上仅是个人见解,若有不足之处欢迎在下方评论指出,那就先分享到这里!! 😄 后续继续更新!!文章来源地址https://www.toymoban.com/news/detail-741793.html

到了这里,关于CSS必学:元素之间的空白与行内块的幽灵空白问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【CSS 10】浮动实例 处理布局流 display: inline-block 行内块元素 水平显示列表项 align 对齐

    浮动实例 网格/等宽的框 通过使用 float 属性,可以轻松地并排浮动内容框 display: inline-block 与 display: inline 相比,主要区别在于 display: inline-block 允许在元素上设置宽度和高度 同样,如果设置了 display: inline-block,将保留上下外边距/内边距,而 display: inline 则不会 与 display: b

    2024年02月11日
    浏览(40)
  • 解决 Blazor 中因标签换行导致的行内元素空隙问题

    实践过不同前端框架的朋友应该都知道,对于同一个样式,在不同框架上的表现都会有不同,时时需要做“适配”,在 Blazor 上也不例外。在做 Ant Design Blazor 时就深有体会,因为我们是同步官方的样式,他们的样式只考虑了React 上的实现,除非有人专门提 PR,否则都不会特别

    2024年02月14日
    浏览(34)
  • css的gap设置元素之间的间隔

    在felx布局中可以使用gap来设置元素之间的间隔;  效果:

    2024年02月07日
    浏览(30)
  • CSS中如何实现元素之间的间距(Margin)合并效果?

    前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而又亲切的学习平台。在这个

    2024年02月10日
    浏览(21)
  • 块元素和行内元素及其元素转换

    怎么区分块元素、行内元素以及行内块元素呢,以及他们之间怎么相互转换呢? 特点: 独占一行 可以对其设置 宽、高、内外边距 宽度默认为容器的100% 布局时,块元素可以包含块元素和行内元素 常见的块元素: 注: 文字类的元素内不能使用块元素,例如:p、h1~h6. 特点:

    2024年02月03日
    浏览(37)
  • HTML-基础知识-排版标签,语义化标签,块级元素行内元素,文本标签(二)

    注意: 不允许互相嵌套。 注意: p标签中不可以有 div p h1~h6 标签默认效果不重要,语义最重要。 作用: 提高代码的可读性 有利于SEO(搜索引擎优化) 方便设备解析(屏幕阅读器,盲人阅读器) 块级元素特点 独占一行 行内元素特点 不独占一行 规则 块级元素中能写块级元

    2024年02月03日
    浏览(43)
  • 行内样式css不生效

    场景: 别人的代码里有样式是写在行内的,且设置了display:block;没有生效,也没有被覆盖样式,很奇怪。 此时display:block;就没生效; 后来发现:只要css的key和value不在一行,那么就不生效。如果要换行,也要保证key和value在一行,然后再换行。

    2024年01月25日
    浏览(28)
  • 前端小案例3:Flex弹性布局行内元素宽度自适应

    项目背景:需要在一行上展示空调设备的三个模式(制冷、制热、通风)或者两个模式(制冷、制热);因为不同产品的模式数量不同,因此需要让模式按钮的宽度自适应,有两个模式时,单个模式宽度占据50%;三模式时,宽度占据33.3%。 可以使用Grid和Flex 弹性布局实现。

    2024年02月04日
    浏览(33)
  • [element-ui] el-table 行与行之间设置间隔, 行内的渐变效果

    设置行与行之间的间距 设置行内颜色渐变,并实现隔行颜色不一样 参考: 实现element table组件内行与行之间设置间隙效果以及行内的渐变效果以及各种问题

    2024年02月14日
    浏览(26)
  • 前端必学的CSS3波浪效果演示

    使用 translateX 和 translateZ 属性创建波浪效果: 使用场景: 适用于需要在X轴上平移和在Z轴上应用3D变换的波浪效果。 可以用于创建具有起伏效果的海浪、水面波纹等效果。 优点: 通过3D变换,可以实现更加真实的波浪效果。 可以通过调整 translateX 和 translateZ 的值来控制波浪

    2024年02月02日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包