【问题标题】:Multi-column issue with horizontal scroll水平滚动的多列问题
【发布时间】:2012-05-31 03:49:09
【问题描述】:

我有一个水平溢出设置为自动的父 div(主)。然后我有一个子元素(列),上面有我的所有列属性。问题是,一旦内容超出视口,我将无法再控制右侧边距或填充,因为该列似乎只到达视口。例如,当我在“列”上放置背景颜色时,即使内容滚动得更远,背景也只会到达视口的边缘。

.main {
    overflow-x: visible;
    overflow-y: hidden;
    width: 100%;
}
.columns {
    background: red;
    column-fill: auto;
    column-width: 670px;
    column-gap: 80px;
    height: 120px;
    padding: 20px;
    width: auto;
}

<div class="main">
     <div class="columns">
           <p></p>
           <p></p>
           <p></p>
           <p></p>
           <p></p>
     </div>
</div>

这里是一个例子:http://jsfiddle.net/fyG24/

【问题讨论】:

  • 欢迎来到 Stack Overflow!我希望我的回答被证明是有用的。不要忘记,如果我的回答有用,请点赞。如果它解决了您的问题,请单击复选标记以“接受”它。
  • 而且,不要忘记,您可以根据需要对任意多个答案进行投票,但您只能接受一个。这两种行为都会提高人的声誉。

标签: css


【解决方案1】:

新答案:使用伪元素来帮助

根据您的 cmets,这里是 new the fiddle,我相信它可以满足您的需求。它添加了一个额外的div 包装.columns 我标记为.scroller,以及以下css:

html {
    height: 100%;
}

body {
    margin: 0;
    padding: 0;
    height: 100%;    
}
.main {
    background: yellow;
    overflow: hidden;
    width: 100%;
    height: 100%;
    position: relative;
}

.main:after {
    content: '';
    position: absolute;
    top: 0;
    right: 0;
    left: 0;
    height: 120px; /* match columns */
    background: red;
    z-index: 0;
}

.scroller {
    overflow-y: hidden;
    overflow-x: auto;
    height: 100%;
    position: relative;
    z-index: 1;
}


.columns {
    -webkit-column-fill: auto;
    -webkit-column-width: 300px;
    -webkit-column-gap: 40px;
    -moz-column-fill: auto;
    -moz-column-width: 300px;
    -moz-column-gap: 40px;
    height: 120px;
    padding: 0 20px;
    text-align: justify;
    width: auto;
}


.columns > p:last-of-type:after {
    content: '';
    display: block;
    width: 20px;
    height: 1px;
    float: right;
    margin-right: -20px;
    margin-top: -1px;
}

我在.main 中使用伪元素将.columns 的背景设置为您想要的显式高度,然后我还在最后一个p 中使用另一个伪元素来强制渲染最终20px 的列。无论占用多长时间或占用什么部分,它都应该起作用,并且在height: 1pxmargin-top: -1px,如果它正好位于一列文本的末尾,则不应生成新列。

原答案:移动溢出并设置右边距

要让background转移,你需要改变一些CSS,即:

.main {
    overflow: hidden;
    width: 100%;
}

.columns {
    overflow-x: auto;
}

这似乎是因为.column 背景受到.main 上的100% 宽度的限制,该宽度控制原始代码中的水平滚动条。通过将.main 完全隐藏,然后在.columns 上设置overflow-x: auto,滚动现在由.columns div 控制,并允许看到其background

要解决最右侧没有填充的问题,我唯一能想到的就是添加以下内容:

.columns > p:last-of-type {
    margin-right: 20px;
}

这会在 .columns 的直接子元素的最后一个 p 元素上放置一个右边距,然后给出我假设你想要的外观。

这里是the fiddle modified(仅在 Firefox 中测试)。

【讨论】:

  • 我想我应该在我的示例中更加具体。我无法将溢出添加到列,因为它并不总是与视口一样高,而且我需要滚动条始终位于底部。根据屏幕分辨率,我正在显示需要包含的不同数量的内容,这就是为什么我有额外的父级并设置了溢出。我也不能把填充放在最后一个 p 上,因为它并不总是只有一个 p 高。最后一列可能包含多个 p。
  • @Mike--是你所有的潜在内容都包含在.columns 内还是只是在.main 内部,甚至在.main 之外?
  • 是的,所有内容都包含在 .columns 中。但是,我并不总是希望内容在特定分辨率下根据我当前的网格大小占据视口的整个高度。所以我在 .columns 上设置了一个固定的高度,这使我无法将滚动条附加到视口的底部。
  • @Mike--好的,我更新了一个我认为符合您需求的新答案。
  • 我真的只需要最后一点,我对其进行了一些修改(不需要宽度或显示)并将其添加到 .columns:after 而不是 p:after ,它似乎工作正常。为了添加一些填充,这是一件很奇怪的事情,但它确实有效。谢谢。 .columns:after { content: ''; height: 1px; float: right; margin-right: -120px; margin-top: -1px; }
【解决方案2】:

仅通过将列 css 划分如下,我取得了更好的结果:

.columns {
    -webkit-column-fill: auto;
    -webkit-column-width: 300px;
    -webkit-column-gap: 40px;
    -moz-column-fill: auto;
    -moz-column-width: 300px;
    -moz-column-gap: 40px;
    height: 120px;
}
.columns p {
    background: red;
    height: 120px;
    padding: 0 20px;
    text-align: justify;
    width: auto;
}

【讨论】:

  • 这会为每个 p 标签添加填充,从而使每个列间隙更宽。我也不能只将它添加到最后一个 p 标签,因为它并不总是像示例中那样只有一个段落高。
猜你喜欢
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-18
相关资源
最近更新 更多