【问题标题】:CSS percentage and pixel layout combinedCSS 百分比和像素布局相结合
【发布时间】:2013-11-07 05:04:19
【问题描述】:

我真的在为此苦苦挣扎,如果有人能帮助我,我永远感谢你。

我有一个宽度为 1260 像素的 CSS DIV,称为 wrapper:

#wrapper {
width: 1260px;
}

在这个包装器 DIV 中,我有三个 DIV,分别称为 column-left、column-mid 和 column-right:

#column-left {
width: 245px;
float: left;
}

#column-mid {
width: 55.55555555555556%; /* (700px/1260px) */
float:left
margin-left: 35px;
margin-right: 35px;
}

#column-right {
width: 245px;
float:left;
}

非常简单,它是包装 div 中的三列布局。中间 div “column-mid” 设置了百分比宽度。它应该是 700px 宽,即 1260px(包装 div 的宽度)的 55.55555555555556%。

在这个分辨率下一切看起来都很好。但是,如果我将包装 div 的宽度更改为 1400px,则 column-mid div 不会扩展以正确填充空间。当它实际上应该填充 794px 时,它的等效宽度只会增加到 775px,因为 794px 是 1430px 的 55.55555555555556%

为什么 column-mid div 只能达到 775px?我想要实现的是左右列保持固定大小(245px),但中间列应相对于包装器 div 的大小增加。

【问题讨论】:

  • 那些真是奇怪的决议。您能否解释一下为什么您需要 55.555555556% 的百分比,因为对于网站而言,这些分辨率通常是不可接受的。一切都需要在没有侧滚动的情况下适合网站。使用适当的分辨率来处理适当的百分比。

标签: html css


【解决方案1】:

为什么不试试这个方法:http://jsfiddle.net/Er8uX/2/

#wrapper {
    width: 1260px;
    border: 1px solid #ddd;
    overflow: hidden;
    position: relative;
}
#column-left {
    width: 245px;
    position: absolute;
    left: 0;
    border: 1px solid #f0f;
}

#column-mid {
    margin: 0 280px;
    border: 1px solid #00f;
}

#column-right {
    width: 245px;
    border: 1px solid #f0f;
    position: absolute;
    height: 100%;
    right: 0;
}

我认为这就是你想要的,基本上:固定左右列,主要内容根据包装宽度。我使用绝对定位将它们固定到位;在右边,如果你有一列有背景并希望它一直向下运行,我使用 100% 高度,左边的高度根据内容而定。

【讨论】:

  • 这很棒。填充让我有点困惑,我习惯于用边距来创造空间。但如果它有效,它就会有效!
  • margin 也同样有效,对吧?我同意,使用margin 更正确。使用什么主要取决于你的布局是什么样的。
  • 效果非常好,但我也无法将百分比正确转换为像素。请您看看我在问题中的编辑,并就计算出了什么问题发表您的意见吗?
  • 我倾向于远离百分比;它们很难做到正确,因为你必须考虑到几乎所有涉及的元素的填充和边框。这肯定是“丢失像素”的原因。
【解决方案2】:

发生这种情况是因为您没有根据整个宽度更改 width#column-left#column-right 而只是更改 width#column-mid

对于#column-leftwidth#column-right 保持245pxwidthwidth 响应的情况,

试试这个:

#column-mid {
    width: calc(100% - 560px); //245px for #column-left, 245px for #column-right and 70px for margin
}

另一种解决方案:

试试:

#wrapper {
    display:table;
}
#column-left,#column-mid,#column-right{
    display:table-cell;
}
#column-left,#column-right{
    width: 245px;background:#f7f7f7;
}
#column-mid {
    background:#ccc;
    padding:0 35px;//for spacing
}

Here is the fiddle.

【讨论】:

  • 但我必须考虑两边的 35px 边距。那么它会是 calc(100% - 560px) 吗?
  • 请注意,这仅适用于 IE9 及更高版本:caniuse.com/calc。也就是说媒体查询是可以接受的后备方案
  • @volumeone 我已经编辑了答案。希望它能解决你的问题。
  • 新答案非常优雅。甚至可能比 kasimir 的解决方案更清洁,该解决方案也有效。不知道现在该选择哪一个!
  • 也许很优雅,但我觉得display: table 等应该用于类似表格的元素,而不是基本的站点布局/结构。此外,IE7 (browsersupport.net/CSS/display%3Atable-cell) 不支持display: table-cell,因此这不足以满足您的支持水平。
猜你喜欢
  • 1970-01-01
  • 2017-07-14
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 2015-05-04
  • 2011-12-01
相关资源
最近更新 更多