具有浮动div和合并列的CSS3列数

时间:2012-10-12 10:51:44

标签: css html merge floating

我正试图达到这样的效果:

http://i.imgur.com/GkcjX.jpg

如你所见,有六列(对我来说4就够了)。有一些浮动div和图像跨越4列。使用以下代码,在Chromium(Chrome)中插入的div的宽度仅限于列的宽度。

http://i.imgur.com/hK4Nk.png

<div style="column-count: 4; -moz-column-count:4; -webkit-column-count:4; text-align: justify">
    <p>Header</p><hr />
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero. Proin vitae magna vitae leo auctor consectetur. Pellentesque tempor pretium leo at volutpat. Nunc ultricies, est id ultrices pulvinar, nisl nunc porttitor nisi, aliquet pulvinar dolor neque sed lacus. Integer a risus quis nunc rutrum pellentesque. Praesent non ligula massa, nec gravida mauris. Quisque vitae libero nec augue sollicitudin gravida. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum porttitor, tortor ultricies lacinia gravida, nibh purus ultrices lacus, sed tempus augue ligula ac tortor. Proin urna tortor, tempus quis commodo id, eleifend ut augue. Nulla sit amet dolor tellus. Maecenas et pharetra tellus. Vivamus auctor odio id est imperdiet in tincidunt felis gravida. Vestibulum ultricies mauris ut dolor vulputate lacinia. In imperdiet urna a neque sollicitudin dictum sit amet ut tortor. Duis commodo volutpat mauris, quis euismod magna mattis non. Duis dapibus, felis eu bibendum ultricies, erat urna accumsan sapien, eu congue magna neque in massa. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla nec pretium sem. Proin aliquet nisl at orci cursus auctor. Praesent lacus quam, aliquet at vestibulum nec, euismod sit amet dui. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam fringilla tincidunt tincidunt. Integer tincidunt vehicula cursus. Quisque sed est auctor arcu ultricies iaculis eget id justo. Sed suscipit tellus et purus dignissim tristique. Ut non purus arcu, sed imperdiet odio. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
        Mauris in magna orci. 

        <div style="float: left; width: 700px; height: 200px; background-color: gray">
            ff

        </div>
        Etiam leo lectus, accumsan at imperdiet sit amet, tincidunt ac tortor. Aenean tellus est, condimentum vitae scelerisque tempus, cursus et nisi. Vivamus ligula lacus, viverra id sodales quis, tempus in lectus. In ut ipsum libero. Aenean vitae orci ligula, non ultricies mauris. Donec metus dolor, feugiat ut blandit vitae, lobortis nec erat. Praesent sapien diam, egestas sit amet commodo a, varius at nulla. Vestibulum fermentum auctor porttitor. Vivamus tristique enim bibendum nulla consectetur molestie. Vivamus lacus velit, dignissim at iaculis id, sodales volutpat odio. Sed mollis consectetur aliquam. Cras rhoncus, nulla non congue porttitor, sapien ipsum lacinia ipsum, pharetra tincidunt arcu ligula id justo. Praesent nec enim tellus, eu aliquam orci.Integer lacinia accumsan nisl at tristique. Sed eget aliquam ipsum. In et magna ut erat posuere ultrices rutrum eget nulla. Nullam mauris nibh, sollicitudin eu aliquet sit amet, pulvinar sit amet tortor. Nunc at nulla sed urna pretium tristique eget quis massa. Quisque ultricies sagittis orci, sed dignissim ante egestas varius. Vivamus et ipsum libero, sagittis euismod enim. Donec volutpat feugiat orci, ut pellentesque nulla sodales gravida. Nulla egestas cursus pharetra. Praesent varius nibh vitae ligula auctor at sollicitudin lacus dapibus. Donec condimentum porttitor sem ac auctor. Mauris a nunc sit amet eros ornare accumsan. Nullam mauris purus, vestibulum id imperdiet sit amet, imperdiet id ante. Nullam nibh leo, pharetra eget fringilla nec, lobortis quis mauris. Fusce varius nulla non orci dapibus ut convallis dolor dictu
        Duis bibendum, dui sit amet sagittis scelerisque, lectus eros luctus dui, a rhoncus justo nisl sed lectus. Proin placerat suscipit lectus id malesuada. Vestibulum vitae nisl et orci fermentum facilisis. Pellentesque malesuada lacinia tristique. Mauris posuere lorem vitae dolor imperdiet porttitor. Maecenas eu tortor sem. Donec non eros dolor, sed interdum magna. Vivamus id commodo urna. Curabitur dapibus bibendum tincidunt. Praesent tincidunt consectetur metus, ut placerat sem volutpat interdum. Praesent sit amet posuere ipsum. Nunc posuere dolor quis erat pulvinar vitae ornare nibh ultricies. Vestibulum molestie porttitor mauris sed viverra. Nunc rutrum rhoncus lacus ac tincidunt. Nam at arcu ut erat pharetra porttitor. Fusce accumsan dui eget diam placerat vel sodales nisl feugiat.In consectetur orci eu velit porta non tristique velit faucibus. Etiam ac pellentesque sapien. Cras bibendum lorem in felis commodo nec pellentesque mauris fringilla. Maecenas magna augue, facilisis eu dignissim nec, interdum et enim. Pellentesque auctor sapien eu augue volutpat sit amet pretium ipsum vehicula. Aliquam erat volutpat. Nam ut leo eros. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Etiam tortor dolor, molestie at vestibulum nec, dignissim ut est. Donec iaculis vulputate purus et mattis. Morbi pulvinar accumsan mollis. Nulla a est lacus. Ut nisl enim, accumsan ut accumsan et, ultricies sit amet nulla. Nunc lacus purus, cursus et vulputate eget, pharetra id sem.
        Mauris in magna orci. Etiam leo lectus, accumsan at imperdiet sit amet, tincidunt ac tortor. Aenean tellus est, condimentum vitae scelerisque tempus, cursus et nisi. Vivamus ligula lacus, viverra id sodales quis, tempus in lectus. In ut ipsum libero. Aenean vitae orci ligula, non ultricies mauris. Donec metus dolor, feugiat ut blandit vitae, lobortis nec erat. Praesent sapien diam, egestas sit amet commodo a, varius at nulla. Vestibulum fermentum auctor porttitor. Vivamus tristique enim bibendum nulla consectetur molestie. Vivamus lacus velit, dignissim at iaculis id, sodales volutpat odio. Sed mollis consectetur aliquam. Cras rhoncus, nulla non congue porttitor, sapien ipsum lacinia ipsum, pharetra tincidunt arcu ligula id justo. Praesent nec enim tellus, eu aliquam orci.Integer lacinia accumsan nisl at tristique. Sed eget aliquam ipsum. In et magna ut erat posuere ultrices rutrum eget nulla. Nullam mauris nibh, sollicitudin eu aliquet sit amet, pulvinar sit amet tortor. Nunc at nulla sed urna pretium tristique eget quis massa. Quisque ultricies sagittis orci, sed dignissim ante egestas varius. Vivamus et ipsum libero, sagittis euismod enim. Donec volutpat feugiat orci, ut pellentesque nulla sodales gravida. Nulla egestas cursus pharetra. Praesent varius nibh vitae ligula auctor at sollicitudin lacus dapibus. Donec condimentum porttitor sem ac auctor. Mauris a nunc sit amet eros ornare accumsan. Nullam mauris purus, vestibulum id imperdiet sit amet, imperdiet id ante. Nullam nibh leo, pharetra eget fringilla nec, lobortis quis mauris. Fusce varius nulla non orci dapibus ut convallis dolor dict
    </p>                
</div>

关于Firefox效果也被打破了。

http://i.imgur.com/80B9k.png

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:2)

CSS3 Multi-column layout module提供了column-span属性,该属性“可以使元素跨越多个列”。
不幸的是,这个属性只能假设值为“all”或“none”(因此,例如,如果你使用的是4列布局,则不能只在2列上跨越一个元素)并且不能应用于漂浮或绝对定位的元素 在W3C规范的previous version中,column-span属性也可以采用整数值(以准确指定元素跨越的列数),但最新版本的W3C中不存在此选项规格;旧规范还为列之间的浮动元素提供了支持,但此功能也已从最新规范中删除 在Web上,您可以找到有关CSS3多列布局模块的几个教程;在我看来,最好的一个是this one,即使有点陈旧(2011年11月),也包含一些有用的例子和进一步的参考文献。
请注意,并非所有浏览器都支持CSS3多列模块(有关详细信息,请参阅this page),因此,如果您正在寻找跨浏览器解决方案,这可能不是最佳选择。
也就是说,我试图通过使用一些浮动div来实现你想要的结果:

<!DOCTYPE html>
<html>
    <head>
        <style>
        #leftblock { 
            width: 66%;
            margin-right: 10px;
            float: left;
        }
        #rightblock { 
            width: 32%;
            float: left;
        }
        .lefttext { 
            column-count: 2; 
            -moz-column-count: 2; 
            -webkit-column-count: 2; 
            text-align: justify;
        }
        #righttext {
            column-count: 2; 
            -moz-column-count: 2; 
            -webkit-column-count: 2; 
            text-align: justify;
        }
        #image1 {
            width: 100%;
            height: 200px;
            background-color: red;
            margin-bottom: 20px;
        }
        #image2 {
            width: 100%;
            height: 100px;
            background-color: green;
        }
        h3 {
            color: blue;
        }
        h4 {
            padding: 0;
            margin: 0;
        }
        p {
            margin-top: 0;
            padding-top: 0;
            margin-bottom: 20px;
        }
        .column1 {
            float: left; 
            width: 50%;
        }
        .column2 {
            float: right; 
            width: 49%;
        }
        </style>
    </head>
    <body>
        <div id="leftblock">
            <div id="image1"></div>
            <div>
                <div class="column1">
                    <div>
                        <p><b>Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.</b></p>
                        <h3>Author</h3>
                        <hr>
                    </div>
                    <div class="lefttext">
                        <h4>Title</h4>
                        <p>
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                        </p>                
                        <h4>Title</h4>
                        <p>
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                        </p>                
                    </div>
                </div>
                <div class="column2">
                    <div class="lefttext">
                        <h4>Title</h4>
                        <p>
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                        </p>                
                        <h4>Title</h4>
                        <p>
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                        </p>                
                        <h4>Title</h4>
                        <p>
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                        </p>                
                    </div>
                </div>
            </div>
        </div>
        <div id="rightblock">
            <div id="righttext">
                <h4>Title</h4>
                <p>
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                </p>                
                <h4>Title</h4>
                <p>
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                </p>                
                <h4>Title</h4>
                <p>
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                </p>                
                <h4>Title</h4>
                <p>
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. In eget mi a odio dapibus ornare. Phasellus magna lacus, pharetra scelerisque accumsan nec, feugiat ac libero.
                </p>                
            </div>
            <div id="image2"></div>
        </div>            
    </body>
</html>

此解决方案的主要缺点是您必须小心地“平衡”每个div中文本的长度,以获得相同(或几乎相同)的高度。
我在Chromium,Opera和Firefox上测试了这个页面;因为我在Linux上工作,所以我不能说它是否适用于Internet Explorer(它可能不会) 我知道这可能不是最好的解决方案,但我希望它可以作为进一步试验的起点。