2014-11-21 65 views
0

我试图在水平滚动div中显示图像列表(等高)。这很有效,但是当我想要有一个固定的图像时 - 一个“封面”图像出现在容器内部最左侧,布局会被搞砸。如何在固定项目旁边显示水平滚动列表?

下面是我的工作的CSS和HTML。 如果您运行该代码段,您可以看到列表跳转到下一行,而不是保持与“封面”图像相邻并且水平滚动。这里是的jsfiddle - http://jsfiddle.net/6x66dLdy/

我可以使用JavaScript通过设置#list宽度编程方式解决这个问题,但我想单独如果可能的话CSS来做到这一点。

#container { 
 
    height: 120px; 
 
    background: #ccccff; 
 
} 
 

 
#cover { 
 
    height: 100px; 
 
    margin: 10px; 
 
    display: inline-block; 
 
    vertical-align: top; 
 
    position: relative; 
 
} 
 

 
#cover img { 
 
    border: 2px solid #cc0000; 
 
} 
 

 
#list { 
 
    overflow-x: scroll; 
 
    overflow-y: hidden; 
 
    white-space: nowrap; 
 
    height: 100px; 
 
    margin: 10px 0; 
 
    display: inline-block; 
 
} 
 

 
.item { 
 
    height: 80px; 
 
    margin: 10px 5px; 
 
    display: inline-block; 
 
}
<div id="container"> 
 
    <div id="cover"> 
 
     <img src="http://placehold.it/160x100"/> 
 
    </div> 
 
    <div id="list"> 
 
     <div class="item"> 
 
      <img src="http://placehold.it/120x80"/> 
 
     </div> 
 
     <div class="item"> 
 
      <img src="http://placehold.it/60x80"/> 
 
     </div> 
 
     <div class="item"> 
 
      <img src="http://placehold.it/120x80"/> 
 
     </div> 
 
     <div class="item"> 
 
      <img src="http://placehold.it/120x80"/> 
 
     </div> 
 
     <div class="item"> 
 
      <img src="http://placehold.it/120x80"/> 
 
     </div> 
 
    </div> 
 
</div>

+0

为什么在css中没有#list {width:100px;}? – ashkufaraz 2014-11-21 12:16:17

+1

你必须为你的'div'和容器提供宽度。像这样:http://jsfiddle.net/abhitalks/6x66dLdy/1/ – Abhitalks 2014-11-21 12:18:09

+0

@abhitalks:谢谢!请加上'calc'作为你的答案。这是我大致期待的。 – 2014-11-21 12:33:16

回答

1

发生这种情况是因为您没有指定宽度。您必须为内部div s和容器提供宽度。建议给容器明确的宽度,因为你可以安全地给儿童分配宽度。

在您使用的情况下,您必须计算您的div#cover的宽度是多么安全,然后使用CSS calc来计算要分配给列表的宽度的其余部分。另外,请记住你拥有的利润。

相关CSS

width: calc(100% - 240px); 

你的小提琴http://jsfiddle.net/abhitalks/6x66dLdy/1

它始终是最好指定一个合适的box-sizing。因此,将其包含在CSS的顶部:

* { box-sizing: border-box; } 

+0

你能告诉我为什么'* {box-sizing:border-box;在这种情况下''是有用的吗?对于其他人:如果您正在编写** less **而不是** css **,请使用'width:〜“calc(100% - 240px)”;'替代。 – 2014-11-21 17:38:26

+0

这是为了确保盒子模型上的跨浏览器一致性。 'border-box'将确保在计算宽度时考虑内容,填充和边框大小。所以你只需要担心利润率而没有别的。更多信息在这里:https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing?redirectlocale=en-US&redirectslug=CSS%2Fbox-sizing – Abhitalks 2014-11-21 18:19:10

0

测试此

http://jsfiddle.net/6x66dLdy/3/

#container { 
    height: 120px; 
    background: #ccccff; 
    width:1000px; 
} 

#cover { 
    height: 100px; 
    margin: 10px; 
    display: inline-block; 
    vertical-align: top; 
    position: relative; 
    width:200px; 
    float:left; 
} 

#cover img { 
    border: 2px solid #cc0000; 
} 

#list { 
    overflow-x: scroll; 
    overflow-y: hidden; 
    white-space: nowrap; 
    height: 100px; 
    margin: 10px 0; 
    width:600px; 
    float:left 
} 

.item { 
    height: 80px; 
    margin: 10px 5px; 
    display: inline-block; 
} 
+0

我无法修复'#list'宽度。它不适用于不同的屏幕尺寸。 – 2014-11-21 12:34:34

1

浮法#cover左和从#list除去display: inline-block

这将允许封面图像和列表中的图像为任何未知宽度。像其他答案一样在容器上设置固定宽度将不会允许这样做。

小提琴:http://jsfiddle.net/6x66dLdy/4/

#container { 
    height: 120px; 
    background: #ccccff; 
} 

#cover { 
    height: 100px; 
    margin: 10px; 
    float: left; 
    vertical-align: top; 
    position: relative; 
} 

#cover img { 
    border: 2px solid #cc0000; 
} 

#list { 
    overflow-x: scroll; 
    overflow-y: hidden; 
    white-space: nowrap; 
    height: 100px; 
    margin: 10px 0; 
} 

.item { 
    height: 80px; 
    margin: 10px 5px; 
    display: inline-block; 
}