测试时候遇到一个非常离谱的Bug:
一个view设置了marglin-left属性,输入中文或中英文混合都正常显示,唯独遇到纯英文文本时候就失效,如图:
一开始以为又是模拟器的bug,真机调试发现也是这样,不光是微信如此,抖音和快手也是同样情况,于是确定了是我代码的问题。
所以为什么纯英文会显示异常,中文或者中英文混合就没事呢?打开浏览器一顿猛搜,终于搞明白了:
css有一个属性word-break,也就是断行规则,他的默认值是normal,这个normal具体规则如下:
·空格和标点符号:大多数语言(包括英语、中文等)的单词或短语之间通常有空格或标点符号作为自然断行点。浏览器在换行时会优先考虑这些位置。
·连字符:对于跨行的长单词,如果单词内包含连字符(如英语中的复合词),浏览器可能会在该连字符处进行断行。
·避免单词内断行:默认情况下,浏览器会尽量避免在单词内部进行断行,除非绝对必要(如单词太长而无法放在当前行内)。
·CJK(中文、日文、韩文)文本:对于CJK文本,由于单词之间通常没有空格分隔,浏览器会根据字符的显示宽度和容器的边界来决定是否换行,但通常不会在字符内部断开。
·长字符串和URL:对于非常长的字符串(如连续的文本行或URL地址),如果它们超出了容器的边界,浏览器可能会尝试在适当的位置进行断行,但这可能不总是符合文本的语义结构。
这就是问题的所在了,输入一串英文字母的时候,被默认当成一个单词,导致没有换行
解决方法:
将word-break属性设置为:break-all。
word-break:break-all;
不管你哪国的语言,只要超出容器宽度统统给我换行!