CSS white-space

快来打我* 2024-05-24 04:09 133阅读 0赞

white-space

white-space 属性决定了如何处理一个元素中的 white space.

  1. MDN 文档 中指明了在 HTML 中一共有 5 种字符为 white space(空白符, 下面出现 white space 的地方都会以空白符代替)

    • \t (TAB) (\u0009): 制表符
    • \n (LF) (\u000A): 换行符
    • \r (CR) (\u000D): 回车符(Carriage Return)
    • ' ' (SPACE) (\u0020): 空格
    • FF \u000C: 换页, Form Feed 的缩写. CSDN 引用 wikipedia 的话可以理解为这个符号强制打印机离开当前页而从下一页的顶部继续
  2. 使用下面的代码展示在浏览器这些字符的展示情况

    • 你 好


      你 好


  1. 好</p>
  2. <p>


你 好

  1. * ![请添加图片描述][watermark_type_d3F5LXplbmhlaQ_shadow_50_text_Q1NETiBAKO-_o2_vv6MpIC4geiBaWg_size_20_color_FFFFFF_t_70_g_se_x_16]
  2. * 可以看到不同浏览器对换页这个符号的展示是不同的, 目前我也没有遇到过. 所以剩下的内容都不会包括 `FF`
  1. 这个属性指明了两件事情

    • 是否合并空白符, 以及如何合并
    • 是否在自动换行(soft-wrap)的时候换行

属性值

  1. 支持 inherit, initial, revert, unset 四种全局变量值

    • 如果某个元素不写 white-space, 那么其将自动继承父元素值
  2. 关键字值

    • normal: 连续的空白符会被合并. 换行符被当作空白符处理. 文字在必要时换行以填充行盒子.
    • nowrap: 合并空白符的规则和 normal 一样, 但是文本内的换行无效.
    • pre: 连续的空白符被保留. 只在遇到换行符或者 <br> 元素时才换行.
    • pre-wrap: 连续的空白符被保留. 在遇到换行符或者 <br> 元素时, 或者为了填充行盒子才会换行
    • pre-line: 连续的空白符被合并. 在遇到换行符或者 <br> 元素时, 或者为了填充行盒子才会换行
    • break-spaces: 与 pre-wrap 的行为相同, 除了

      • 任何保留的空白符都会占据空间, 即便在行尾
      • 任何保留的空白符后都可能换行, 包括在空白符之间
      • 这样保留的空间会占据空间不会挂起, 会影响盒子的内在尺寸 (min-contentmax-content)

例子

  1. 先看代码


    • 月光如流水 一般,
      静静地泻在这一片叶子和花上。
      薄薄的青雾浮起在荷塘里。
      叶子和花仿佛在牛乳中洗过一样;
      又像笼着轻纱的梦。虽然是满月,
      天上却有一层淡淡的云,所以不能朗照;
      但我以为这恰是到了好处——酣眠固不可少,
      小睡也别有风味的。
    • VS Code 查找 \n 并开启正则匹配模式, 就能看到空白符了

      • 请添加图片描述
    • .box {

      width: 15em;
      border: 1px solid #111;
      }

    • normal 的话很合理, 所有的换行符都被当作空格处理, 流水 后连续的空格被合并. ?但是空格符并没有作为一个字符作为宽度计算, 因为第一行只有 13 个文字加上 1 个逗号, 很明显, 既然宽度是 15 字宽, 那么第 15 个字就是浏览器为了适应行盒子而加上的换行符吧
      请添加图片描述
    • ❓提问: 为什么每行文字前用来缩进的空格没有了?

      • 答案: 因为每行文字后面的换行符被当作空格, 和下一行文字前面的空格形成了连续的空格, 然后被合并成一个空格了.?
  2. nowrap


    • 月光如流水 一般,
      静静地泻在这一片叶子和花上。
      薄薄的青雾浮起在荷塘里。
      叶子和花仿佛在牛乳中洗过一样;
      又像笼着轻纱的梦。虽然是满月,
      天上却有一层淡淡的云,所以不能朗照;
      但我以为这恰是到了好处——酣眠固不可少,
      小睡也别有风味的。
    • .box {

      width: 15em;
      border: 1px solid #111;
      }
      .box2 {

      white-space: nowrap;
      }

    • 连续的空白符被合并, 换行符被当作空白符, 文本内的所有换行均无效
    • 请添加图片描述
  3. pre


    • 月光如流水 一般,
      静静地泻在这一片叶子和花上。
      薄薄的青雾浮起在荷塘里。
      叶子和花仿佛在牛乳中洗过一样;
      又像笼着轻纱的梦。虽然是满月,
      天上却有一层淡淡的云,所以不能朗照;
      但我以为这恰是到了好处——酣眠固不可少,
      小睡也别有风味的。
    • .box {

      width: 15em;
      border: 1px solid #111;
      }
      .box3 {

      white-space: pre;
      }

    • 效果:

      • 连续的空白符被保留;
      • 文本不会为了填充行盒子而换行, 所以超出边界
      • ❓提问: 为什么整段文字的开头和结尾也有空行?

        • 答案: 因为 <div> 后有个换行, <div> 前也有个换行. ?
      • 由于换行符不会再被当作空白符, 连续空白符也不会合并, 所以每行文本开头就出现了用于缩进的空白
    • 请添加图片描述
  4. pre-wrap

    • 效果

      • 空白符被保留
      • 遇到换行符就换行
      • 为了填充行盒子而换行
    • 请添加图片描述
  5. pre-line

    • 效果

      • 空白符被合并 ?只有这里和 pre-wrap 不同
      • 遇到换行符就换行
      • 为了填充行盒子而换行
        请添加图片描述
  6. break-space

    • 为了对比效果, 在荷塘里后面加了很多空格

    • 月光如流水 一般,
      静静地泻在这一片叶子和花上。
      薄薄的青雾浮起在荷塘里。
      叶子和花仿佛在牛乳中洗过一样;
      又像笼着轻纱的梦。虽然是满月,
      天上却有一层淡淡的云,所以不能朗照;
      但我以为这恰是到了好处——酣眠固不可少,
      小睡也别有风味的。
    • 效果

      • 正如文档所说, 即便连续的空格在行尾, 也不会被合并, 甚至可能被换行.
    • 请添加图片描述
    • 理解对 min-content 的影响

      • 先来看下面的内容

        • 我是谁我在哪
        • .box6 {

          width: min-content;
          white-space: break-spaces;
          }

        • 请添加图片描述
        • 可以看到每个字后面都出现了断行, 这时因为 min-content 对于文本内容来说, 将会在一切可以断行的地方断行, 所以整个宽度就和这段文字种最长的单词一样, 由于汉字的特殊性(每个汉字后都可以断行), 就出现了这样的效果
        • 为什么不像上面一样是一字一断呢? 因为文字中有标点, 这种符号浏览器是不会将其渲染到行首的,所以只能留在行尾
      • 请添加图片描述
        还是挺不好理解的,也可能会有错误的地方,欢迎指正~谢谢你看到这里

发表评论

表情:
评论列表 (有 0 条评论,133人围观)

还没有评论,来说两句吧...

相关阅读