CSS-解决内联元素由于空白字符带来的间距问题

概要:

1. 在项目中遇到两个行内元素之间有间隔的情况。
	<div>
		<style>
	      a {
	        background-color: red;
	      }
	    </style>
		<a>123</a>
		<a>234</a>
	</div>
网上搜了搜,发现是空白字符的问题。
2. 如何解决呢?
1. 使用flex布局

这个我最先是在《CSS权威设计》上的flex那一章看到的。书上说可以用来做空白压缩,当时没懂,看到这里就了然了。

<div style="display: flex">
	<style>
      a {
        background-color: red;
      }
    </style>
	<a>123</a>
	<a>234</a>
</div>
2. 不使用空格
1. 不写空格

我不写空格,不换行,那么不就没有空白的填充字符了吗?
但是这么写,代码风格什么的就不谈了。
万一情况复杂一点,万一你没有注释,后续维护的人不了解你的苦心直接一个换行,那不就又废了。

	<div>
		<style>
	      a {
	        background-color: red;
	      }
	    </style>
		<a>123</a><a>234</a>
	</div>
2. 用注释

比直接写在一起好。

	<div>
		<style>
	      a {
	        background-color: red;
	      }
	    </style>
		<a>123</a><!--
		--><a>234</a>
	</div>
3. 用结束标签

不要尝试用开始标签,那个不符合html语法的…

	<div>
		<style>
	      a {
	        background-color: red;
	      }
	    </style>
		<a>123</a
		><a>234</a>
	</div>
3. 设置外层div元素的字体大小为0,a标签的字体大小独立设置。

(刚开始我a标签的font-size还给了个!important,防止内联优先级太高,后来发现首先判定a标签自身的规则,然后才轮到继承自div规则…)

	<div style="font-size: 0px">
	    <style>
	        a {
	          background-color: red;
	          font-size: 16px;
	        }
	      </style>
	    <a>123</a>
	    <a>234</a>
	  </div>
4.设置外层div元素的letter-spacing: -5px,a标签的字体间隔独立设置。
	这样设置不大好,因为这个值是看出来的,在复杂情况下不是那么准。
	如果设置这里的div的font-size:200px,那么我们可以发现两个a标签之间的距离明显大于5px。
	然后我也发现,letter-spacing无论多小,两个a标签是不会重复的,那么这种方法可能需要设置一个很小的letter-spacing来时应各种情况,或者看使用场景再具体设置。
	<div style="letter-spacing: 0px">
	    <style>
	        a {
	          background-color: red;
	          font-size: 16px;
	          letter-spacing: 0;
	        }
	      </style>
	    <a>123</a>
	    <a>234</a>
	  </div>
5. 使用float
	使用float脱离文档流,当然就不会出现空白字符的干扰问题。
	当然float需要注意父元素高度塌陷。
	<div >
	    <style>
	        a {
	          background-color: red;
	          font-size: 16px;
	          float: left
	      }
	      </style>
	    <a>123</a>
	    <a>234</a>
	  </div>
题外话:解决高度塌陷
  1. 加一个div
  2. 使用after
    本质上都是加一个元素,然后清除浮动。
	<div >
		<style>
			a {
			background-color: red;
			font-size: 16px;
			float: left
			}
			div::after {
			content: "";
			display: block;
			clear: both;
			}
		</style>
		<a>123</a>
		<a>234</a>
	</div>
总结

最后在项目中,我还是选择了flex方法,因为情形较复杂。字体大小是更外层的元素设置的,所以font-size、letter-spacing方法直接放弃,不用空格个人不建议,float相比flex需要清除浮动,最后就挑了个flex。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值