5

我要疯了,试图让以下布局正确:

  • 左 div 具有固定宽度(可能多个 div 并排放置)
  • 具有自动宽度的中心 div(占用剩余空间)
  • 具有固定宽度的右 div(可能多个 div 并排放置)
  • 中心 div 和第一个邻居之间应该存在一个边距,无论是左边还是右边

HTML

<div class="container">
    <div class="all left">
        Left1
    </div>
    <div class="all left">
        Left2
    </div>
    <div class="all center">
        Center
    </div>
    <div class="all right">
        Right1
    </div>
    <div class="all right">
        Right2
    </div>
</div>

CSS

.container {
    display: table;
    position: relative;
    width: 100%;
    height: 100px;
    border-spacing: 5px;
}

.all {
    display: table-cell;
    border: 1px solid #333;
    margin: 5px;
}

.left {
    width: 45px;
}

.right {
    width: 45px;
}

.center {
    width: auto;
}

小提琴

http://jsfiddle.net/ozrentk/VdryG/3/

但是,无论我尝试什么(例如放入border-spacing: 0px左或右 div margin: 0、、边框折叠),我的所有边距最终都相同。

为了简化它,我想要这个:

+--------------------------------------------------------------+
|+-----++-----+  +------------------------------++-----++-----+|
||     ||     |  |                              ||     ||     ||
||     ||     |  |                              ||     ||     ||
||     ||     |  |                              ||     ||     ||
||     ||     |  |                              ||     ||     ||
||     ||     |  |                              ||     ||     ||
||     ||     |  |                              ||     ||     ||
||     ||     |  |                              ||     ||     ||
||     ||     |  |                              ||     ||     ||
|+-----++-----+  +------------------------------++-----++-----+|
+--------------------------------------------------------------+

但目前我有这个:

+--------------------------------------------------------------+
|                                                              |
| +----+  +----+  +--------------------------+  +----+  +----+ |
| |    |  |    |  |                          |  |    |  |    | |
| |    |  |    |  |                          |  |    |  |    | |
| |    |  |    |  |                          |  |    |  |    | |
| |    |  |    |  |                          |  |    |  |    | |
| |    |  |    |  |                          |  |    |  |    | |
| |    |  |    |  |                          |  |    |  |    | |
| +----+  +----+  +--------------------------+  +----+  +----+ |
|                                                              |
+--------------------------------------------------------------+

如何控制此布局中的各个边距?

附言

  • 我不想要将浮点数与非浮点数混合的解决方案,因为它最终会出现布局问题,请参阅此
  • 我不想要使用 css calc 的解决方案,因为它是实验性的
  • 我不想要 JS 解决方案,因为我认为 CSS 应该用于这种布局并且会导致闪烁;此外,用户可以禁用 JS
4

3 回答 3

2

作为不需要更改整个布局模型的快速解决方案,您只需在表格结构中添加一个不可见的分隔符,就像在这个编辑过的小提琴中一样:

hr {
    display: table-cell;
    width: 10px;
    visibility: hidden;
}
于 2013-07-26T22:24:18.603 回答
1

使用原始标记的纯 CSS 解决方案

table-cell显示类型无法识别边距,这就是为什么设置左右边距无法获得所需结果的原因。

一种解决方法是display: block.center元素上指定:

.container {
    display: table;
    width: 100%;
    height: 100px;
    border-spacing: 5px;
}

.all {
    display: table-cell;
    border: 1px solid #333;
}

.left {
    width: 45px;
}

.right {
    width: 45px;
}

.center {
    width: auto;
    display: block;
    margin: 0 10px 0 10px;
    border: 1px solid red;
    height: inherit;
}

小提琴:http: //jsfiddle.net/audetwebdesign/GNVfG/

一个限制是父块.container需要一个明确的高度,以便所有.container子元素都可以继承或计算相同的高度。

感谢Ilya Streltsyn提出display: block解决边距问题的建议。

于 2013-07-26T22:26:31.523 回答
0

你是这个意思吗?

.center{
       margin-left: 10px;
    }

通过在中心添加左边距或右边距,您将获得所需的独特间隙

于 2013-07-26T23:11:48.963 回答