当前位置: 首页 > news >正文

内联元素空隙问题

一、内联元素空隙问题

  当我们使用"display:inline-block"把块集元素转换为内联元素时,会发现每两个内联元素之间有一定的空隙,既不是margin也不是padding,最终发现是由于换行符、制表符(tab)、空格等字符引起的。

  元素被当成行内元素排版的时候,元素之间的空白符(空格、回车换行等)都会被浏览器处理,根据white-space的处理方式(默认是normal,合并多余空白),原来HTML代码中的回车换行被转成一个空白符,所以元素之间就出现了空隙。这些元素之间的间距会随着字体的大小而变化,当行内元素font-size:16px时,间距为8px。

  从节点(node)的角度说,这个问题产生的真正原因是:当我们换行时,会产生一个文本节点,这个文本节点的内容是换行

  常见的节点以及节点类型值

元素节点              Node.ELEMENT_NODE(1)  
属性节点              Node.ATTRIBUTE_NODE(2)  
文本节点              Node.TEXT_NODE(3)  

二、总结一下解决方案:

  1、既然是由于行符、制表符(tab)、空格等字符引起,那么一种方法就是去掉内联元素之间的换行符、制表符(tab)、空格

  比如:(1)用HTML注释代替换行

<div>
    <span>内联元素</span><!-- 
     --><span>内联元素</span>
</div> 

  (2)元素开始标签紧跟结尾标签

<li> 
    one</li><li>
    two</li><li> 
    three</li> 

<li>one</li  
    ><li>two</li  
    ><li>three</li>

  缺点:这样代码很难看

  2、在父元素中设置font-size: 0,然后在子元素上重置正确的font-size

  缺点:inline-block元素必须设定字体,不然行内元素中的字体不不显示。

  3、为inline-block元素添加样式float:left,加了浮动的内联元素是不会有这个空隙的。

  4、使用margin-right负值

  缺点:元素之间间距的大小与上下文字体大小相关;并且同一大小的字体,元素之间的间距在不同浏览器下是不一样的,如:font-size:16px时,Chrome下元素之间的间距为8px,而Firefox下元素之间的间距为4px。所以不同浏览器下margin-right的负值是不一样的,因此这个方法不通用。

  注意:当marigin-right使用相对单位em来表示时,Chrome下可以正常去除间距,而Firefox下元素之间有重叠。

  其中IE6/7下始终存在1px的空隙,需要使用word-spacing减少单词间的空白(即字间隔) word-spacing:-1px;

  5、使用display:table和word-spacing(最优的方法)

.box{
    display:table;  /* 调教webkit*/
    word-spacing:-1em;/*其他浏览器*/
}

  6、设置字间距或者字符间距

  在父容器的样式中改变“word-spacing”或者“letter-spacing”为负值,一般为-5也就好的。这种办法也会消除空隙,但是还是会产生文本节点。这里要注意的是改变间距会影响后面所有的字体,所有在后面要修改回来。

 

相关文章:

  • Tomcat7 session同步集群搭建
  • 翻译--Thinking in React
  • Uuid, BOSObjectType, BosUUid 区别
  • NSTimer学习笔记
  • input 的multiple 上传多个文件
  • 安防IP Camera固件分析
  • java汇总
  • zookeeper
  • js练习题
  • Oracle 索引扫描的五种类型
  • 《Netty官方文档》开发者指南
  • 忘记cacti密码的解决方法
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Xcode 各版本简介
  • VMware Ubuntu NAT 不能上网
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Android框架之Volley
  • Mithril.js 入门介绍
  • vue:响应原理
  • 复习Javascript专题(四):js中的深浅拷贝
  • 观察者模式实现非直接耦合
  • 目录与文件属性:编写ls
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 与 ConTeXt MkIV 官方文档的接驳
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​ubuntu下安装kvm虚拟机
  • #考研#计算机文化知识1(局域网及网络互联)
  • (09)Hive——CTE 公共表达式
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (未解决)macOS matplotlib 中文是方框
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (正则)提取页面里的img标签
  • (转)ORM
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .NET Remoting学习笔记(三)信道
  • .Net 应用中使用dot trace进行性能诊断
  • /bin/bash^M: bad interpreter: No such file or directory
  • @KafkaListener注解详解(一)| 常用参数详解
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • [ IO.File ] FileSystemWatcher
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [android] 请求码和结果码的作用
  • [BUUCTF 2018]Online Tool
  • [BZOJ 4598][Sdoi2016]模式字符串
  • [C++]C++类基本语法
  • [DEBUG] spring boot-如何处理链接中的空格等特殊字符
  • [Geek Challenge 2023] web题解
  • [Hive] CTE 通用表达式 WITH关键字
  • [Linux] Boot分区满了的处理方法 The volume boot has only 0 bytes disk space remaining
  • [MYSQL]mysql常用操作命令
  • [noip2015 d1t2] 信息传递