span i等行内元素之间出现的诡异间隔

最近在做的一个项目里面碰到这么一个问题:

<p>
    <span>块1</span>
    <span>块2</span>
</p>

在“块1”和“块2”之间存在着一个大概3em的空白...图就不上了

这明显不符合预期....

最后发现:当这两个span写在一行...问题就解决了...

<p>
    <span>块1</span><span>块2</span>
</p>

原因在于 行内元素之间在换行时会产生一个换行符号,然后会占用一定的宽度...

同理 i s之类的行内元素也是会存在一样的问题

并且这个宽度是小于一个空格的...


在此记录一下这个浪费了我一天时间的问题- -!歌以咏志


=======7月8日更新=======

之前的解决方法是,把所有的span都写到一行,这当然是最稳妥的做法,但是带来的麻烦肯定是有的...这意味着需要书写一行特别特别长的代码,按照代码规范来看,一行代码是最好不要超过50还是200个字符来着....(具体请参阅efe代码规范

所以有三种解决方法:

1、在js里拼接好字符串后再通过innerHtml方法显示出来

2、这个空白貌似确实就是3em大小,所以只要设置span的margin-right: -3em即可,亲测有效,唯一不爽的地方是,如果行内存在i s em之类其他的元素,每个元素都得设置一下margin-right,并不是很爽= =!

3、换行符号的宽度是由所在标签的字体大小有关,以上面的代码为例,p的font-size越大,块1与块2之间的空白就越宽,反之则越小。

所以解决方案就是:将p的font-size设为0即可。


但是,忘了是在哪里看到的一篇文章表示,有的浏览器不支持font-size: 0,目测应该是万恶的旧版IE... 所以在这种情况下,选择js拼接是比较好的,但是如果做的HTML5开发,特别是Web App开发,那移动端的浏览器肯定是支持font-size 0的啦。


=======再补充========

这种方法算是奇技淫巧....

<p>
    <span>块1</span
    ><span>块2</span
    ><span>块3</span>
</p>

<p>
    <span>块1</span><!--
--><span>块2</span><!--
--><span>块3</span>
</p>
半夜睡不着在网上看到的...这样奇奇怪怪的写法也是能够保证这三个span都在同一行里...

撒由那拉~

是的,`<span>` 是 **行内元素(inline element)**。 --- ### ✅ 什么是行内元素? HTML 元素分为几类,其中最常见的两种是: | 类型 | 特点 | |------|------| | **块级元素(block-level)** | 独占一行,可以设置宽高,如 `div`, `p`, `h1~h6` | | **行内元素(inline)** | 不独占一行,宽度由内容决定,不能直接设置宽高,如 `span`, `a`, `strong`, `em` | --- ### 🔹 `<span>` 的特点 ```html <span>这是一个 span</span> <span>这是另一个 span</span> ``` - 浏览器会将它们显示在同一行(只要空间足够) - 它不会像 `div` 那样自动换行 - 默认无法通过 CSS 设置 `width` `height` - 常用于对文本的一部分添加样式或行为 --- ### 🧪 示例对比 ```html <div>这是一个 div(块级元素)</div> <div>这是另一个 div</div> <span>这是一个 span行内元素)</span> <span>这是另一个 span</span> ``` **渲染效果:** ``` 这是一个 div(块级元素) 这是另一个 div 这是一个 span行内元素)这是另一个 span ``` --- ### 💡 如何让 span 支持宽高? 如果你需要给 `<span>` 设置宽度、高度或垂直居中等布局操作,可以通过 CSS 改变其显示方式: #### 方法 1:改为 `inline-block` ```css span { display: inline-block; width: 100px; height: 30px; background: yellow; } ``` 👉 保留“同行排列”特性,又能设置尺寸。 #### 方法 2:改为 `block` ```css span { display: block; width: 200px; height: 50px; } ``` 👉 变成块级元素,独占一行。 #### 方法 3:改为 `flex` 或 `grid` 子项 ```css .container { display: flex; } span { flex: 1; } ``` --- ### ✅ 在你项目中的应用说明 你在代码中这样写: ```vue <span style="margin-left: 10px">云类型名称</span> ``` ✅ 完全合理: - 用 `span` 包裹文字内容 - 添加 `margin-left` 实现图标与文字间距 - 因为它是行内元素,所以前面的 SVG 图标在同一行显示 但如果将来你想让这个 `span` 占据更多空间或居中对齐,建议使用: ```css .card-title span { display: inline-block; margin-left: 10px; line-height: 20px; /* 垂直居中对齐 */ } ``` --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值