【问题标题】:Creating multiple column layout with div's使用 div 创建多列布局
【发布时间】:2014-01-22 10:04:25
【问题描述】:

我想向我的父 div 之一添加多列布局以显示小部件。我从左、中、右 3 列开始。

我尝试使用以下方法使列彼此相邻显示:

display: inline-block;
vertical-align: top;

但它不起作用JS Fiddle

我也试过用:

float: left;

但还是没有成功JS Fiddle

我通过使用:

display: table-cell

现在我的问题是,当使用最后一种方法时,它会设置一个最小宽度,之后它不会缩小任何尺寸,并且它会在页面底部添加一个我不想要的滚动条。

我想知道为什么前两种方法在我的场景中不起作用,因为我在 SO 上找到了其他答案,表明前两种方法是可能的解决方案。

CSS

#left_widget_column {
border: 0px;
margin: 10px 65% 10px 2%;
padding: 0px;
width: 32%;
}

#middle_widget_column {
border: 0px;
margin: 10px 34% 10px 34%;
padding: 0px;
width: 31%;
}

#right_widget_column {
border: 0px;
margin: 10px 2% 10px 65%;
padding: 0px;
width: 32%;
}

HTML

<div id="left_widget_column">
<h2>Widget 1:</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis suscipit venenatis tempor. Mauris sit amet consequat dui.</p>
</div>

<div id="middle_widget_column">
<h2>Widget 2:</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis suscipit venenatis tempor. Mauris sit amet consequat dui.</p>
</div>

<div id="right_widget_column">
<h2>Widget 3:</h2>
<p>Fusce felis nisl, egestas a dolor sit amet, mollis cursus diam. Nulla malesuada ullamcorper ante. Vestibulum pulvinar, metus a congue eleifend, magna eros mattis lectus, sed vestibulum neque augue vel risus.</p>
</div>

【问题讨论】:

  • 不要使用这些奇怪的边距:jsfiddle.net/Whysg/5
  • @dfsq 我在列之间需要更多的空白空间,这就是我有边距的原因。

标签: css html layout multiple-columns


【解决方案1】:

你不应该使用:

margin: 10px 34% 10px 34%;

http://jsfiddle.net/Whysg/2/

当使用float:left 前一个 div 中的下一个 div 位置时,不需要边距或 ...

【讨论】:

  • 这个解决方案的问题是我需要更多的列之间以及左右边缘的空白,这就是边距的原因。
  • 没问题,减小宽度并添加margin,但不使用 34%,只使用 10px 和 2%...检查:jsfiddle.net/Whysg/6
  • css 边距计算基于前一个 div 而不是 windows 边缘
  • 你的小提琴还是有点奇怪,因为第三列跳到了底部。我需要它来缩放到窗口大小。我了解当屏幕尺寸小于 50 像素或 60 像素时列是否会向下跳,但仅在窗口大约 500 像素向上时才会向上跳。
  • 使用边距没有任何作用,您必须完全删除它才能使缩放正常工作。我认为边距以某种方式搞砸了对齐,但是为什么。 +1 为您提供所有帮助。谢谢
【解决方案2】:

你不应该使用 3 个 id:1 个类的布局就足够了。例如,您可以稍后添加 id 以在 js 中使用它。

DEMO

.col {
    box-sizing: border-box;
    float: left;
    width: 32%;
    padding: 10px;
    margin-left: 2%;
}
.col:first-child {
    margin-left: 0;
}

【讨论】:

  • 我使用了 id,因为列的宽度并不总是相同,而且它使用 jQueryUI。现在将测试您的解决方案。
  • 所以,请记住列的宽度不应大于容器的宽度。 col1.width + col2.width + col3.width !> container.width;不要忘记边距。 (我添加了 box-sizing: border-box; 所以填充算作列的宽度)
  • 是的,如果你计算我的边距和宽度,你会发现它是 99%,因为父 div 有 1px 边框。
【解决方案3】:

你有没有想过用花车代替?删除边距。

#left_widget_column {
border: 0px;
padding: 0px;
float: left;
    width: 32%;
}

#middle_widget_column {
border: 0px;
padding: 0px;
width: 32%;
   float: left;
}

#right_widget_column {
border: 0px;
padding: 0px;
width: 32%;
    float: right;
}

在这里观看直播:http://jsfiddle.net/Whysg/3/

【讨论】:

  • 如果您查看我的问题,您会发现我已尝试在方法 2 上使用 float: left;。我还需要列之间和边缘之间的空格。
猜你喜欢
  • 1970-01-01
  • 2011-10-05
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
相关资源
最近更新 更多