产品列表到底应该怎么做?(2)
作者:Lucars 来源:Alibaba.com UED 发布时间:2009-01-02 16:34:00
第一次尝试:
首先我们还是来考虑考虑到底使用什么标签来写这个列表吧,所谓back 2 base嘛。重新分析列表中最重要的元素有且仅有:标题、图片、简介。显然标题是最重要的,作为一个product的title存在,而图片和简介都是用来描述标题的内容,因此第一个想到的标签就是dl,这样便有了以下布局(抱歉还没有时间整一个代码输入):
<dl>
<dt>[name]</dt>
<dd><div>[photo]</div><div>[intro]</div></dd>
</dl>
对dt和dd都做float:left,dt做一个margin-top:100px来定位到图片和简介中间,dd做一个margin-left:-25%来定位到和dt相同的x坐标(由于无法输入代码就不贴css了)这样的html是我认为最贴切的,根据现在流行的html语义化定义这样的布局太合适不过了。当然css中还是存在非常多的困难,而前面所说的“某原因”也并没有得到解决,反而更甚了,因为把标题和简介流拆开后,标题过长便会和简介的文字叠加根本无法阅读!然而经过几秒钟的思考后认为这玩意儿的解决已经超出了我的范围了。当然,有人可能会说把标题和图片换一个不就可以了么?是的,没错,但是如果这样的话使用dl标签还有什么意义呢?可能有意义吧,就是标题和简介都是为了说明这张图片而存在的,但是真的可以这么想吗?还有待实验去证明,这里就不讨论了。
第二次尝试:
如上所述,dl的存在就没意义了,那就算了吧,退而求其次使用ul(请在砸我鸡蛋前念着我还死了那么多脑细胞在这个上面的份上轻点儿吧),无序列表虽然不如定义列表来得语义那么强烈,但至少它还是和列表吧,至少不是一个division吧。ul的布局相比较就简单多了,看上去也只是把div标签换成了li而已,那么html结构如下:
<ul>
<li><div>[photo]</div>
<div>[name]</div>
<div>[intro]</div>
</li>
</ul>
到这个时候终于要直面本文第四次提到的“某原因”了,如何解决li浮动后高度不同导致的矩阵错位问题?最先进入脑子的想法就是记得很久很久以前看到过一篇关于div自适应高度的文章,于是就在google翻找,当时没有收藏真是太失误了。在google搜索自适应高度那是相当多呀,但是有一篇文章是不得不借鉴的,但是这篇文章并不是适应于我们的案例,很显然它更适用于两栏或者三栏布局,而我们至少有四栏甚至五栏。自此还有什么办法可以让多列布局自适应高度呢?(请不要跟我提关于巨大的padding与负margin这件事)伪装的自适应对于需要货真价实产品的我们是没有用的……至此思维告一段落,我需要回到源头来,最开始的出发点在哪里?如果只是为了清除浮动的话?使用最简单的方法?
带着上面的问题,便渐渐有了解决方案,不可避免的,我可能需要借助后台工程师的力量了,我在每4个li之后的那个li上加上clear:left属性,以清除左边的浮动来防止它因为前面li的高度不够而导致的错位,从它之后的li就应该会乖乖地跟在它的后面了。这个想法很美好,但是很天真,可能我确实在FF等标准浏览器下面获得了预想中的效果(没有想到实现起来那么简单,正在开心中),突然发现又是那该死的IE!!!那个加了clear属性的li确实正常显示了,但是在它之后的那些继续原来它应该范的错误,没有起到清除整行浮动的作用。我懊恼了~通过漫长的研究至今已经找到了一个语义和样式都比较平衡的点却无法在IE中得以实现,怎么办?
第一个想法就是使用hack技术(虽然UEDer们都不推崇,但是为了维护之前的成果,老子发飙了),问题就是如何做hack。先看这样的例子,如果我每4个li后面都插一个<li style=”clear:both;float:none;”></li>的话,不管在IE下还是在FF下都可以完美地完成任务,但是这个方案有一个致命的缺陷,就是对原有html语义的破坏,凭什么好好的列表突然就多出一个空li来?那么能不能在不影响原来语义的情况下,在FF依然使用它应该使用的clear:left方式的情况下来针对IE进行hack呢?非常幸运的是IE给我们提供了条件注释工具<!–[if IE]><![endif]–>(我想一旦开始使用这个东西之后一定会非常依赖它的),因此html结构就变成了这样:
<li>[productItem]</li>
<!–[if IE]><li class=”clearForIE”></li><![endif]–>
<li class=”clearForFF”>[productItem]</li>
希望这样能够看得懂。至此为了尽力表述完整语义的目的就达到了,因为所有的浏览器、搜索引擎和用户都会把那段IE的hack作为一个普通的注释来看待(这里也包括IE自己,这是一段条件注释,那还是注释),因此产品列表的li就没有被中途无故打断,更不会像最早的div版本每四个是一个division。到这里研究工作就算完成了(关于这个IE特有的hack的可能的严重后果木有给予考虑。。。),不过还有一些额外的思考。
其实使用division也不完全是不好,如果division这样做:
<div class=”top20″>
<div class=”top15″>
<div class=”top10″>
<div class=”top5″>
DIV[productItem]{1-5}
</div>
DIV[productItem]{6-10}
</div>
DIV[productItem]{11-15}
</div>
DIV[productItem]{16-20}
</div>


猜你喜欢
- 前言之前公司设计的网站比较混乱,很多地方不统一,其中一个就是弹出层,导致这个原因是因为,公司的UI换了好几个人,而他们每个人做出来的都不太一
- 在之前的文章中,我们介绍了PyQt5和PySide2中主窗口控件MainWindow的使用、窗口控件的4中基础布局管理。从本篇开始,我们来了
- 正文之前上午给爸爸打了个电话庆祝他50岁生日,在此之前搞了个大扫除,看了会知乎,到实验室已经十一点多了。约喜欢的妹子吃饭失败,以至于工作积极
- 如下所示:a = 1b = 3print(a/b)#方法一:print(round(a/b,2))#方法二:print(format(flo
- SqlServer 在事务中获得自增ID实例代码在sqlserver 中插入数据时,如何返回自增的主键ID,方式有很多,这里提
- 一、项目说明在日常生活中,我们经常会存取一些朋友们的丑照,在这个项目中,我们以萌萌哒的熊猫头作为背景,然后试着在背景图上加入朋友们的照片。效
- 本文实例为大家分享了python贪吃蛇游戏的具体代码,供大家参考,具体内容如下贪吃蛇游戏截图:首先安装pygame,可以使用pip安装pyg
- 安装代码pip install python-docx1.批量化往word文件中添加大批量重复的数据from docx import Doc
- 随着网络的发展,人们通过各种方式使用它。今天,网络购物,跟朋友或者不认识的人聊天,管理银行账户,以及一些日常应用,共享照片或视频,等等。事实
- 前言本文讲诉了Vuex的安装、搭建。以及Actions、Mutations、State、Getters的使用,为什么使用mapState、m
- <?php // fix 404 pages: header('HTTP/1.1 200 OK'); // set 4
- 看到网上也有开源的代码,这不,我拿来进行了二次重写,呵呵,上代码: #encoding: utf-8&n
- 今天为大家介绍Python当中一个很好用也是很基础的工具库,叫做collections。collection在英文当中有容器的意思,所以顾名
- 配置静态文件的两种方式:1 配置单独app下的静态文件,比如某个app下的单独的图片。2 配置整个project下的静态文件,适用于那些和单
- pandas in 和 not in 的用法经常在处理数据中从一个总数据中清洗出数据, 但是有时候需要把没有处理的数据也统计出来.这时候就需
- 新写自己的Threading类class MyThread(threading.Thread):#我的Thread类 判断流程结束没 用于o
- 随着ES6规范的到来,Js中定义变量的方法已经由单一的 var 方式发展到了 var、let、const 三种之多。var 众所周知,可那俩
- 如果只是想实现将jenkins的构建结果发送到企业微信进行通知,最简便的方式是安装Qy Wechat Notification Plugin
- 1.图像处理库import cv2 as cvfrom PIL import *常用的图像处理技术有图像读取,写入,绘图,图像色彩空间转换,
- 学习了vue.js一段时间,拿它来做2个小组件,练习一下。我这边是用webpack进行打包,也算熟悉一下它的运用。源码放在文末的 githu