首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CSS自动排出2列文本

使用CSS自动排出2列文本
EN

Stack Overflow用户
提问于 2010-06-10 04:27:06
回答 8查看 112.3K关注 0票数 66

我有类似于下面的代码:

代码语言:javascript
复制
<p>This is paragraph 1. Lorem ipsum ... </p>
<p>This is paragraph 2. Lorem ipsum ... </p>
<p>This is paragraph 3. Lorem ipsum ... </p>
<p>This is paragraph 4. Lorem ipsum ... </p>
<p>This is paragraph 5. Lorem ipsum ... </p>
<p>This is paragraph 6. Lorem ipsum ... </p>

如果可能的话,我想在没有标记的情况下,使这个文本排成两列(1-3在左边,4-6在右边)。我之所以犹豫要不要使用<div>添加一个列,是因为这个文本是由客户端通过所见即所得编辑器输入的,所以我注入的任何元素都可能在稍后或莫名其妙地被杀死。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-06-15 00:40:28

使用jQuery的

创建第二列,并将需要的元素移到其中。

代码语言:javascript
复制
<script type="text/javascript">
  $(document).ready(function() {
    var size = $("#data > p").size();
 $(".Column1 > p").each(function(index){
  if (index >= size/2){
   $(this).appendTo("#Column2");
  }
 });
  });
</script>

<div id="data" class="Column1" style="float:left;width:300px;">
<!--   data Start -->
<p>This is paragraph 1. Lorem ipsum ... </p>
<p>This is paragraph 2. Lorem ipsum ... </p>
<p>This is paragraph 3. Lorem ipsum ... </p>
<p>This is paragraph 4. Lorem ipsum ... </p>
<p>This is paragraph 5. Lorem ipsum ... </p>
<p>This is paragraph 6. Lorem ipsum ... </p>
<!--   data Emd-->
</div>
<div id="Column2" style="float:left;width:300px;"></div>

更新:

或,因为现在的要求是让它们的大小相等。我建议使用预先构建的jQuery插件:Columnizer jQuery Plugin

http://jsfiddle.net/dPUmZ/1/

票数 35
EN

Stack Overflow用户

发布于 2010-06-15 04:59:22

使用CSS3

代码语言:javascript
复制
.container {
   -webkit-column-count: 2;
      -moz-column-count: 2;
           column-count: 2;

   -webkit-column-gap: 20px;
      -moz-column-gap: 20px;
           column-gap: 20px;
}

浏览器支持

(-webkit-)

  • IE (-moz-)

  • Safari (-webkit-)

  • Opera (-webkit-)

  • Chrome 4.0+ 10.0+
  • Firefox 2.0+ 3.1+ 15.0+
票数 144
EN

Stack Overflow用户

发布于 2010-06-15 00:15:34

目前,只有在CSS/HTML中,才能自动浮动彼此相邻的两列。有两种方法可以实现这一点:

方法1:当没有连续的文本,只有大量不相关的段落时:

将所有段落向左浮动,使它们的宽度为包含元素的一半,如果可能,设置固定的高度。

代码语言:javascript
复制
<div id="container">
  <p>This is paragraph 1. Lorem ipsum ... </p>
  <p>This is paragraph 2. Lorem ipsum ... </p>
  <p>This is paragraph 3. Lorem ipsum ... </p>
  <p>This is paragraph 4. Lorem ipsum ... </p>
  <p>This is paragraph 5. Lorem ipsum ... </p>
  <p>This is paragraph 6. Lorem ipsum ... </p>
</div>

#container { width: 600px; }
#container p { float: left; width: 300px; /* possibly also height: 300px; */ }

您还可以在段落之间插入较清晰的div,以避免使用固定的高度。如果你想要两列,在两段和两段之间添加一个更清晰的-div。这将对齐下两个段落的顶部,使其看起来更整洁。示例:

代码语言:javascript
复制
<div id="container">
  <p>This is paragraph 1. Lorem ipsum ... </p>
  <p>This is paragraph 2. Lorem ipsum ... </p>
  <div class="clear"></div>
  <p>This is paragraph 3. Lorem ipsum ... </p>
  <p>This is paragraph 4. Lorem ipsum ... </p>
  <div class="clear"></div>
  <p>This is paragraph 5. Lorem ipsum ... </p>
  <p>This is paragraph 6. Lorem ipsum ... </p>
</div>

/* in addition to the above CSS */
.clear { clear: both; height: 0; }

方法2:当文本连续时

更高级,但这是可以做到的。

代码语言:javascript
复制
<div id="container">
  <div class="contentColumn">
    <p>This is paragraph 1. Lorem ipsum ... </p>
    <p>This is paragraph 2. Lorem ipsum ... </p>
    <p>This is paragraph 3. Lorem ipsum ... </p>
  </div>
  <div class="contentColumn">
    <p>This is paragraph 4. Lorem ipsum ... </p>
    <p>This is paragraph 5. Lorem ipsum ... </p>
    <p>This is paragraph 6. Lorem ipsum ... </p>
  </div>
</div>

.contentColumn { width: 300px; float: left; }
#container { width: 600px; }

当涉及到易用性时:对于非技术客户端来说,这些都不是真正容易的。您可以尝试向他/她解释如何正确执行此操作,并告诉他/她为什么。如果客户端将来要通过WYSIWYG编辑器更新网页,那么学习非常基础的HTML不失为一个好主意。

或者,您可以尝试实现一些Javascript解决方案,该解决方案计算段落的总数,将段落一分为二,然后创建列。对于那些禁用了JavaScript的人来说,这也会优雅地降级。第三个选项是让所有这些拆分为列的操作在服务器端发生(如果这是一个选项)。

(方法3: CSS3多列布局模块)

您可能读到过CSS3 way of doing it,但对于生产网站来说,它并不实用。至少现在还不是。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3009670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档