javaeye的hax最q在他的blog上进行了一场关于如何写css的讨论,其中反思和讨论了一些关于基于标准或trickq行设计的选择问题Q这个问题也?a target="_blank">David Heinemeier Hansson对于XHTML/CSS/Javascript标准q行RIA开发话?/a>的一个g展。我们可以从中思考如何在不完的技术中选择一条相对完的技术\U?
讨论的v因是淘宝|的UED团队成员D늎爷在他的blog上发表了一?a target="_blank">关于淘宝|页面设计上的小技巧(TrickQ?/a>的介l,q个技巧是Z让一些条目之间的分隔U完全用css生成Q不使用多余的classQ段王爷q对比了其它三种常见实现Ҏ(gu)。实现方法如下:(x)
从很久很久以前开始,cȝ间的横线无非都只有三U?br /> 1、背景图
在a标签讄一个padding 用宽1px高不{的背景图来position到右侧?br /> ~点Q最后一个还是要用class来隐藏掉背景?br /> 2、符?br /> 在每个a标签之间?#8220;|”W号来填充?br /> ~点Qhtml文g变大Q文件维护变得很ȝQ而且在html中毫无意义?br /> 3、a标签右侧的boder?br /> 同背景图一P只不q用border-right来代ѝ缺点也同上?br />
其实现有Q淘宝的实现方式Q是利用ul的overflow:hidden 再将li的margin-left:-1px的做法做出来的。这L(fng)做法可以同旉免以上的~点了?br />
上面提到的用border的传l方式需要在W一或者最后一个元素上面添加class来隐藏borderQRealazy也在他的blog中给Z一U不错的解决Ҏ(gu)Q他推荐q样做:(x)
D目间的竖线Q我们往往通过border或者background来实现。特D需求是Q第一左Ҏ(gu)竖线或最后一右Ҏ(gu)竖线。按照一般的~程Ҏ(gu)Q控制第一要比控制最后一容易得多?br />
区分W一的q有一个好处是QCSS有一?first-child的伪元素Qpseudo elementQ可以让我们轻而易丄选择W一个子元素。遗憄是,当前全球占有率最高的览器,IE6Qƈ不支持这个伪元素。我们可以手工给W一个元素加上class然后再定义它。等ie6淘汰之时Q就可以攑ֿ?:first-child了,相权衡的话,我觉得给W一加上class="first"也不׃ؓ(f)实用M做法?
Realazy提出的方案的思\是用基于标准的css选择器(selectorQ,q种Ҏ(gu)的好处是可以实现完美的内容与表现分离。但是现实的问题是ƈ非所有的览器都Z标准实现Q这也正是基于标准的RIA开发面对的最大问题,其以CSS和Javascript问题最大。javaeye的hax在他的blog中提Z自己对于q个Trick的不同意见:(x)
因ؓ(f)我觉得这个方法一点也不好。很单的一个理由:(x)q只是一个trickQ只适合q特D情况,假设你要换用“-”来分割呢Q作为插入分割符h_(d)真正合理使用css的,我给一个例子:(x)
li ~ li:before { content:'-'; margin:0.25em; }优点Q含义非常清晎ͼl护性极高。你可以换Q何的分隔字符Q可以设定字体,可以讑֮颜色、大等样式Q甚臛_以换用图片作为分隔?/p> 好了Q下面说~点。唯一的缺点:(x)IE不支持?/strong>
haxl出的方案在IE中无法用,其实对于大部分网站来说这q当于l大多数用户都无法看到这U表玎ͼq就意味着p|。淘宝UED的小马提?#8220;实用W一”Q从q种观点上说hax的方案就是不实用的。但是hax提出可以使用Dean Edwards的IE7 Javascript?/a>Q?/p>
IE7q个库动态的实现了很多IE原本不支持的伪类QPseudo ClassesQ,让完全基于标准的css选择器(使用伪类Q成为可能。随后,hax在他的另外一blog“面向未来的CSS实践”中作了如下设惻I(x) hax提出的这U方式是比较Ȁq的Q他q在“面向未来的CSS实践”中进一步的描述了通过脚本修正的方式解决IE不支持标准伪cd多class问题的设惻I他的核心x是让CSS的开发可以遵循标准,减少Z优雅退化(graceful degradationQ而向最低支持(览器)兼容造成的表达方式限制。但是hax自己也提Zq种思\面(f)的尴,它D了table布局的实用性h(hun)gؓ(f)例:(x) “遵@标准的hzd比不遵@的h更篏”q句话说Z很多坚持Z标准q行CSS设计的开发h员的心声Q这其实是实用性和坚持标准之间的一些交换,现实世界中两个方面如何^衡正是广大XHTML/CSS/Javascript开发者需要认真思考的Q关键的问题Q还是目的要明确。盲目的遵@标准Q例如很多开发者着q于使用div布局代替tableQ但是却没有明确的目标就?x)迷失,haxq样评h(hun)Q?/p>
table布局 其他css样式 = 清晰的布局意图和内容的混合?/p>
div容器 css样式 = 内容样式分离Q但是从css代码中很隄出布局意图 我们应该看到QCSS的意图是表现分R从设计的角度就是实现语义化的htmll构Q让html/xhtml量只表辄_的数据l构。但是此时css里面的布局意图是比较难以被记录的(难以被理解就难以l护Q难以重构)Q有其在充斥了大量Trick的情况下Q这正是q大E序?设计人员需要解决的Q我们是否应该通过不断地重构来扑ֈq个矛盾的^衡点呢?Ƣ迎大家讨论。最后附上淘宝UED团队的小马ȝ的淘宝CSS~程原则Q?/p>
IE7是一个可以让IE像标准浏览器一样工作的Javascript库。它修正了很多CSS问题Q让PNG在IE5和IE6下正常工作?
我推崇一U面向未来的CSS实践?strong>卛_胆采用CSS2.1甚至部分CSS3的特性?/strong>因ؓ(f)l大多数Ҏ(gu),Firefox、Opera?Safari{都已经很好的支持了。MSIE7也改q了许多Q将来IE也无疑终I会(x)完全支持CSS2.1。对于目前的IEQ除了graceful degradation的方式(实际上整个内Ҏ(gu)式分ȝ原则和良好的CSS设计可以保q点Q比如淘宝以前的“怽”所体现的)Q可以考虑通过特定手段来patch之?br />
在这点上Q我必须_(d)我原来也是一直坚持只用ie6的selector的。是什么改变了我?是Dean Edwards的IE7Q它的出C仅在于实践h(hun)值——即提供了一个对于IE的补丁,让开发者可以直接写C(j)SS2甚至CSS3?我认为出现这栯刺的情况Q即遵@标准的hzd比不遵@的h更篏Q是很有问题的?/strong>q种矛盾在我w上存在着Q?001q的时候我在某bbs上发了个_(d)大数 table布局之罪Q但是过了几天我又跑上去说table布局在某U情况下也可以用用?dlee同志貌似到现在也跟我当时一栗如果你实认ؓ(f)Qtable布局从实用主义角度无法被完全否定Q那DHH同志采用实用M的角度来力挺 html/css/js׃有点心虚Q那个标题也显得带点Q性味?#8230;…
从实用主义角度说Q}慎的table布局也许更简单,因ؓ(f)它更好的映射Cgrid模型上。如果你转用div/spanQ?strong>标签是清CQ但是css是qQ?/strong>q些属性(css属性)是分散的Qcss代码无法反映整体Q无法记录你的grid 布局意图Q这是ؓ(f)什么我们经常说我有一个css trick的原因,它是trick而已Q是你达到最l目的的手段Q但是你的目的,你的意图Q没有好好加入文的话,那维护v来恐怕也不见得轻松?/strong>
能符合这两个条g的最z的写法Q就是我们的目标?
]]>