相关文章推荐
拉风的眼镜  ·  org.apache.catalina.co ...·  1 年前    · 
打盹的酸菜鱼  ·  [BAT脚本] ...·  1 年前    · 

在HTML电子邮件的群发中,需要按照中文排版风格自动缩进两字符,很自然就想到了利用空格与CSS伪类的content属性,如下:

p:before {
    content : "\20\20";
/*第一个段落不缩进*/
p:first-child:before {
    content : "";

但很遗憾,经过测试发现,竟然一个空格都没有,在其他同学的提示下,使用”\A0”进行代替。经过测试,空格总算出现了,但是总是很难对齐,大概需要6个空格才能勉强与两个汉字相等。

在资料的翻阅中,竟然发现空格竟然有6种形式,请参见参考参考文献中的 《HTML中6种空白空格的区别》

很显然,在中文模式下,我们应该采用2个全角空格(HTML转义格式为& emsp;)或者4个半角空格(HTML转义格式为& ensp;),于是现在的CSS样式为:

p:before {
    content : "  ";

但是输出的不是空格,而是转义字符代表的字符,突然想到HTML、CSS、Javascript对Unicode字符都有自己的一套编码,详见《HTML、CSS、JS Unicode字符互转》,于是翻阅《UTF-8编码规范》,得到相应的Unicode编码2013,最后得到的样式如下:

p:before {
    content : "\2003\2003";

最后效果非常完美,如下图所示。
首行缩进解决方案

1. 为什么不采用inline-block与width

大部分的人想到的办法就是组合使用inline-block与width,如下:

p:before {
    display : inline-block;
    width : 30px;
    /*内容不可省略,否则撑不开*/
    content : "";
p:first-child:before {
    content : "";
    display : inline;

基本也能实现缩进的效果,但是2个字宽度难以计算准确,并且在字体大小发生变更时,又得重新设置缩进宽度,一句话,准确性与适应性都比较差。

2. 为什么不使用padding

这是对BOX模型理解不深刻的表现,使用padding,整个P元素都会缩进,而不是首行字符缩进。

3. 字符隐藏方案

添加2个字符的SPAN元素,并将可见性设置为“hidden”,CSS样式如下:

.p-help {
    visibility : hidden;

HTML内容如下:

<span class="p-help">空白</span> 你好!当你看到这封信时,……。

效果与准确性都不打折,但HTML的侵入性太严重了,所以也只能作为备选方案。

  1. 《HTML中6种空白空格的区别》
  2. 《UTF-8编码规范》
在HTML电子邮件的群发中,需要按照中文排版风格自动缩进两字符,很自然就想到了利用空格与CSS伪类的content属性,如下:p:before { content : "\20\20";}/*第一个段落不缩进*/p:first-child:before { content : "";}但很遗憾,经过测试发现,竟然一个空格都没有,在其他同学的提示下,使用”\A0”进行代替。经过 &lt;div style="text-indent:2em;"&gt;缩进的内容&lt;/div&gt; &lt;p style="text-indent:2em;"&gt;缩进的内容&lt;/p&gt; span标签首航缩进 &lt;span style="display:block;text-indent:2em;"&gt;缩进的