超全css解决方案之项目列表解决方案

三种情况

注:先声明ie7下有个变态的bug,就是浮动元素的margin-bottom不能正确解析已经闭合浮动的父元素的高度(使用clearfix或者 overflow等方法闭合浮动),而ie6是好的,所以可以按照设计灵活使用margin-top或者给父元素针对ie7打padding- bottom的bug,以下的实例demo1,2,3,4,6在ie7下测试均有这个问题,大家可以看到,我这没有处理。

//图片又乱了

边缘左右没有间隔

这种情况可以用4种方法来解决1、负margin 2、overflow:hidden 3、css3选择器(ie7+) 4、jquery

html code

<div id="demo1" class="demo democase1">
    <ul class="nostyle clearfix">
       <li><img alt="img1" src="images/img100.jpg"></li>
       <li><img alt="img2" src="images/img100.jpg"></li>
       <li><img alt="img3" src="images/img100.jpg"></li>
       <li><img alt="img4" src="images/img100.jpg"></li>
       <li><img alt="img5" src="images/img100.jpg"></li>
       <li><img alt="img6" src="images/img100.jpg"></li>
    </ul>
</div>

css code

/* democase 1 public css */
.demo{
    width:340px;
    background-color:#D7D7D7;
}
.democase1 ul{
    padding:20px 0 0 0;
}
.democase1 li{
    float:left;
    display:inline;
    margin:0 20px 20px 0;
}
.democase1 li img{
    vertical-align:middle;
}

demo 1 负margin

css code

/* 负margin核心部分 */
#demo1 ul{
    margin:0 -20px 0 0;
}

注:在这里千万别设置ul的width,因为如果没有设置width的负margin相当于增加了其width,而如果设置了width,那么负margin将不会增加宽度,这个方法就是个失败的案例

demo 2 overflow:hidden + width

css code

/* overflow:hidden核心部分 */
#demo2{
    overflow:hidden;
}
#demo2 ul{
    width:360px;
    margin:0;
}

注:这里ul的宽度其实是超过了其父元素的宽度,用来装其子元素的margin,然后对其父元素设置超过宽度隐藏,反正隐藏的那部分是li的margin部分,所以这种方法也是个很好的方法,但是千万要注意设置的宽度应该是它默认的100%宽度加上其子元素的margin值

demo 3 css3选择器(ie7+)

css code

/* css3选择器核心部分 */
#demo3 ul{
    margin:0;
}
#demo3 li:nth-child(3n+3){
    margin-right:0;
}

最后还有一种jquery方法,其实跟第三种方法差不多,也就是通过jquery可以支持ie6浏览器。既然能够用css解决,为什么要用jquery呢,所以在此不做详细说明,如果真想学习这个jquery方法,请参看下面的更多资料

上下左右间隔相等

这个情况主要有三种方法来解决1、用列表的margin和父元素的padding结合 2、css3选择器(ie7+) 3、jquery

html code

<div id="demo4" class="demo democase2 clearfix">
   <div class="item-list"><img alt="img1" src="images/img100.jpg"></div>
   <div class="item-list"><img alt="img2" src="images/img100.jpg"></div>
   <div class="item-list"><img alt="img3" src="images/img100.jpg"></div>
   <div class="item-list"><img alt="img4" src="images/img100.jpg"></div>
   <div class="item-list"><img alt="img5" src="images/img100.jpg"></div>
   <div class="item-list"><img alt="img6" src="images/img100.jpg"></div>
</div>

css code

/* democase 2 public css */
.demo{
    width:340px;
    background-color:#D7D7D7;
}
.democase2 .item-list{
    float:left;
    display:inline;
}
.democase2 .item-list img{
    vertical-align:bottom;
}

demo 4 列表项的margin和父元素的padding结合

css code

/* 列表项的margin和父元素的padding结合核心代码 */
#demo4 .item-list{
    margin:0 0 10px 10px;
}
#demo4{
    padding:10px 10px 0 0;
    width:330px;
}

注:这个方法主要就是父元素的margin和子元素的padding结合运用,我们会发现如果这两个结合起来,刚好凑成了上下左右的值,当然不是所有的组合都可以的哦,自己动手试试吧。至于css3选择器和jquery方法其实和上面的都差不多,都是通过高级选择器来设置特定的margin为0,所以在这不详细介绍了,提出来给大家一个思路,感兴趣的话可以自己动手

等高

这种情况可以用jquery或定死高度或inline-block来解决,对于定死高度就不太适合动态生成的列表项了,尤其是你根本就不知道最大的那个列表项的高度是多少,定死高度也比较简单,在这不做介绍

css code

/*democase 3 public css*/
.democase3{
    padding:10px 10px 0 0;
    width:330px;
}
.democase3 .item-list{
    margin:0 0 10px 10px;
}

demo 5 inline-block

html code

<div id="demo5" class="demo democase3 clearfix">
   <div class="item-list"><img alt="img1" src="http://placehold.it/100x140/e3e3e3/00c5e3&amp;text=demo"></div><div class="item-list"><img alt="img2" src="http://placehold.it/100x120/e3e3e3/00c5e3&amp;text=demo"></div><div class="item-list"><img alt="img3" src="images/img100.jpg"></div><div class="item-list"><img alt="img4" src="http://placehold.it/100x110/e3e3e3/00c5e3&amp;text=demo"></div><div class="item-list"><img alt="img5" src="http://placehold.it/100x130/e3e3e3/00c5e3&amp;text=demo"></div><div class="item-list"><img alt="img6" src="http://placehold.it/100x120/e3e3e3/00c5e3&amp;text=demo"></div>
</div>

css code

#demo5 .item-list{
    display:inline-block;*display:inline;*zoom:1;
    vertical-align:top;
}

注:使用inline-block请注意列表项的html标签千万不能断行,不然就会产生额外的距离,而且各个浏览器表现不一样,到目前为止还没有很好的解决方法(有一个设置font-face为0的方法,但是还是兼容不太好,对于要求严格布局来说,还不能达到满意的),最好的方法就是标签一个接一个写不断行,所以上面的html代码部分看起来是比较糟糕的,可读性比较差。当然在这里还应该注意要设置vertical-align为top

demo 6 jquery

html code

<div id="demo6" class="demo democase3 clearfix">
   <div class="item-list"><img alt="img1" src="http://placehold.it/100x140/e3e3e3/00c5e3&amp;text=demo"></div>
   <div class="item-list"><img alt="img2" src="http://placehold.it/100x120/e3e3e3/00c5e3&amp;text=demo"></div>
   <div class="item-list"><img alt="img3" src="images/img100.jpg"></div>
   <div class="item-list"><img alt="img4" src="http://placehold.it/100x110/e3e3e3/00c5e3&amp;text=demo"></div>
   <div class="item-list"><img alt="img5" src="http://placehold.it/100x130/e3e3e3/00c5e3&amp;text=demo"></div>
   <div class="item-list"><img alt="img6" src="http://placehold.it/100x120/e3e3e3/00c5e3&amp;text=demo"></div>
</div>

css code

#demo6 .item-list{
    float:left;
    display:inline;
}

js code

function setEqualHeight(columns){
    var tallestcolumn = 0;
    columns.each(function(){
        currentHeight = $(this).height();
        if(currentHeight > tallestcolumn){
            tallestcolumn  = currentHeight;
        }
    });
    columns.height(tallestcolumn);
}
$(document).ready(function() {
    setEqualHeight($("#demo6 .item-list"));
});

注:这里的思路就是先设置最大高度为0,然后循环各个列表项的高度,如果列表项的高度大于最大高度,就给最大高度赋值为这个列表项的高度,最后设置列表项的高度为得到的最大高度。这里还有个jquery插件:equalheights-jquery-plugin

总:项目列表其用途还是非常广的,里面包含的知识点也是非常多的,如清除浮动,超过宽度省略号显示,inline-block,float等,同一个效果也可以用多种方法实现,而不同的方法代码量自然不一样,可以根据具体项目来灵活变通

原文来之www.w3cplus.com

时间: 2024-10-28 17:29:26

超全css解决方案之项目列表解决方案的相关文章

超全css解决方案之图文混排解决方案

第一种方法:背景图片法 这种方法适用于非动态内容,图片用于装饰的情况下.主要是设置父元素的padding的宽度为背景图片的宽度加上图片和文字的间距,然后把背景图片定位到padding里面就可以了 图文混排demo1,背景图片法    //因是转载的,我又是菜鸟,下面图片乱了,正确的是图片跟文字都在一行. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pel

超全的IE兼容性问题及解决方案

1.怪异盒模型:在老版本IE下不设置文档声明,页面就会进入怪异盒模型解析,所以要设置文档声明: 2.IE6下,子元素的宽高超出父级的宽高 :可以把父级设 置好的宽度撑开 3.在IE6下,块属性元素的高度小于19px:高度会按照19px显示处理(解决办法:overflow: hidden; 把显示于高度之外的多余部分不显示) 4.在chrom下,文字大小小于12px:文字大小最小只能设置12px,设置低于12px都会当成12px处理(解决方法:用图片代替) 5.在IE6下,1px的点线会被显示成虚

iOS超全开源框架、项目和学习资料汇总:UI篇

上下拉刷新控件 1. MJRefresh --仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.(推荐) 2. SVPullToRefresh --下拉刷新控件4500+star,值得信赖3. CBStoreHouseRefreshControl --一个效果很酷炫的下拉刷新控件3600+star4. BreakOutToRefresh --一个下拉刷新打砖块的开源 Swift 库,能让用户在等待下拉刷新的时候

iOS超全开源框架、项目和学习资料汇总(4)数据库、缓存处理、图像浏览、摄像照相视频音频篇

数据库 1. FMDB – sqlite的工具, 多线程FMDatabaseQueue实例,FMDB数据库的使用演示和封装工具类.GXDatabaseUtils – 在FMDB基础上的工具. 2. realm-cocoa – Realm是一个真正为移动设备打造的数据库,同时支持Objective-C和Swfit.Realm宣称其相比Sqlite,在移动设备上有着更好的性能表现. 3. Breeze – 用Swift写的一个轻量级的CoreData管理工具,并且还支持iCloud . 4. Ale

iOS超全开源框架、项目和学习资料汇总(3)网络和Model篇

网络连接 1. AFNetworking – ASI不升级以后,最多人用的网络连接开源库,[推荐]iOS网络编程之AFNetworking使用,iOS开发下载文件速度计算. 2. Alamofire – Alamofire是AFNetworking的作者mattt新写的网络请求的swift库. 3. YTKNetwork – 是基于 AFNetworking 封装的 iOS网络库,提供了更高层次的网络访问抽象.相比AFNetworking,YTKNetwork提供了以下更高级的功能:按时间或版本

iOS超全开源框架、项目和学习资料汇总(5)AppleWatch、经典博客、三方开源总结篇

完整项目 v2ex – v2ex 的客户端,新闻.论坛.apps-ios-wikipedia – apps-ios-wikipedia 客户端.jetstream-ios – 一款 Uber 的 MVC 框架.它同时提供了多用户实时通讯支持,一旦启动 JetStream 后端服务,通过 WebSocket 协议可以分分钟建立多用户实时通讯应用.DeckRocket – 在相同 WiFi 网络环境内,通过iPhone 控制并播放 Mac 中的 PDF 文档.ScanBook – 扫扫图书:可以扫描

ASP.NET的项目和解决方案

解决方案 一个典型的.NET Web应用程序由许多项组成:包括内容文件(例如:.aspx文件).源文件(例如.cs文件).程序集(例如.exe和.dll文件)和程序集信息文件.数据源文件(例如.mdb文件).引用.图标以及其他文件及文件夹.VS把这些项组织到一个文件夹中,该文件夹表示一个网站.所有组成网站的文件都包含在解决方案中.当新建一个网站时,VS将自动创建解决方案,并显示在解决方案资源管理器中. 通常,解决方案包括一个或多个项目和/或网站,还可能包括一些独立项.这些独立的解决方案项,例如,

ios超全开源项目 - 转载

ios 超全项目转载 http://www.cnblogs.com/zhw511006/p/6002894.html iOS超全开源框架.项目和学习资料汇总(1)UI篇 iOS超全开源框架.项目和学习资料汇总(2)动画篇 iOS超全开源框架.项目和学习资料汇总(3)网络和Model篇 iOS超全开源框架.项目和学习资料汇总(4)数据库.缓存处理.图像浏览.摄像照相视频音频篇

6.2 项目列表

传统的HTML语言提供了项目列表的基本功能,包括顺序式列表的<ol>标记和无顺序列表的<ul>标记等.当引入css后,项目列表被赋予了很多新的属性.甚至超越了它最初设计时的功能.本节主要围绕项目列表的基本css属性进行相关介绍,包括项目列表的编号.缩进和位置等. 一.列表的符号 通常的项目列表主要采用<ul>或者<ol>标记,然后配合<li>标记罗列各个项目.简单的列表代码如下,其显示效果如图1所示. 本案例文件位于网页学习网CSS教程资源“第6