【问题标题】:How to let floated divs stretch outer div's width如何让浮动 div 拉伸外部 div 的宽度
【发布时间】:2013-11-03 05:18:15
【问题描述】:

我正在构建一个新页面,我想在其中包含一个从左到右滑动的滑块。我在一个部分中有一个 div,在那个 div 中我有三篇浮动文章。我想要的是(包装) div 元素随着它的宽度拉伸,以便内部文章进入一条水平线。

这里是一些代码:http://jsfiddle.net/jFSz4/

如果不为 div 元素指定固定宽度(如 3000 像素),我无法让它工作,但这不是我想要的。想象一下如果我添加第四个 div 会发生什么。

所以,我希望每篇文章的宽度正好是 800 像素,并且环绕元素需要调整到该宽度。

任何帮助表示赞赏。

【问题讨论】:

    标签: css html css-float stretch


    【解决方案1】:

    这里有一个解决方案,使用position:relative 作为包装器,position:absolute 用于文章,其中每篇文章的left 偏移量增加800px(一篇文章的宽度)

    我正在使用伪类 :nth-child(n) 来设置它,但您也可以轻松设置每篇文章的类/id

    http://jsfiddle.net/pxfunc/jFSz4/20/


    编辑:没有position:absolute的解决方案

    这是一个使用 display:inline-block; (which is arguably better than float) 的解决方案

    http://jsfiddle.net/pxfunc/jFSz4/22/

    #slider{
        background: green;
    }
    
    #slider div{
        background: yellow;
        overflow:hidden;
        white-space:nowrap;
    }
    
    #slider article{
        display:inline-block;
        width:800px;
        border:1px solid #000;
    }
    

    【讨论】:

    • 这是一个不错的选择,但当然我宁愿在文章上使用浮点数,因为这样可以避免我每次想要添加边距等时编辑左侧属性(或添加第四个元素例子)。还是谢谢!
    • 甜蜜!这似乎工作得很好。唯一的问题是包装没有拉伸(如果您添加背景颜色可以看到)。
    • div 包装器?我想我没有看到你所看到的。
    • 是的,是文章的包装 div 元素。
    【解决方案2】:

    试试这个..

    http://jsfiddle.net/jFSz4/19/

    调整.articles 元素上的margin-left 以滑动文章。这是您将使用 JavaScript 制作动画的属性。

    注意:我在文章上使用 400 像素只是为了便于测试。


    CSS:

        #slider{
            background: green;
            width: 800px;
        }
    
        #slider .container{
            overflow: hidden;
        }
    
        #slider .articles{
            width: 20000em;
        }
    
        #slider article{        
            background: yellow;
            float: left;
            width: 400px;
        }
    

    HTML:

    <section id="slider" >
        <div class="container">
            <div class="articles" style="margin-left: -200px">
                 <article>
                     <header>
                         <h2>1</h2>
                   </header>
                 </article>   
    
                 <article>
                     <header>
                         <h2>2</h2>
                   </header>
                 </article>   
    
                 <article>
                     <header>
                         <h2>3</h2>
                   </header>
                 </article>  
            </div> <!-- /articles -->
        </div> <!-- /container -->
    </section>
    

    【讨论】:

    • 但我不想为文章容器 div 指定特定的宽度(例如您的 20000em)。它只需要与三个内部文章的宽度一样宽(3x 800 和一些边距)。
    • 您必须 A. 指定一个非常宽的宽度并隐藏溢出,如在我的示例中,或 B. 使用表格。否则,您的浮动将在它们的组合宽度大于容器宽度的 100% 后堆叠。在我的示例中,您只需将“400px”更改为“800px”即可。
    • 问题是,我想使用包装元素的位置来使用 js 做一些技巧,但是该元素不能很好地适应内部元素,它无法完成。但我想我别无选择,只能指定包装元素的宽度。
    • 你打算做什么?可能仍有一些方法可以实现您想要的。
    • 首先,我希望包装元素从左向右滑动(内部文章也从左向右移动)。这很好用,但是如果包装器的右侧位置低于零,我想阻止向左或向右移动。由于我们现在有一个固定的位置,因此该位置不再可靠。
    【解决方案3】:

    这是你要问的吗? http://jsfiddle.net/jFSz4/3/? 我只是在#slider div 元素中添加了width:100%

    【讨论】:

    • 我不认为是这样...我仍然没有看到一行三篇文章。你呢?
    • 我没有看到它在任何浏览器中都能正常工作...我看到一个水平滚动条出现了。
    【解决方案4】:

    使用百分比...http://jsfiddle.net/jFSz4/2/

    和 display:inline 与你的浮动...

    【讨论】:

    • 但是我希望文章的宽度正好是 800px。现在它似乎调整到了外部 div 的 100%(基本上就是窗口的宽度)。顺便说一句,在你的小提琴中,我仍然看到它们在彼此下方。
    • 澄清一下...您希望每篇文章的宽度为 800 像素或总和以及多少文章为 800?而且,所有文章都内联?
    • 每篇文章必须精确到 800 像素...并且环绕元素需要调整到该宽度。
    【解决方案5】:

    所以这似乎在 IE 和 FF 中都有效,但我不太确定这是你想要的...... 我已将文章标签切换为带有文章类的 div,并将 width: 100%; 添加到滑块 div。

     <!DOCTYPE html>
     <html lang="en">
      <head>
     <title>x</title>
     <style>
    
        html, body{
        width: 100%;
        }
        #slider{
            width: 100%;
            height: auto;
            overflow: hidden;
            background: green;
        }
    
        #slider div{
            position: absolute;
            background: yellow;
            overflow: auto;       
            width: 100%;
        }
    
         #slider .article{        
            position: relative;
            float: left;
            width: 300px;
            border: 1px solid #000;
            margin-right: 10px;
        }
     </style>
     </head>
     <body>
    
    <div id="slider" >
        <div>
             <div class='article'>
                 <header>
                     <h2>1</h2>
               </header>
             </div>   
    
             <div class='article'>
                 <header>
                     <h2>2</h2>
               </header>
             </div>   
    
             <div class='article'>
                 <header>
                     <h2>3</h2>
               </header>
             </div>  
    
        </div>  
     </div>   
    
       </body>
       </html>
    

    【讨论】:

    • 我将其保存在本地,并将文章(或您的示例中的 div)的宽度更改为 800 像素,然后就回到我们开始的位置。
    猜你喜欢
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多