空白符对HTML结构的影响与解决方案
何为空白符?
空白符: 空格、制表符、换行符
注意:浏览器在解析HTML时会把所有空白符合并成一个空格
空白符对HTML结构的影响
HTML5中<textarea>标签placeholder无法正确显示
不好的结构造成意外的结果:
标签换行了:
<!--文本域结束标签 换行导致placeholder无法正确表示-->
<textarea id="description" name="description" rows="5" cols="30" wrap="physical" placeholder="这是一个多行输入框,输入您的个人描述">
</textarea>
标签之间有空格:
<!--文本域标签之间有空格,导致placeholder无法正确表示-->
<textarea id="description" name="description" rows="5" cols="30" wrap="physical" placeholder="这是一个多行输入框,输入您的个人描述"> </textarea>
结果:一片空白

原因:因为表单区域中包含了空白符(空格、制表符、换行符),textarea内的空白符被认为是内容,阻止了占位符文本的显示。
正确的操作:
<!--文本域开始标签与结束标签紧挨着,placeholder正确表示-->
<textarea id="description" name="description" rows="5" cols="30" wrap="physical" placeholder="这是一个多行输入框,输入您的个人描述"></textarea>
结果:占位了!!!

inline-block的默认空白间距
默认情况下,inline-block元素之间大约有“4px”的间距(不同浏览器会有不同的大小)。
<ul>
<li>item1</li>
<li>item2</li>
<li>item3</li>
<li>item4</li>
<li>item5</li>
</ul>
*{
margin: 0;
padding: 0;
}
ul {
list-style: none outside none;
padding: 10px;
background: green;
text-align: center;
}
ul li {
display: inline-block;
*display: inline;
zoom: 1;
background: orange;
padding: 5px;
}

- 原因:标签之间的空白符造成的。
- 解决:此时可以通过改变HTML的结构,让上一个li的结束标签与下一个li开始相连,去除空白符。
<ul>
<li>item1</li
><li>item2</li
><li>item3</li
><li>item4</li
><li>item5</li>
</ul>

你可以点击这里狠狠尝试demo
当然,空白符也是字符,去除它们也可以通过CSS样式letter-spacing、word-spacing来设定。详情见:如何解决inline-block元素的空白间距
除了相邻之间的Inline-block的空白间距外,像下面这种情况,也会产生空白符
<div class="container">
<img class="img" src="data:images/mod.jpg" alt="">
</div>
.container {
background: #fc0d0d;
}
.img {
display: inline-block;
width: 100%;
}

- 结果:容器没有显式设置高度与宽度,但是总会比它的子元素img高出几个像素(图中小熊头像下面的红色部分)
- 解决:把img的display设为block或者上面介绍的方法去除空白符的影响。
存在于文本中的空白符
如下面的换行符,和空格。
<div>They can stay 72-hours
within the Shandong province after they have entered China via the Qingdao International Airport.</div>
结果:浏览器解析的时候只保留单词之间的空白符被合并为一个空格。
They can stay 72-hours within the Shandong province after they have entered China via the Qingdao International Airport.
可以通过CSS属性white-space对文本中的空白符进行处理
white-space:normal | pre | nowrap | pre-wrap | pre-line | inherit
normal: 合并空白符,允许自动换行
nowrap: 合并空白符,不允许自动换行
pre-line: 合并空白符(不包括换行符),允许自动换行
pre: 不合并空白符,不允许自动换行
pre-wrap: 不合并空白符,允许自动换行(在pre基础上,保留自动换行)
详情见:demo
补充一点:CSS3新增了两个换行属性word-wrap和word-break。
长文本段落换行:
在Firefox则没有 问题,我尝试用white-spacing属性合并空白符,但是还有有一个空格,如果存在换行的话。


我看了别人的网站,它这里也存在换行了,但是浏览器没有解析它的空格,也没有看到它的代码里有对p作特殊的处理。

所以只能像前面一样改变HTML结构,去除它的空格。但是把所有文本放在一行,得铺在美国去。。。
解决方案:WebStorm可以设置自动换行——File-setting-Editor-General-Soft wrap(勾选Use soft wrap in editor),虽然视觉上是换行,浏览器解析的时候是按同一行文本解析的,所以不会在浏览器上产生空格。


总结
- 一般把元素设为inline-block是为了与其他元素在同一行排列,又或是为了能够应用text-align这样的属性,如果没这些必要,又想要对元素显式设置宽高,就
直接设置display: block。
- 那什么时候适合用inline-block呢?
- float元素脱离了文档流,会对其周围的元素造成影响,而inline-block不会有这些问题。
- 想要通过设置父容器text-align:center让元素居中,这显然用浮动无法做到
- 使元素垂直居中,inline-block元素是沿着默认的基线对齐,可以通过vertical属性设置这个默认基线。
参考资料
- MDN:white-space
- 小火柴的蓝色理想:深入理解CSS中的空白符和换行
空白符对HTML结构的影响与解决方案的更多相关文章
- lvarchar类型对表结构变更影响
informix中lvarchar类型设计用于存储中度长度的字符数据(短的常用varchar类型.特别长的字符可用text类型).其默认长度2048byte,最大长度32739byte,是一种可变长度 ...
- 关于masm中OFFSET伪指令对结构的影响
在masm中,如果offset修饰全局变量,则他返回的是变量的相对于其所在段的偏移,并且offset不能修饰局部变量哦. 若offset修饰的是文字常量则将被忽略: VAL = 1000h mov e ...
- JSONModel对架构的影响及解决方案
越来越多的项目使用CocoaPods,使用CocoaPods很有可能会用过JSONModel. JSONModel是个很强大的库,只要根据JSON定义好对应的类并继承JSONModel,就可以把JSO ...
- MySQL 事务 是对数据进行操作,对结构没有影响,比如创建表、删除表,事务就不起作用
- Spring Boot 2.4版本前后的分组配置变化及对多环境配置结构的影响
前几天在<Spring Boot 2.4 对多环境配置的支持更改>一文中,给大家讲解了Spring Boot 2.4版本对多环境配置的配置变化.除此之外,还有一些其他配置变化,所以今天我们 ...
- 应用程序框架实战三十八:项目示例VS解决方案的创建(一)
进行项目开发的第一步,是创建出适合自己团队习惯的VS解决方案,虽然我已经提供了项目示例,但毕竟是我创建的,你直接使用可能并不合适,另外你如果尝试模仿重新创建该示例,中间可能碰到各种障碍,特别是项目间的 ...
- VS解决方案创建
示例VS解决方案的创建(一) 进行项目开发的第一步,是创建出适合自己团队习惯的VS解决方案,虽然我已经提供了项目示例,但毕竟是我创建的,你直接使用可能并不合适,另外你如果尝试模仿重新创建该示例,中 ...
- Windows结构化异常处理浅析
近期一直被一个问题所困扰,就是写出来的程序老是出现无故崩溃,有的地方自己知道可能有问题,但是有的地方又根本没办法知道有什么问题.更苦逼的事情是,我们的程序是需要7x24服务客户,虽然不需要实时精准零差 ...
- C 关于二叉查找树的回顾,并简述结构接口设计
前言 最经想改写C用的配置读取接口, 准备采用hash或二叉树提到原先用的链表,提高查找效率.就回顾一下二叉树,这里分享一下二叉查找树,代码很精简的, 适合学习运用二叉树查找. 需要基础 1.具备C ...
随机推荐
- 963 AlvinZH打怪刷经验(背包DP大作战R)
963 AlvinZH打怪刷经验 思路 这不是一道普通的01背包题.大家仔细观察数据的范围,可以发现如果按常理来的话,背包容量特别大,你也会TLE. 方法一:考虑01背包的一个常数优化----作用甚微 ...
- 搭建gogs
https://blog.csdn.net/hwm_life/article/details/82969005 服务器环境 CentOS 7 64位 安装Gogs所需的其它环境 需要安装的依赖有Ngi ...
- JAVA普通内部类的用法
内部类顾名思义就是定义在一个类的内部 内部类又有普通内部类.方法和域内的内部类.匿名内部类.嵌套内部类 普通内部类的基础用法 class MyClass{ class InnerClass1{ pub ...
- ONTAK2010 Peaks加强版(离线&在线)
题面 弱化版:luogu 强制在线版:bzoj 题解 本题有两种解法 离线算法:线段树合并 先看一道简单题[USACO18JAN]MooTube 本题就是在此基础上求第\(k\)高的点 首先把询问和路 ...
- Flutter Navigator 跳转
1,routes 静注册,使用 跳转 Navigator.pushNamed(context, "/main"); 2,静态跳转及销毁当前页面使用 Navigator.pushNa ...
- django-获取当前url和ip
1.添加'django.template.context_processors.request', 2.在模板的html中输入 {{ request.path}}{{ request.get_host ...
- PIE SDK 距离分类和最大似然分类
1.算法功能简介 监督分类,也叫训练场地法.训练分类法,是遥感图像分类的一种,用被确认类别的样本像元去识别其他未知类别像元的过程.监督分类算法有平行算法.平行六面体法.最小距离法.最大似然法.马 ...
- R 安装包遇到问题(一) loadNamespace()里算'rJava'时.onLoad失败了 rJava 包的安装与载入
> library(xlsx) Error: package or namespace load failed for ‘xlsx’: loadNamespace()里算'rJava'时.onL ...
- 【测试的艺术】+测试分析&测试计划+模板
一.项目概述 1.1.项目背景 #就是说一下为什么要做这个项目 1.2.项目目标 #这个项目最终要达到的目标是什么 二.项目整体分析 #项目分为哪些部分?各部分之间的关联是什么?各部分的目标是什么? ...
- sort sorted() reverse() reversed() 的区别1
sort()是可变对象(字典.列表)的方法,无参数,无返回值,sort()会改变可变对象,因此无需返回值.sort()方法是可变对象独有的方法或者属性,而作为不可变对象如元组.字符串是不具有这些方法的 ...