当一个块状元素设置了宽度,并且其中的文本是根据接口返回的数据进行填充和展示时,因为传输的数据有可能是不可靠的,所以在展示时必须要考虑数据的极限值,进行各种奇怪数据以及数据极限值的展示,考虑此情况下页面是否会存在布局错乱的问题,这个称为破坏性测试。
一、一般而言,考虑应用场景的处理方式通常有:
- 强制文本一行展示,超出一行范围的文本用省略号表示;
- 设置文本一行或多行(规定行)展示,超出规定范围的文本直接隐藏;
- 自动换行,过长英文单词进行强制断行;
二、简单归纳下css关于设置换行的样式属性:
1.white-space: normal | pre | nowrap | pre-wrap | pre-line | inherit;
white-space 属性设置如何处理元素内的空白
设值说明:
normal 默认。空白会被浏览器忽略。
pre 空白会被浏览器保留。其行为方式类似 HTML 中的 pre 标签。
nowrap文本不会换行,文本会在在同一行上继续,直到遇到 br 标签为止。
pre-wrap 保留空白符序列,但是正常地进行换行。
pre-line 合并空白符序列,但是保留换行符。
inherit 规定应该从父元素继承 white-space 属性的值。
2.word-wrap: normal|break-word;
word-wrap 属性用来标明是否允许浏览器在单词内进行断句,这是为了防止当一个字符串太长而找不到它的自然断句点时产生溢出现象。
设置说明:
normal: 只在允许的断字点换行(浏览器保持默认处理)
break-word:在长单词或URL地址内部进行换行
3.word-break: normal|break-all|keep-all;
word-break 属性用来标明怎么样进行单词内的断句。
设值说明:
normal:使用浏览器默认的换行规则。
break-all:允许在单词内换行
keep-all:只能在半角空格或连字符处换行
三、相应场景处理方式的CSS样式
- 超出文本部分隐藏
.nowrap{
overflow:hidden;
}
- 允许单词内断句,首先会尝试挪到下一行,看看下一行的宽度够不够,不够的话就进行单词内的断句
.breakword{
word-wrap: break-word;
}
- 断句时,不会把长单词挪到下一行,而是直接进行单词内的断句
.breakAll{
word-break:break-all;
}
- 强制不换行,超出文本以省略号显示
.ellipsis{
white-space:nowrap;
overflow:hidden;
text-overflow: ellipsis;
}
四、完整示例代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>换行与不换行演示</title>
<style>
.word{
background:#E4FFE9;
width:250px;
margin:50px auto;
padding:20px;
font-family:"microsoft yahei";
}
/* 强制不换行 */
.nowrap{
overflow:hidden;
}
/* 允许单词内断句,首先会尝试挪到下一行,看看下一行的宽度够不够,
不够的话就进行单词内的断句 */
.breakword{
word-wrap: break-word;
}
/* 断句时,不会把长单词挪到下一行,而是直接进行单词内的断句 */
.breakAll{
word-break:break-all;
}
/* 超出部分显示省略号 */
.ellipsis{
white-space:nowrap;
overflow:hidden;
text-overflow: ellipsis;
}
</style>
</head>
<body>
<div class = "word">
<p>1.一行,超出文本隐藏:</p>
<p class = "nowrap">wordwrap:breakword;absavhsafhuafdfbjhfvsalguvfaihuivfsab</p>
<p>2.进行长单词判断再单词内断句换行:</p>
<p class = "breakword">wordwrap:break-word;absavhsafhuafdfbjhfvsalguvfaihui</p>
<p>3.直接进行单词内断句换行:</p>
<p class = "breakAll">wordwrap:break-word;absavhsafhuafdfbjhfvsalguvfaihuivf</p>
<p>4.默认情况下的自动换行:</p>
<p class = "normal">wordwrap:breakword;absavhsafhuafdfbjhfvsalguvfaihuivfsa</p>
<p>5.强制一行,超出文本省略号显示:</p>
<p class = "ellipsis">wordwrap:breakword;absavhsafhuafdfbjhfvsalguvfaihuivfsab</p>
</div>
</body>
</html>
效果图如下: