构建水平滑块 - 垂直浮动的 div

Posted

技术标签:

【中文标题】构建水平滑块 - 垂直浮动的 div【英文标题】:Building horizontal slider - divs floating vertically 【发布时间】:2015-01-06 02:48:49 【问题描述】:

我正在尝试使用溢出构建简单的水平图像滑块:隐藏和浮动 div。然而,我无法将它们水平浮动 - 它们总是以垂直顺序出现。我从网上尝试了很多例子,但是我仍然不知道我错在哪里。

HTML:

<div id="slidingWindow">
    <div class="slidingSection clearfix">Something something</div>
    <div class="slidingSection clearfix">Again something</div>
</div>

CSS:

#slidingWindow 
overflow:hidden;
width: 470px;
height: 500px;
background-color: red;


.slidingSection 
margin: 5px;
background-color: green;
width: 470px;
height: 400px;
float: left;


.clearfix:after  
content: "."; 
visibility: hidden; 
display: block; 
height: 0; 
clear: both;

这个 JSFiddle 包含我的问题的最简单示例: http://jsfiddle.net/v4udd47t/

【问题讨论】:

【参考方案1】:

如果您支持 IE10+ 并且不关心 Opera Mini,那么您可以使用display: flex。这样您就不需要任何额外的标记,甚至不需要浮动和 clearfix。

除了使用flex,您还必须在幻灯片上设置一个min-width,它等于容器减去任何边距和填充。关于边距和填充,容器还必须容纳应用于幻灯片的任何内容(我注意到它们上有 5px 的边距)。

HTML:

<div id="slidingWindow">
    <div class="slidingSection clearfix">Something something</div>
    <div class="slidingSection clearfix">Again something</div>
</div>

CSS:

#slidingWindow 
    overflow:hidden;
    width: 480px; /* width of slide + left and right margins */
    height: 500px;
    background-color: red;
    display: -ms-flex;
    display: -webkit-flex;
    display: flex;


.slidingSection 
    margin: 5px;
    background-color: green;
    width: 470px;
    min-width: 470px; /* required */
    height: 400px;

下面是你的小提琴的一个叉子,它的尺寸减小了,并且在悬停时有一个动画来表明它工作正常:

#slidingWindow 
	overflow:hidden;
    width: 260px;
    height: 300px;
    background-color: red;
    display: -ms-flex;
    display: -webkit-flex;
    display: flex;


.slidingSection 
    margin: 5px;
    background-color: green;
	width: 250px;
    min-width: 250px;
	height: 200px;
    -webkit-transition: -webkit-transform 750ms;
	transition: transform 750ms;


#slidingWindow:hover > .slidingSection 
    -webkit-transform: -webkit-translate3d(-260px, 0, 0);
    transform: translate3d(-260px, 0, 0);
    -webkit-transition: -webkit-transform 750ms;
    transition: transform 750ms;
<div id="slidingWindow">
    <div class="slidingSection">Something something</div>
    <div class="slidingSection">Again something</div>
</div>

【讨论】:

【参考方案2】:

那是因为您需要将各个滑块包装在另一个宽度 = 幻灯片数 * 宽度的 div 中。我在这里更新了您的示例,并进行了溢出:滚动,以便您可以看到差异http://jsfiddle.net/v4udd47t/1/

<div id="slidingWindow">
    <div class="slider-container">
        <div class="slidingSection clearfix">Something something</div>
        <div class="slidingSection clearfix">Again something</div>
    </div>
</div>


.slider-container 
    width: 1000px;    

要动态设置宽度,您可以这样做

var number_of_slides = $(".slidingSection").length;

$(".slider-container").css('width', number_of_slides * 470 + "px");

【讨论】:

是否可以在 css 中创建没有贴花宽度的包装 div?例如。当图像数量是动态的并且我只想依赖包装器 div 中的 div 数量时? 你可以像这样使用 Jquery var number_of_slides = $(".slidingSection").length + 1; $(".slider-container").css('width', number_of_slides * 470 + "px"); jsfiddle.net/v4udd47t/2我也通过调整更新了答案

以上是关于构建水平滑块 - 垂直浮动的 div的主要内容,如果未能解决你的问题,请参考以下文章

图像滑块 - 如何检查元素是不是部分超出父 div 水平

如何垂直移动带有滑块的UILabel

将垂直范围滑块与其末端的按钮对齐

一次创建 2 个项目的垂直猫头鹰滑块

向上和向下滑动革命滑块

QT软件开发之基础控件--2.4.9 QSlider滑块