如何使用CSS在HTML文档中插入换行符

如何使用CSS在HTML文档中插入换行符

How to insert line breaks in HTML documents using CSS

我正在写一个Web服务,我想将数据作为XHTML返回。 因为它是数据,而不是标记,所以我想保持它非常整洁-没有多余的 s或 s。 但是,为了方便开发人员,我还想使返回的数据在浏览器中合理可读。 为此,我正在考虑使用CSS的一种好方法。

我特别想做的是在某些地方插入换行符。 我知道display: block,但是在我现在要处理的情况下它并不能真正起作用-具有字段的form。 像这样:

1
2
3
4
5
6
<form>
  Thingy 1: <input class="a" type="text" name="one" />
  Thingy 2: <input class="a" type="text" name="two" />
  Thingy 3: <input class="b" type="checkbox" name="three" />
  Thingy 4: <input class="b" type="checkbox" name="four" />
</form>

我希望它可以呈现,以便每个标签显示在与相应输入字段相同的行上。 我已经试过了:

1
input.a:after { content:"\\a" }

但这似乎无济于事。


最好将所有元素包装在label元素中,然后将css应用于标签。 :before和:after伪类不能以一致的方式完全支持。

标签具有很多优点,包括增加的可访问性(在多个级别上)等等。

1
2
3
<label>
    Thingy one: <input type="text" name="one">;
</label>

然后在标签元素上使用CSS ...

1
label {display:block;clear:both;}

表单控件是由浏览器专门处理的,因此很多事情不一定能正常工作。其中之一就是生成的内容-它不适用于表单控件。而是将标签包裹在中并使用label:before { content: '\\a' ; white-space: pre; }。您也可以通过浮动所有内容并将clear: left添加到元素来完成此操作。


看起来您想在列表中显示一堆表单项,对吗?嗯...如果只有那些HTML规范人员认为包含标记来处理项目列表...

我建议您这样设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<form>
 
<ul>

   
<li>
<label>Thingy 1:</label><input class="a" type="text" name="one" />
</li>

   
<li>
<label>Thingy 1:</label><input class="a" type="text" name="one" />
</li>

 
</ul>

</form>

然后,CSS变得容易得多。


以下内容将为您提供换行符。但是,这也会在前面增加多余的空间...您必须通过删除制表符来弄乱源代码缩进。

1
form { white-space: pre }

1
2
3
4
5
6
7
8
9
<style type="text/css">
label, input { float: left; }
label { clear:left; }
</style>

<form>
    <label>thing 1:</label><input />
    <label>thing 2:</label><input />
</form>

1
2
3
4
5
6
<form>
   <label>Thingy 1: <input class="a" type="text" name="one" /></label>
   <label>Thingy 2: <input class="a" type="text" name="two" /></label>
   <label>Thingy 3: <input class="b" type="checkbox" name="three" /></label>
   <label>Thingy 4: <input class="b" type="checkbox" name="four" /></label>
</form>

和以下CSS

1
form label { display: block; }

一种选择是在XML中指定XSLT模板,(某些)浏览器将处理该XSLT模板,从而允许您包含不影响Web服务使用者的带有标记,CSS,颜色等的表示形式。

在XHTML中,您只需在CSS元素周围添加一些填充,例如

格式input.a {margin-bottom:1em}


秘诀是将整个小东西,标签和小部件包围在一个范围内,该范围内的类负责阻止并清除:

的CSS

1
2
3
4
5
6
<style type="text/css">
  .lb {
    display:block;
    clear:both;
  }
</style>

的HTML

1
2
3
4
5
6
<form>
  <span class="lb">Thingy 1: <input class="a" type="text" name="one" /></span>
  <span class="lb">Thingy 2: <input class="a" type="text" name="two" /></span>
  <span class="lb">Thingy 3: <input class="b" type="checkbox" name="three" /></span>
  <span class="lb">Thingy 4: <input class="b" type="checkbox" name="four" /></span>
</form>

javascript选项使事情变得更加复杂。按照Jon Galloway或daniels0xff的建议进行操作。


CSS clear元素可能是您要寻找的换行符。
沿途:

#login form input {
clear: both;
}

将确保没有其他浮动元素留在输入字段的两侧。

参考


我同意约翰·米利金(John Millikin)的观点。您可以在定义了CSS类的每行周围添加标记或其他内容,然后根据需要使它们显示:block。我可以想到的唯一另一种方法是使成为内联块,并使它们发出"非常大"的padding-right,这将使内联内容变小。

即使这样,最好的选择还是将数据按逻辑分组在标记(或类似标记)中,以指示该数据属于同一类(然后由CSS进行定位)。


使用javascript。如果您使用的是jQuery库,请尝试如下操作:

1
$("input.a").after("<br/>")

或您需要的任何东西。


推荐阅读