目录
一、介绍
小小的换行,隐藏着很多小知识点困扰着我们,尤其是在学习css、markdown或其他文本编辑器(Microsoft Word、csdn的富文本编辑器等)的使用时。这里会讲解一部分相关内容。一般文章都由段落组成,段落必换行,且有一些格式存在(比如段落前后有外边距Margin,还有缩进等等格式);段落里也可以换行,但是没有格式应用,就是简单的换行,仍然处于段落中。
二、换行
2.1、软换行、硬换行
换行分为软换行和硬换行。
软换行就是段落中简单的换行,文本仍然处于段落中。软换行有自动换行和手动换行两种方式,自动换行涉及到line wrap和word wrap的概念。自动换行就是当文本内容超出允许范围内时会自动换行,合适自动换行涉及到word wrap,即如何换行。word wrap有很多算法,一般时尽可能的在word(单词)之间,而不是将换行插入到word中来换行(这种可能仍然存在)。
硬换行,为段落间的换行,换行会被应用一种格式,比如上下外边距、首行缩进。
软换行会自动换行,有时手动换行是多余的,所有一般我们键盘上的enter键会产生一个硬换行(不是必定成立,请看3.1小结)。
下面展示软换行和硬换行在html中的不同和实现。
2.2、line wrap和word wrap
上面已经谈到过了,line wrap就是自动换行,文本内容超出允许范围时会自动换行。如何换行由word wrap算法实现,对于英文文章来说,一般时在完整单词后,或者标点符号后换行,甚至可以在单词中的“-”后换行(比如hyper-text)。这些可以换行的地方被称为breaking point(换行点)。
但是对于中文word wrap就有点不同了,它的break point 在汉字前或汉字后,而且有点标点符号不允许称为breaking point,比如dash(破折号)和ellipsis(省略号)。而且中文环境下,有些换行是不被期待的,比如名字被换行了,一些组合字被换行了。(在我看来名字换不换行是无所谓的。。)
对于日文、韩文,和中文的情况一致,被统称为CJK。
三、使用
概念就这么点,但是不知道概念,使用时就会晕头转向。下面讲解各种运用,但是不是对所有情况都有效,就是个大致的效果。
3.1、文本编辑器的使用
对于wps(类似microsoft word),我不太精通,测试了下,貌似不分soft和hard换行,像是只有soft换行。notepad和notepad++也是一样的,不分软硬换行,只用soft换行。这些编辑器的内容被贴到区分软硬换行的编辑器中会被当做一个段落处理(此时使用软换行),除非内容之间被空行隔绝,才会有多个段落(此时使用硬换行)。
有些编辑器区分软硬换行,如csdn的富文本编辑器;markdown编写不区分,但是使用上会接触到这个概念;html和css上更是使用到了这些概念。
现在讲讲csdn的富文本编辑器。该编辑器默认enter键为硬换行,shift+enter才是软换行。

如果查看源代码,会发现软换行是通过<br/>实现的,硬换行是通过<p/>实现的,这里不给出图示了。
现在来看看Markdown怎么产生软硬换行,先看图示:

使用的是有道云笔记自带的markdwon编辑器编写的,解释如图所示。最终+,markdown生成的html还是通过<br/>实现软换行,<p/>实现硬换行。
3.2、html中的换行
上面已经提到过了,<br/>代表软换行,文本依旧在一个段落中;<p>代表硬换行,文本被分割成不同段落。
这里提一个有意思的元素,我们知道html编写过程中,多个换行、多个空格或者多个换行与空格都会被当做一个空格处理。但是在pre元素中的空格是换行会被保存。貌似也不存在软硬换行的区分。。

有些字符不能作为换行点(breaking point),比如html实体

之前说了,line wrap自动换行涉及到word wrap,word wrap模式的设置比较复杂,涉及到了css样式word-wrap、word-break的使用,会在另一篇博客中讲解:css之word-break及word-wrap(overflow-wrap)。
参考
https://en.wikipedia.org/wiki/Line_wrap_and_word_wrap
https://en.wikipedia.org/wiki/Help:Line-break_handling
本文详细解析软换行和硬换行的区别,包括自动换行的linewrap和wordwrap概念,以及它们在文本编辑器、Markdown和HTML中的具体应用。
1811

被折叠的 条评论
为什么被折叠?



