Page 147 - css揭秘
P. 147

<!-- 如果你这样写,天崩地裂万劫不复 -->                               HTML
                                                  <dt>Name:</dt>
                                                  <dd>Lea Verou<br /></dd>
                                                  ...

                                                  然后,对所有的 <dt> 和 <dd> 元素应用 display:inline; 样式,基本
                                              上就大功告成了。当然,这种方法不仅在可维护性方面是一种糟糕的实践,
                                              而且污染了结构层的代码。只要能使用生成性内容来添加换行,并以此取代
                                              <br> 元素,那么问题就可以解决了!但这好像做不到,对吧?又或者,这
                                              其实可行的?
                                                                                                    ①
                                                  实际上,有一个 Unicode 字符是专门代表换行符的:0x000A 。在 CSS 中,
                                              这个字符可以写作 "\000A",或简化为 "\A"。我们可以用它来作为 ::after
                                              伪元素的内容,并将其添加到每个 <dd> 元素的尾部,代码如下所示:

                                                  dd::after {
                                                      content: "\A";
                                                  }

                                                  这段代码看起来是可以奏效的,但如果我们亲手试一试,就会发现结
                                              果令人失望:跟图 5-5 相比没有任何变化。不过,这并不表示我们的思路
                                              不对,只是表示我们还忽略了什么。这段 CSS 代码所做的其实只相当于在
                                              HTML 结构中的所有关闭标签 </dd> 之前添加换行符。还记得在 HTML 代
                                              码中输入换行符会发生什么吗?默认情况下,这些换行符会与相邻的其他空
                                              白符进行合并。空白符合并通常是一件非常好的事情,否则我们就得把整个
                                              HTML 文档的源代码整理进一行里面!不过,有时候我们希望保留源代码中
                                              的这些空白符和换行,代码块就是最典型的例子。还记得我们在这种场景下
                                              通常会怎么做吗?我们会用到 white-space: pre;。这里也可以这么做,但
                                              只对伪元素生成的换行符设置这个样式。
                                                  我们只有一个换行符,并不用担心有其他空白符被保留下来(因为这
                                              里根本就没有),因此任何 pre 值都可以起作用(pre、pre-line 或 pre-
                                              wrap)。我推荐 pre,因为它的浏览器支持程度最好。把这些思路整理成代码:

                                                  dt, dd { display: inline; }

                                                  dd {
                                                      margin: 0;
                                                      font-weight: bold;
                                                  }

                                                  dd::after {
                                                      content: "\A";


                                              ①  从技术上来说,0x000A 相当于“换行”字符,也就是我们在 JavaScript 中常写的 "\n"。另
                                                外还有一个“回车”字符(即 JavaScript 中的 "\r",CSS 中的 "\D"),不过我们在现代浏览
                                                器中已经不需要用到这个字符了。



                  116
                        第 5 章 字体排印






          ඀ࠡ  JOEC
   142   143   144   145   146   147   148   149   150   151   152