RSS
people

献给才毕业一两年的朋友[转]

  
  我们从家里搬了出来,提着自己半新不旧的行囊找了间不能再廉价的破房子租了下来,开始了闯荡的生活。
  
  我们的眼光充满了好奇,我们的血液里流淌着激情,我们的钱夹却空前的瘦小。
  
  在面对第一个老板第一批同事第一份工作的时候,我们是那样的慷慨激昂,我们认为自己无 所不能,我们幻想很快就可以打造一片属于自己的天地,我们对未来充满了信心。并且希望从别人艳羡的目光中找到一点点骄傲的资本。
  
  可是渐渐的我们才知道,其实现实和自己的理想有着天壤之别。我们发现了老板是多么的阴险狠毒同事是多么的势利小气工作是多么的枯燥无趣,我们也发现了房租水电气费把人愁死了。发薪的日子总好像遥不可及,商店里的东西仿佛只是为别人摆设,我们还发现了只有周末跑到母校瞎逛才感觉释然,只有和老同学一起聊天玩耍才真正开心只有在步行街上看美女才不无聊。
  
  渐渐的我们也学会了泡吧,酒吧迪吧水吧网吧玩具吧都是我们打发无聊时间的场所。可是我们还是泡不到妞,以前自以为是的那些爱情理论泡马子技巧在金钱时代都是狗屁,都出奇的苍白无力。于是我们感叹世界变得太快,快得让我们这些穷小子根本就无所适从。
  
  渐渐的我们也变得深沉起来,不再为一个很幼稚的笑话就哈哈大笑,不再动不动就乱发牢骚,也不再把内心深处的秘密轻易地跟别人诉说。我们也说不清楚这到底是成熟还是消沉,对着镜子看,却发现里面那张脸陌生得可怕。
  
  渐渐的我们似乎大彻大悟了,什么都看透了,一切都虚无缥缈了,然后我们什么都很漠然,坐公交车也不让座了,看到小偷偷东西也懒得理了,吃点小亏想想也就算了,但是我们却在每天下班之前发愁晚餐该吃什么了,在大家一起喝茶的时候盘算着自己要不要买单,在临睡之前把这个月的开支算了又算。
  
  渐渐的我们感觉自己其实什么都不是,没有钱没有名没有地位,身高也太矮了皮肤也太黑了长相也太难看了,什么都要看人家的脸色,走在哪里都似乎低人一等,有时真恨不得割脉上吊服毒跳楼自行了断。
  
  渐渐的我们也不想看书了,也不想谈理想了,也不想谈前途了,也不想花太多精力胡思乱想。我们也不想听音乐了,也不想看电影了,不过倒时常看些成人的碟子,交流些黄色的笑话。我们开始沉迷于酒液里,沉迷于方城中,沉迷于低级场所内。家的概念越来越模糊了,亲情的感觉越来越遥远了,除了在梦中偶尔回到家乡之外,我们挺多可以借助一条冰冷的电话线和家人说说一些开始偏离生活的话,却看不到老爹老妈又长出了多少根白头发又多了几道皱纹。
  
  看到有人在球场上酣战,我们似乎也想上去来两脚,其实很久没有运动的身体已经无法支撑我们再跑多远了,而且几乎荒废的球技让我们怀疑自己那些踢球的年岁是不是上辈子的事。
  
  望着满街穿着前卫的少男少女,我们开始表现出厌恶的表情,却忘了自己前些年其实有过之而无不及。遇到在大庭广众之下举止亲热的学生情侣,我们的目光也变成了不屑,并恶狠狠地骂他们伤风败俗。
  
  经过彩票销售点的时候,我们忍不住也掏出一点本该买书的钱来买几注,然后天天做梦中了五百万之后多少万买房子多少万买车多少万胡乱挥霍,可是每一次开奖虽然屡屡有人中头奖却始终与自己无缘,于是在短暂皹开始萌生铤而走险的念头,但又不敢真的去抢银行绑架什么的,心情低沉到了极点,我们的脾气也大了,唉叹声也响了。
  
  所幸这样的日子终于结束了。我们又到了新的工作单位。这时候我们虽然或多或少有点冲动,但更多的是谨慎与惨淡。我们不会再对老板抱什么幻想,不会认为他会给我们多好的待遇,我们也不会和同事谈什么知心话,因为我们已经知道,不可能与有利益冲突的人成为朋友,当然我们也不再愚蠢地把这个工作当事业一样拼命,只把这里当成自己的一个跳板,一旦有机会就立马走人。
  
  接下来的生活无趣又无味,但我们渐渐的也就无所谓了。我们也不想泡吧了,不想什么活着的意义了,老同学在一起也开始有点话不投机了,以前很少联系的朋友,现在更不想去联系了,就算有时候接到他们打来的电话,也只是随便吭吭唷唷的应付几句。虽然酒还是经常喝,但很多时候都一个人独饮独醉了。这时候我们的寂寞更是深入骨髓,我们的苦痛更加真切而细腻。我们空前地怀念在学校的那些岁月,我们会捧着毕业合照发半天呆,我们却不想再到母校去闲逛了,如果是偶然经过,看到曾经熟悉无比的景物,心里还真的翻涌起一股酸楚,但是我们不会流眼泪。毕业时曾经很贱的男儿泪如今又变得珍贵起来。
  
  当然我们也还是经常上网,不过很多时候都是为了打发时间。我们很可能迷上了传奇之类的游戏,却很少再光顾同学录网页,更不想在上面留言了。
  
  我们无师自通的学会了自欺欺人,虽然我们在夜深梦回时也会憎恨自己的虚伪与无为,更讨厌这种猪狗不如的生活方式,但是我们就象被囚禁的鸟,根本就无能为力。有时候我们会自嘲似的给找很多借口来解释自己的某种行为,尽管我们也知道这样做其实毫无意思,也毫无必要。
  
  我们开始不断地听到老同学们结婚的消息、升职的消息。然后我们不经意地就想到某某在学校时的样子,然后我们不由得感叹时间流逝之无情,然后我们就想在尘封已久的日记本上写点什么,然后我们不知不觉地眼角竟然也有点湿润了。
  
  我们夜里躺在床上睁大眼睛,却无法在漆黑中排遣郁闷时,就会格外的想有个人陪在身边。很多往事会像潮水一样向我们扑来。我们曾经暗恋过的人、曾经追求过但失败了的人、曾经相爱过的人,都一一地闪过脑海,于是,心里会有种伤感,很纯粹的伤感。因为我们知道,爱情其实真的已经与我们离得很远。
  
  我们试着通过各种途径来结交朋友,但是每每交往了几次,我们就不想再与他们来往。说不清楚是因为他们太过于现实还是我们太封闭。我们于是感慨万千,在这个很多人都戴面具生活的社会,原来交一个真正的朋友竟然那么难。我们也试着去约会,可是爱情并非喝水吃饭那么简单,到最后都还是以失败告终。高不成低不就的我们继续高举单身的旗帜游走于大街小巷。
  
  我们非常怀念学生时代那种单纯的恋情,非常羡慕那些还能坐在教室中的年轻人,非常希望自己可以再读一次大学,但是我们也知道,泼出去的水怎么能够收回,远逝的时光如何可能重来?
  
  我们的酒量越来越大,一打啤酒喝下去一只手指在眼前竖着也无法看成两只手指。我们的腰越来越粗背越来越宽肚皮越来越大,日渐增多的脂肪很是晃眼。我们爬上楼梯的动作越来越笨拙,也越来越吃力,才到三楼就已经气喘吁吁。
  
  我们向往着能到外面去走一走,看一看,却又害怕沦落天涯,苦不堪言。我们越来越觉得钱钟书老人的围城理论精辟有理。我们越来越体会到人在江湖身不由己的无奈。我们越来越感到心力交瘁,压抑茫然。
  
  ……
  
  可是,以后的路还很长,无论如何,我们得活下去。不管是痛苦还是快乐,我们都要面对。毕竟想逃避也逃避不了的。所以,我们还是希望,明天是一个阳光灿烂的大好日子。而且,我们骨子里仍然相信自己会走出阴霾,出人头地。
  
  再回首,灯火阑珊处没有伊人,只有自己的梦想在风中轻轻地摇曳……
==================================

忘了加转,不好意思,并没有要把这篇文章据为己有的意思,我向来很尊重别人的知识版权。

]]>

No Comments | Tags: ,

幸福处方[转]

  一、做个乐天派。高位和富有可能是欢乐的源头,卑贱与贫穷亦不排除欢乐。能做个乐天派,会拥有一辈子好心情。人在受挫折、遭不幸的时候,情绪往往低落,但只要想得开,多一点积极性,一切又何足道哉?好心情使人安然恬适,是健康之本,是幸福的基础。

  二、珍视友善。孩子的亲近,朋友的微笑,邻人乃至路人助你一臂之力,都是你心灵的享受。尽管这些是稍纵即逝的,然而,只要你经常拥有,你就有一个人间的春天。

  三、丢开痛苦。痛苦像一座山,拦在路上走不开,压在心上吃不开,然而,山是死的,人是活的,不把他当回事,丢开它,他就等于不存在。

  四、风险自我。为大多数人服务是人生大节,无论何时何地,这个宗旨总应珍藏于心,体现于行,你为大家造福,这福之大海,永远可以荡漾你生命的小舟。

  五、别羡慕天天堂在沙发上的福气。养尊处优,实在是“养君处忧”。要知道,身体力行才是真正良好的自我感受。

  六、不要跟别人一般见识。囿于眼前方寸,难免鼠目寸光。放眼浩瀚,容人之短长,与人和谐相处,相得益彰,自然海阔天空,风光无限。

  七、或到老学到老。知识是人生的太阳,知识就是力量。经常学习,大脑不闭塞,耳聪目明,事业中中中成功的喜悦也能经常供你享受。

  八、别把金钱看得太重。不要一钱如命,更不能重财轻义。有位名人说得好,“金钱是好仆人,有时也会摇身一变,成为坏主人。”做人的奴隶不幸福,做钱的奴隶也很苦。许多人善谋财而不善谋福,到头来还是无幸福可言。

  九、一生之计在于勤。勤劳永远是幸福的支柱。爱劳动不仅可以获得财富,更能减少种种思想压力,使你远离空虚、浮躁与烦恼。

  十、坚持体育锻炼。“生命在于运动”。法国医学家蒂索有句名言,“运动就其作用来说,几乎可以代替任何药物,但是,世界上的一切药品并不能代替运动的作用。”显然,运动是健康的前提。而没有健康的人,何言幸福?

No Comments | Tags: ,

十个经典的爱情短文

(一)?
开始的开始总是甜蜜的?
后来就有了厌倦、习惯、背弃、寂寞、绝望和冷笑?
曾经渴望与一个人长相厮守,后来,多么庆幸自己离开了?
曾几何时,在一段短暂的时光里,?
我们以为自己深深的爱着的一个人。?
后来,我们才知道?
那不是爱,那只是对自己说谎。?
?
(二)?
你以为不可失去的人,原来并非不可失去,?
你流干了眼泪,自有另一个人逗你欢笑,?
你伤心欲绝,然后发现不爱你的人,?
根本不值得你为之伤心,?
今天回首,何尝不是一个喜剧??
情尽时,自有另一番新境界,?
所有的悲哀也不过是历史。?
?
(三)?
爱情总是想象比现实美丽,?
相逢如是,告别亦如是。?
我们以为爱得很深、很深,?
来日岁月,会让你知道,它不过很浅、很浅。?
最深最重的爱,必须和时日一起成长。?
?
(四)?
因为爱情的缘故,?
两个陌生人可以突然熟络到睡在同一张床上。?
然而,相同的两个人,在分手时却说,我觉得你越来越陌生。?
爱情将两个人由陌生变成熟悉,又由熟悉变成陌生。?
爱情正是一个将一对陌生人变成情侣,又将一对情侣变成陌生人的游戏。?
?
(五)?
相信爱情可以令一个人改变,?
是年轻的好处,也是年轻的悲哀。?
浪子永远是浪子。令男人改变的,?
也许是上帝的爱或者佛祖的慈悲,但绝对不会是女人。?
最不宜结婚的是浪子,最适宜结婚的也是浪子。?
往往不是女人改变一个浪子,而是女人在浪子想改变的时候刚好出现。?
?
(六)?
想男人的一生,不过对女人做两件事:?
超乎她想象的好和超乎她想象的坏。?
女人?”?
你稀松平常地回答:”我很好。”?
而其实你还爱着他,你一点也不好。?
男人伪装坚强,只是害怕被女人发现他软弱。?

No Comments | Tags: , ,

On having layout

On having layout本文修订中
当前版本:Rev. 7 2006–05–17
http://www.satzansatz.de/cssd/onhavinglayoutrev07-20060517.html
修订历史
http://www.satzansatz.de/cssd/layoutchangelog.html
各种语言版本
目录

介绍

Internet Explorer 中有很多奇怪的渲染问题可以通过赋予其“layout”得到解决。John Gallant 和 Holly Bergevin 把这些问题归类为“尺寸bug(dimensional bugs)”,意思是这些 bug 可以通过赋予相应元素某个宽度或高度解决。这便引出关于“layout”的一个问题:为什么它会改变元素的渲染特性,为什么它会影响到元素之间的关系?这个问题问得很好,但却很难回答。在这篇文章中,我们专注于这个复杂问题会有那些方面的表现,某一方面的具体讨论和范例请参考文中给出的相关链接。

hasLayout — 定义

“Layout”是一个 IE/Win 的私有概念,它决定了一个元素如何显示以及约束其包含的内容、如何与其他元素交互和建立联系、如何响应和传递应用程序事件/用户事件等。
这种渲染特性可以通过某些 CSS 属性被不可逆转地触发。而有些 HTML 元素则默认就具有“layout”。
微软的开发者们认为元素都应该可以拥有一个“属性(property)”(这是面向对象编程中的一个概念),于是他们便使用了 hasLayout,这种渲染特性生效时也就是将 hasLayout 设成了 true 之时。
术语
当我们说一个元素“得到 layout”,或者说一个元素“拥有 layout” 的时候,我们的意思是指它的微软专有属性 hasLayout http://msdn.microsoft.com/worksh … rties/haslayout.asp 为此被设为了 true 。一个“layout元素”可以是一个默认就拥有 layout 的元素或者是一个通过设置某些 CSS 属性得到 layout 的元素。
而“无layout元素”,是指 hasLayout 未被触发的元素,比如一个未设定宽高尺寸的干净 div 元素就可以做为一个“无layout祖先”。
给一个默认没有 layout 的元素赋予 layout 的方法包括设置可触发 hasLayout = true 的 CSS 属性。参考默认 layout 元素以及这些属性列表。没有办法设置 hasLayout = false , 除非把一开始那些触发 hasLayout = true 的 CSS 属性去除。

问题种种

hasLayout 的问题不管新手还是老手,不管设计师或者程序员可能都遇到过。Layout 在显示盒子时有着不同寻常而且难以预料的效果,而且有时甚至会牵连到他们的孩子元素。
一个元素是否具有“layout”可能会引发如下的一些问题:
IE 很多常见的浮动 bug 。
元素本身对一些基本属性的异常处理问题。
容器和其子孙之间的边距重叠(margin collapsing)问题。
使用列表时遇到的诸多问题。
背景图像的定位偏差问题。
使用脚本时遇到的浏览器之间处理不一致的问题。

上面的列表只是列出一个大概,也不完善。下面的文章将尽可能详细彻底的描述有无“layout”所带来的各种问题。

Layout 从何而来

不同于标准属性,也不像某些浏览器的私有 CSS 属性,layout 无法通过某一个 CSS 声明直接设定 。也就是说没有“layout属性”这么一个东西,元素要么本身自动拥有 layout,要么借助一些 CSS 声明悄悄地获得 layout。
默认layout元素
下列元素应该是默认具有 layout 的:

[Copy to clipboard] [ - ]

CODE:

<html>, <body> <table>, <tr>, <th>, <td> <img> <hr> <input>, <select>, <textarea>, <button> <iframe>, <embed>, <object>, <applet> <marquee>
属性
下列 CSS 属性和取值将会让一个元素获得 layout:
position: absolute
绝对定位元素的包含区块(containing block)就会经常在这一方面出问题。
float: left|right
由于 layout 元素的特性,浮动模型会有很多怪异的表现。
display: inline-block
当一个内联级别的元素需要 layout 的时候往往就要用到它,这也可能也是这个 CSS 属性的唯一效果——让某个元素拥有 layout。“inline-block行为”在IE中是可以实现的,但是非常与众不同: IE/Win: inline-block and hasLayout http://www.brunildo.org/test/InlineBlockLayout.html
width: 除 “auto” 外的任意值
很多人遇到 layout 相关问题发生时,一般都会先尝试用这个来修复。
height: 除 “auto” 外的任意值
height: 1% 就在 Holly Hack 中用到。
zoom: 除 “normal” 外的任意值 (MSDN) http://msdn.microsoft.com/worksh … properties/zoom.asp
MS专有属性,无法通过校验。 不过 zoom: 1 可以临时用做调试。
writing-mode: tb-rl (MSDN) http://msdn.microsoft.com/worksh … ies/writingmode.asp
MS专有属性,无法通过校验。

在 IE7 中,overflow 也变成了一个 layout 触发器:
overflow: hidden|scroll|auto
这个属性在之前版本 IE 中没有触发 layout 的功能。
overflow-x|-y: hidden|scroll|auto
overflow-x 和 overflow-y 是 CSS3 盒模型中的属性,尚未得到浏览器的广泛支持。他们在之前版本IE中没有触发 layout 的功能。

另外 IE7 的荧幕上又新添了几个 haslayout 的演员,如果只从 hasLayout 这个方面考虑,min/max 和 width/height 的表现类似,position 的 fixed 和 absolute 也是一模一样。
position: fixed
./.
min-width: 任意值
就算设为0也可以让该元素获得 layout。
max-width: 除 “none” 之外的任意值
./.
min-height: 任意值
即使设为0也可以让该元素的 haslayout=true
max-height: 除 “none” 之外的任意值
./.

以上结论借助 IE Developer Toobar 以及预先测试得出。
有关内联级别元素
对于内联元素(可以是默认即为内联的比如 span 元素,也可以是 display: inline 的元素)
width 和 height 只在 IE5.x 下和 IE6 或更新版本的 quirks 模式下触发 hasLayout 。而对于 IE6,如果浏览器运行于标准兼容模式下,内联元素会忽略 width 或 height 属性,所以设置 width 或 height 不能在此种情况下令该元素具有 layout。
zoom 总是可以触发 hasLayout,但是在 IE5.0 中不支持。

具有“layout” 的元素如果同时也 display: inline ,那么它的行为就和标准中所说的 inline-block 很类似了:在段落中和普通文字一样在水平方向和连续排列,受 vertical-align 影响,并且大小可以根据内容自适应调整。这也可以解释为什么单单在 IE/Win 中内联元素可以包含块级元素而少出问题,因为在别的浏览器中 display: inline 就是内联,不像 IE/Win 一旦内联元素拥有 layout 还会变成 inline-block。
脚本属性 hasLayout
我们这里称 hasLayout 为“脚本属性”是为了和我们熟知的 CSS 属性相区别。
注意一旦一个元素拥有了 layout,就没有办法再将其设成 hasLayout = False 了。
hasLayout-property http://msdn.microsoft.com/worksh … rties/haslayout.asp可以用来检测一个元素是否拥有 layout:举个例子,如果它的 id 是“eid”,那么只要在 IE5.5+ 的地址栏里输入 javascript: alert(eid.currentStyle.hasLayout) 即可检测它的状态。
IE的 Developer Toolbar http://www.microsoft.com/downloa … &displaylang=en可以实时检查一个元素的当前样式;如果 hasLayout 是 true ,那么它的值显示为 “-1”。 我们可以通过实时修改一个元素的属性将“zoom(css)”设置为“1”来触发 hasLayout 以便调试。
另外一个需要注意的是“layout”会影响脚本编程。如果一个元素没有“layout”,那么clientWidth/clientHeight 总是返回0。这会让一些脚本新手感到困惑,而且这和 Mozilla 浏览器的处理方式也不一样。不过我们可以利用这一点在 IE5.0 中检测“layout”:如果 clientWidth 是零那么这个元素就没有 layout。

CSS hacks

下面用于触发 haslayout 的 hack 已经经过 IE6 及以下版本测试。今后版本的IE有可能会对此做不同处理。如果新版本浏览器发布我们会重新整理这部分内容。
John Gallant 和 Holly Bergevin 在2003年发布的 Holly hack http://www.communitymx.com/conte … age=2&cid=C37E0

[Copy to clipboard] [ - ]

CODE:

/* \*/??* }??/* */
可以让 IE5+ 的任意元素获得 layout,除了标准兼容模式 IE6 中的内联元素。
一般都很有效,除了在某些极少情况下,需要用 height:0 或者 1px 更好一些。
和 overflow: hidden 不相容,除非在 IE6 的标注兼容模式下(因为这时如果父元素没有定高,那么height: 1% 会被变回 height: auto)。

或者我们可以用 underscore hack:http://wellstyled.com/singlelang.php?lang=en&page=css-underscore-hack.html

[Copy to clipboard] [ - ]

CODE:

.gainlayout }
另外,更具有向后兼容性的方法是使用 条件注释(conditional comments):http://msdn.microsoft.com/workshop/author/dhtml/overview/ccomment_ovw.asp

[Copy to clipboard] [ - ]

CODE:

<!–[if lte IE 6]>
<style>
.gainlayout }
</style>
<![endif]–>??
在条件注释中链接一个专门对 IE/Win 做修正的外部样式表文件,也不失为一个安全有效的好方法:

[Copy to clipboard] [ - ]

CODE:

<link rel=”stylesheet” href=”allbrowsers.css” mce_href=”allbrowsers.css” type=”text/css” />
????
<!–[if lte IE 6]>
<link rel=”stylesheet” href=”iefix.css” mce_href=”iefix.css” type=”text/css” />
<![endif]–>
我们更倾向于使用 height: 0 和 1px —— 并主张始终使用 height 除非它和别的什么东西冲突 (overflow: hidden)。对于取值,我们则倾向于避免 1% ,因为它可能会(虽然很少)引起一些问题。http://www.brunildo.org/test/relayout.html
height 不能应用于标准模式下的内联元素。在这种情况下我们可以用 display: inline-block 或 zoom: 1。
我们曾看过一些把 Holly hack 真的当作 holy(神圣的) hack 盲目使用的情况,比如对浮动元素使用或者对已经具有特定宽度的元素也使用这个 hack。要记住这个 hack 的目的不是要给某个元素加一个高度,而只是要触发 hasLayout =}。所谓过犹不及,获得 layout 不等于获得灵丹妙药,它只是用来改变渲染模式。
Hack整理
但是浏览器总是会变的,我们需要面对很多问题,比如一些依赖 IE6 的 bug 所做的 hack 会在 IE7 或更高版本的新浏览器中因 bug 修复而失效(甚至有害)的问题;比如新版本浏览器中类似的布局 bug 依然存在但用于 hack 的过滤器比如 * html 却不能正常工作的问题。这种情况下,MS专有属性 zoom 就可以考虑使用了。

[Copy to clipboard] [ - ]

CODE:

<!–[if lt IE 7]><style>
/* }
</style><![endif]–>
????
<!–[if IE 7]><style>
.gainlayout}
/* 或者其他任何以后可能需要的东西 */
</style><![endif]–>
zoom: 1; 可以让 IE5.5+ 的任何元素(包括内联元素)获得 layout,但是在 IE5.0 中无效。
没有其他附带效果(内联元素会变成 inline-block,这个当然)。
如果需要通过验证,应该用条件注释将 zoom 隐藏起来。

其实当我们考虑到“向后兼容”时是很自相矛盾的,我们强烈建议页面设计者回过头看一下自己页面中用的到的明显的或是不明显的“hacks”,并用条件注释针对不同浏览器重新处理以保万无一失。

关于IE Mac 的小问题

IE Mac 和 windows 下的 IE 是完全不同的两个东西,它们各自拥有自己的渲染引擎,IE Mac 就全然不知“hasLayout”(或contenteditable)所谓何物。相比之下 IE Mac 的渲染引擎要更标准兼容一点,比如 height 就是被当作 height 处理,没有别的效果。因此针对“hasLayout”的 hacks 和别的解决方法(特别是通过使用 height 或 width 属性的)往往对 IE Mac 来说是有害的,所以需要对其隐藏。更多的关于 IE Mac 相关的问题可以在 IE Mac, bugs and oddities pages http://www.l-c-n.com/IE5tests/找到。

MSDN 文档

MSDN 中涉及到 hasLayout 这个 MS 属性的地方寥寥无几,而具体解释 layout 和 IE 渲染模型之间关系的则少之又少。
在IE4的时候,除了未经绝对定位也未指定宽高的内联元素,几乎所有元素都有某种 layout(MSDN)。http://msdn.microsoft.com/worksh … mentandlocation.asp在这种早期的layout概念中,像 border, margin, padding 这些属性被称作“layout属性”,它们是不能应用到一个简单的内联元素上的。换句话说,“拥有layout”就可以粗略理解成:“可以拥有这几个属性”。
MSDN 上仍然使用 layout 属性这种说法, 只是含义变了,它们和拥有 layout 的元素已经没有什么关系了。在 IE5.5 中方才引入了 MS 的这个专有属性 hasLayout,http://msdn.microsoft.com/worksh … rties/haslayout.asp也只是某种内部的标志位而已。
在 IE5.5 中,MSHTML Editing Platform(即可以通过设置来允许用户实时编辑、拖动 layout 元素以及调整其尺寸等)的文档中描述了三个和 layout 相关的重要特性:
如果一个 layout 元素中有内容,内容的排版布局将由它的边界矩形框决定。
拥有 layout 的意思基本上就是表示某元素是一个矩形。
从内部来说,拥有 layout 意思就是一个元素将自己负责绘制其内部内容。

(Editing Platform) http://msdn.microsoft.com/librar … mshtmleditplatf.asp

和 layout 自身相关的内部工作机制直到2005年8月才有相应文档描述,当时由于 The Web Standards Project http://www.webstandards.org/和微软的特别工作小组的原因,Markus Mielke [MSFT] 打开了深入讨论的大门:
一般来说,在 Internet Explorer 的 DHTML 引擎中,元素是不对自己的位置安排负责的。虽然一个 div 或者一个 p 元素都在源码中有一个位置,在文档流有一个位置,但是它们的内容却是由它们最近的一个 layout 祖先(经常是 body)控制安排的。这些元素依赖它们祖先的 layout 来为他们处理诸如决定大小尺寸和测量信息等诸多繁重的工作。

(HasLayout概述)http://msdn.microsoft.com/library/default.asp?url=/library/en-us/IETechCol/cols/dnexpie/expie20050831.asp

分析

我们的分析试图解释在已知案例下发生了什么事情,这种分析也应该可以作为未知案例下的指导。但我们这种试图利用种种测试案例投石探路的黑箱测试方法,是注定无法消除黑箱的神秘感的——我们无法回答“为什么”的问题。我们只能去尝试了解整个“hasLayout”模式的工作框架,以及它会怎样影响网页文档的渲染。因此,最终我们只能提供一些指导方针(而且只能是指导方针,而不是绝对的解决方案)。
我们认为他们所指的是一个小窗体。一个 layout 元素的内部内容是完全独立的,而且也无法影响其边界外的任何内容。
而 MS 属性 layout 只是某种标志位:一旦它被设定,这个元素就会拥有 layout“特性”,这包括体现在其自身以及其非 layout 孩子元素身上的特殊性能——比如浮动和层叠等。
这种独立性也许正可以解释为什么 layout 元素通常比较稳定,而且它们可以让某些 bug 消失。这种情况的代价有二,一是偏离了标准,二是它没有考虑到今后可能因此出现的 bug 和问题。
MS 的“页面”模式,从符号学角度考虑,可以看做是由很多互不相关的小的区块构成,而 HTML 和 W3C 的模式则认为“页面”模式应该是叙述完备的,故事性的相关信息区块构成的。

各种情况的详细说明

清除浮动和自动扩展适应高度
浮动元素会被 layou 元素自动包含。这是很多新手经常遇到的问题:在 IE 下完成的页面到了标准兼容浏览器下所有未清除的浮动元素都伸出了其包含容器之外。
Containing Floats http://www.complexspiral.com/publications/containing-floats
how to clear floats without structural markup http://positioniseverything.net/easyclearing.html

相反的情况:如果确实需要一个浮动元素伸出其包含容器,也就是自动包含不是想要的效果时,该怎么办?你很可能也会遇到这种头疼的问题,下面的深入讨论就是一个例子:
acidic float tests http://www.satzansatz.de/cssd/acidicfloat.html

在IE中,一个浮动元素总是“隶属于”它的 layout 包含容器。而后面的元素会受这个 layout 包含容器影响而不是这个浮动元素影响。
这个特性和IE6的那个自动扩展以适应内部内容宽度的特性,都可以看成是受这个规则影响的:“由它的边界矩形框决定”。
更糟的问题:clear 无法影响其 layout 包含容器之外的 float 元素。如果依赖这个 bug 在 IE 中布局的页面要转到标准兼容浏览器中,只有全部重做。
IE 的自动包含浮动元素也是经常需要的效果,它在其他浏览器中也可以达到:参考我们的 “和 CSS 规范类似的地方” 这一部分来了解一下包含浮动元素的相关内容。
浮动元素旁边的元素
当一个块级元素紧跟在一个左浮动元素之后时,它应该——作为一个块级元素——忽略这个浮动元素,而它的内容则应该因这个浮动元素而移位:一个紧跟在左浮动元素后的块级元素内的文字内容,应该沿着浮动元素的右边顺序排列并会(如果它的长度超过浮动元素)继续排列到浮动元素下方。但是如果这个块级元素有 layout,比如由于某种原因被设置了宽度,那么这整个元素则会因浮动元素而移位,就好像它自己也是一个浮动元素一样,因此其中的文字就不再环绕这个左浮动元素了(而会形成一个矩形区域,保持在它的右边。)
在 IE5 中一个块级元素的百分比宽度是基于浮动元素旁边的剩余空间计算的,而在 IE6 中则是依照整个父块级元素的可用空间计算的。所以在 IE6 中设置 width: 100% 会导致某种浮动元素旁边的溢出现象,于是各种布局问题也会因此而来。
一些关于浮动块旁边的 hasLayout 块的测试案例:
by using width http://dev.l-c-n.com/IEW2-bugs/float-layout.php
by using min-width (IE 7) and zoom (IE 6) http://dev.l-c-n.com/IEW2-bugs/float-adjecant.php

与此类似,和浮动元素相邻的相对定位元素,它的位置偏移量应该参照的是父元素的补白(padding)边缘(例如,left: 0; 是从浮动元素的右边距(margin)边缘开始算起的,这会因浮动元素所占的宽度变化导致水平方向的错位(一个解决方法是用 margin-left 代替,但是也要注意如使用百分值时会有一些怪异问题)。
layout blocks with relative positioning adjacent to floated blocks http://dev.l-c-n.com/IEW2-bugs/float-layout2-rp.php

根据规范所述,浮动元素应该与其后的盒子交织在一起。而对于没有交叉的二维空间中的矩形而言这是无法实现的。
如果谁真的需要向 IE 的这种不当行为屈服,那么如何让标准兼容浏览器中的盒子也有类似行为——即类似于 layout 盒子会自动“收缩”而给其前置的浮动元素让出空间的行为——就是一个问题了。我们给出的方法是跟着一个浮动元素创建一个新的块级格式化范围(block formatting context),这在我们的“和 CSS 规范类似的地方” 有讨论。
可以(再次)访问下面这个页面:
three pixel text-jog http://positioniseverything.net/explorer/threepxtest.html

我们可以看到跟在一个浮动元素后的 layout 元素不会显示这个3px间隙的 bug,因为浮动元素外围的3px硬边无法影响一个 layout 元素的内部内容,所以这个硬边将整个 layout 元素右推了3px。好比一个防护罩,layout 可以保护其内部内容不受影响,但是浮动元素的力量却将整个防护罩推了开来。
列表
无论是列表本身(ol, ul) 还是单个的列表元素(li),拥有 layout 后都会影响列表的表现。不同版本 IE 的表现又有不同。最明显的效果就体现在列表符号上(如果你的列表自定义了列表符号则不会受这个问题影响)。这些符号很可能是通过某种内部机制附到列表元素上的(通常是附着在它们外面)。不幸的是,由于是通过“内部机制”添加的,我们无法访问它们也无法修正它们的错误表现。
最明显的效果有:
列表获得 layout 后,列表符号会消失或者被放置在不同的或者错误的位置。

有时它们又可以通过改变列表元素的边距而重新出现。这看起来似乎是以下事实导致的结果:layout 元素会试图裁掉超出其边界的内部内容。
列表元素获得 layout 之后,会有和上面一样的问题出现,更多参考 (extra vertical space between list items)http://www.brunildo.org/test/IEWlispace.php

进一步又有一个问题就是(在有序列表中)任何具有 layout 的列表元素似乎都有自己独立的计数器。比如我们有一个含五个列表元素的有序列表,只有第三个列表元素有 layout。我们会看到这样:
1… 2… 1… 4… 5…
此外,如果一个有 layout 的列表元素跨行显示时,列表符号会底部对齐(而不是按照预料的顶部对齐)。
以上某些问题还是无法解决的,所以如果需要列表符号的时候最好避免让列表和列表元素获得 layout。如果需要限定尺寸,最好给别的元素设定尺寸,比如给整个列表外面套一个元素并设定它的宽度,又或者比如给每个列表元素中的内容设定高度等等。
另一个IE中列表的常见问题出现在当某个 li 中的内容是一个 display: block 的锚点(anchor)时。在这种情况下,列表元素之间的空格将不会被忽略而且通常会显示成额外的一行夹在每个 li 之间。一种避免这种竖直方向多余空白的解决方法是赋予这些锚点 layout。这样还有一个好处就是可以让整个锚点的矩形区域都可以响应鼠标点击。
表格
table 总是有 layout 的,它总表现为一个已定义宽度的对象。在IE6中,table-layout: fixed http://msdn.microsoft.com/worksh … ies/tablelayout.asp通常和一个宽度设为100%的表格相同,同时这也会带来很多问题(一些计算方面的错误)。另外在IE5.5和IE6的quirks模式下还有一些别的需要注意的情况。http://dev.l-c-n.com/tables_2/
相对定位元素(r.p.)
注意,由于 position: relative 并不触发 hasLayout,所以很多诸如内容消失或错位的渲染错误就会因此而起。这些现象可能会在刷新页面、调整窗口大小、滚动页面、选中内容等情况下出现。原因是 IE 在据这个属性对元素做偏移处理时,却似乎忘了发出信号让其 layout 孩子元素进行“重绘”(而如果是一个layout元素,那么在其重绘事件的信号链中,这个传给其孩子的信号是会正常发出的)。
r.p. parent and disappearing floated child http://www.satzansatz.de/cssd/rpfloat.html
disappearing list-background bug http://positioniseverything.net/explorer/ie-listbug.html

以上是一些相关问题的描述。作为经验之谈,相对定位一个元素时最好给予其 layout。再有,我们也需要检查拥有这种结构的父元素是否也需要 layout 或者position: relative亦或二者都需要,如果涉及到浮动元素这点就十分重要。
绝对定位元素(a.p.):
包含区块,什么是包含区块?
理解 CSS 的包含区块概念很重要,它回答了绝对定位元素是相对哪里定位的问题:包含区块决定了偏移起点,包含区块定义了百分比长度的计算参考。
对于绝对定位元素,包含区块是由其最近的定位祖先决定的。如果其祖先都没有被定位,那么就使用初始包含区块 html。
通常情况下我们会用 position: relative 来设定任意包含区块。这就是说,我们可以让一个绝对定位元素所参考的原点和长度等不依赖于元素的排列顺序,这可以满足诸如“内容优先”这种可访问性概念的需要,也可以给复杂的浮动布局带来方便。
但是由于 layout 概念的存在,这种设计理念的效果在IE中就要打个问号了:因为在IE中绝对定位只有当其包含元素拥有 layout 时才会计算正确,而且绝对定位元素的百分比宽度参考也搞错了对象。这里 IE5 和 IE6 的行为不同但都有问题。IE7b2 的行为就要好很多,虽然有些小地方还是有错误。总之尽可能的让绝对元素的包含区块拥有 layout,而且尽量让其就是绝对定位元素的父级元素(也就是说这个包换元素和绝对定位元素之间没有绝对定位元素的别的祖先了)。
假设一个无 layout 的父元素被相对定位了——我们就得给它赋予 layout 才能使偏移量起作用:
Absolutely Buggy II http://www.positioniseverything.net/abs_relbugs.html

假设一个未定位的父元素需要特定尺寸,而且页面设计是基于百分比宽度的——我们就可以放弃这个想法了,因为浏览器支持不佳:
absolutely positioned element and percentage width http://www.satzansatz.de/cssd/tmp/apboxpercentagewidth.html
滤镜
MS专有的滤镜属性 filter http://msdn.microsoft.com/workshop/author/filter/filters.asp是只适用于 layout 元素的。有些滤镜扩展了对象的边界。它们会显示出自身特有的缺陷。http://www.satzansatz.de/cssd/tmp/alphatransparency.html
对已渲染元素的重排(re-flow)
当所有元素都已渲染完成时,如果有一个因鼠标经过而引起的变化产生(比如某个链接的 background 有变化),IE会对其 layout 包含区块进行重排。有时一些元素就会因此被排到了新的位置,因为当这个鼠标经过发生时,IE已经知道了所有相关元素的宽度、偏移量等数据了。这在文档首次载入时则不会发生,那时由于自动扩张的特性,宽度还无法确定。这种情况会导致在鼠标经过时页面出现跳变。
Jump on :hover http://www.satzansatz.de/cssd/pseudocss.html#hoverjump
quirky percentages: the reflow http://www.positioniseverything.net/explorer/percentages.html

这些和重排问题相关的 bug 会给百分比边距和补白使用较多的流动布局带来不少麻烦。
背景原点
MS专有的这个 hasLayout 还会影响背景的定位和扩展。比如,根据 CSS 规范,http://www.w3.org/TR/CSS21/colors.html#q2background-position: 0 0 应该指元素的“补白边缘(padding edge)”。而在 IE/Win 下,如果 hasLayout = false 则指的是“边框边缘(border edge)”,当 hasLayout=true 时指的才是补白边缘:
Background, Border, hasLayout http://www.brunildo.org/test/BackgroundBorderLayout.html

边距重叠
hasLayout 会影响一个盒子和其子孙的边距重叠。根据规范,一个盒子如果没有上补白和上边框,那么它的上边距应该和其文档流中的第一个孩子元素的上边距重叠:
Collapsing Margins http://www.w3.org/TR/CSS21/box.html#collapsing-margins
Uncollapsing Margins http://complexspiral.com/publications/uncollapsing-margins

在 IE/Win 中如果这个盒子有 layout 那么这种现象就不会发生了:似乎拥有 layout 会阻止其孩子的边距伸出包含容器之外。此外当 hasLayout = true 时,不论包含容器还是孩子元素,都会有边距计算错误的问题出现。
Margin collapsing and hasLayout http://www.brunildo.org/test/IEMarginCollapseLayout.html

块级别的链接
hasLayout 会影响一个块级别链接的鼠标响应区域(可点击区域)。通常 hasLayout = false 时只有文字覆盖区域才能响应。而 hasLayout = true 则整个块状区域都可响应。添加了 onclick/onmouseover 等事件的任意块级元素也有同样的现象。
Block anchors and hasLayout http://www.brunildo.org/test/IEABlock1.html

在页面内使用键盘浏览:探索中
当使用 tab 在页面中浏览时,如果进入了一个页内链接(in-page link),那么接下来再按的 tab 键就不会正常继续了:
hasLayout Property Characterizes IE6 Bug http://jimthatcher.com/news.htm#haslayout
Keyboard Navigation and Internet Explorer http://juicystudio.com/article/ie-keyboard-navigation.php
tab 键会把用户带到(这通常是错误的)其最近的 layout 祖先中的第一个目标(如果这个祖先是由 table, div, span 或某些别的标签构成)。

收缩包围(shrink-wrapping)现象
给已经有 width: auto 的元素添加某些属性会导致它们在计算自身宽度时使用一种收缩包围的算法。比如这些属性 float: left|right, position: absolute|fixed, display: table|table-cell|inline-block|inline-table.
这些属性造成的现象在IE/Win中也存在,当然这是只对那些它支持的属性而言。但是当一个应该收缩包围的元素中包含一个拥有“layout”的块级元素时,在绝大多数情况下,这个孩子元素的宽度会尽可能地扩展而与其中包含的内容无关,同时也阻止了父元素的收缩包围现象。
例子: http://dev.l-c-n.com/IEW2-bugs/shrinkwrap.php
一个浮动的纵向导航无序列表并没有收缩包围,因为其中的链接为了消除列表的多余空白bug并扩展可点击区域而拥有了}。

这时收缩包围现象只有在以下情况仍然有效:拥有 layout 的孩子元素同时也被赋予了一个特定宽度,或者这个孩子元素本身也是一个具有收缩包围特性的元素,比如浮动元素。
边缘裁切
通常而言,当一个盒子包含了诸如伸出其边缘的内容这种更复杂的结构时,这个容器就经常需要“hasLayout”来避免一些渲染错误。但使用这种常用方法又会在边界处理时左右为难,因为一个获得“layout”的元素会变成某种自封闭的盒子。
内部的内容盒子会被裁切,比如使用负边距向外移动时。
Clipping of negative margined blocks in a hasLayout container http://dev.l-c-n.com/IEW2-bugs/min-width-clip.php

被裁掉的部分当内容盒子触发了“layout”时可以再次出现,但在 IE6 中需要同时拥有 position: relative 才行。IE7 在这方面要略有改观,它不再需要额外的 position: relative 了。

堆叠,分层和 layout

IE/Win 中似乎有两种分层和堆叠顺序:
一种是(伪)试图采用CSS的模式:Effect of z-index value to RP and AP blocks http://www.aplus.co.yu/css/z-pos/
还有一种是由“hasLayout”及其孪生兄弟“contenteditable”的行为产生的堆叠顺序。正如在上面相对定位的例子中展现的那样,在 layout 影响下的堆叠现象就好像 Harry Houdini (译者注:魔术师,以纸牌魔术成名)的拿手戏法儿一样。

两种堆叠模式虽互不相容,但却共存于IE的渲染引擎中。经验之谈:调试的时候,两种情况都要考虑到。我们可能会有规律地在下拉菜单或者类似的复杂菜单中看到相关问题,因为它们往往牵涉到堆叠,定位和浮动等诸多令人头疼的问题。给那些 z-index 定位的元素 layout 是一种可能的修正方法,不过也不限于此,这里只是提醒一下。
混乱的 contenteditable
如果给一个 HTML 标签设定 contenteditable=true 属性,比如,将会允许对该元素以及其 layout 子元素进行实时的编辑、拖动改变尺寸等操作。你可以把这属性用在浮动元素或者一个有序列表中的 layout 列表元素上看看效果。
为了对元素进行操作(编辑它们),“contenteditable”和“hasLayout”为那些 hasLayout 返回 true 的元素引入了一套单独的堆叠顺序。
Editing Platform http://msdn.microsoft.com/librar … mshtmleditplatf.asp继承了 layout 概念,对 layout 的误解多是因 contenteditable 而起即可作为证明(那些某种程度上集成了IE编辑引擎的应用软件多暗含着对layout概念的某种强制向后兼容性)。
More on contenteditable http://annevankesteren.nl/2005/07/more-contenteditable

和 CSS 规范类似的地方

你的 MSIE 页面在别的浏览器中一团糟?我们可没必要让这种事情发生。如果使用恰当,任何好的浏览器都能摆平 MSIE 的页面——只要你使用一些正确的 CSS。
利用 hasLayout 和“新的块级格式化范围”http://www.w3.org/TR/CSS21/visuren.html#q15之间的细微相似之处,我们可以有几种方法在标准兼容浏览器中重新实现 hasLayout 的“包含浮动元素”http://www.w3.org/TR/CSS21/visudet.html#root-height效果,和一些“浮动元素旁边的元素”http://www.w3.org/TR/CSS21/visuren.html#floats所特有的效果。
Reverse engineering series http://www.gunlaug.no/contents/wd_example_01.html
Simulations http://dev.l-c-n.com/IEW/simulations.php

Quirks 模式

关于这种渲染模式的的信息,请参考我们的 quirks 模式 http://www.satzansatz.de/cssd/quirksmode.html章节。
Layout ——结论
整个 layout 概念和一些基本 CSS 概念是不兼容的,即包含,排列,浮动,定位和层叠等。
由于页面中元素或有或没有 layout,会导致 IE/Win 的行为和 CSS 规范相违背。

拥有 layout ——另外一个引擎?

IE 的对象模型看起来是文档模型和他们传统的应用程序模型的糅合。我之所以提到这点是因为它对于理解IE如何渲染页面很重要。而从文档模型切换到应用程序模型的开关就是给一个元素“layout”。

(Dean Edwards)

有时候要解释清楚某种行为是不可能的:就比如 hasLayout,会根据它的状态选择两种不同渲染引擎的一种使用,而且每一种都有其自己的 bug 和怪异之处。

不可消除的 bug

软件 bug 是由于在制作过程中对完整性和逻辑问题考虑不周等人为错误而导致的。这是人类的固有缺陷,目前还没有什么好的解决方法。
同样由于这种缺陷,任何试图不重写软件而修复 bug 的做法,都将会不可避免的导致软件中出现更复杂的bug。
所有依赖别的软件的软件——当然包括依赖操作系统,也会同样依赖他们的 bug。于是我们会从所有关联的软件中得到一连串的 bug,这也更说明找到一个无 bug 软件是几乎不可能的。

(Molly, the cat?)

本文创建于2005年6月30日,最后一次修改于2006年4月2日。
编者:
Holly Bergevin http://positioniseverything.net/
Ingo Chao http://www.satzansatz.de/css.html
Bruno Fassino http://www.brunildo.org/
John Gallant http://positioniseverything.net/
Georg S?rtun http://www.gunlaug.no/
Philippe Wittenbergh http://emps.l-c-n.com/

特别致谢给予此项目支持的:
Dean Edwards, and Molly ?the cat?

各种语言版本:
Original(English)
Brazilian? ?Portuguese by ? ? ? ?? ? ? ?? ? ? ?? ?Mauricio Samy? ?Silva
中文版本 by old9
Italian by Gabriele Romanato

相关讨论:
dean.edwards.name/weblog/

[url=mailto:spam.layout@satzansatz.de]联系作者:[/url]

版权说明:
本文基于创作共用协议发布。

目录

介绍
hasLayout —— 定义
术语
问题种种
Layout 从何而来
默认 layout 元素
属性
有关内联级别元素
脚本属性 hasLayout
CSS hacks
Hack整理
关于 IE Mac 的小问题
MSDN文档
分析
各种情况的详细说明
清除浮动和自动扩展适应高度
浮动元素旁边的元素
列表
表格
相对定位元素(r.p.)
绝对定位元素(a.p.):包含区块,什么是包含区块?
滤镜
对已渲染元素的重排(re-flow)
背景原点
边距重叠
块级别的链接
在页面内使用键盘浏览:探索中
收缩包围(shrink-wrapping)现象
边缘裁切
堆叠,分层和 layout
混乱的 contenteditable
和 CSS 规范类似的地方
Quirks 模式
Layout —— 结论
拥有 layout —— 另外一个引擎?
不可消除的 bug

No Comments | Tags: ,

70位专家谈CSS设计

70位专家谈CSS设计

原文取自smashing magazine 下面我对原文大致翻译一下, 以便大家阅读.


CSS 并不总是很好对付. 这取决于你的技巧和经验. CSS编码有时会成为一场噩梦, 特别是当你还不知道文件中的元素应该适用哪些选项的时候. 一个减少代码复杂性的简易法门, 就是利用哪些鲜为人知的CSS属性来创建适用性比较强的正确标注.

下面引用的70个专家技巧,附加了他们的相关文章地址.

1.1. Workflow: 上路

  • 当你确定了设计思路, 请用一个空白页面展开设计. “包括页头 , 导航条, 内容样例 和页脚 ?之后添加HTML标记, CSS控制,这样会让事情简单清晰起来.” [CSSing]
  • 务必要重置CSS样式表 “你可能会经常删除哪些不必要的特殊设置, 而充分利用每个特性的缺省值. 而另一些人则倾向于做全局重置 Global white space reset , 就是在样式表的开头把所有要素的边据(margin)和空距(padding)全部归零. Eric Meyer’s Global Reset(全局重置), Christian Montoya’s initial CSS file(初始化CSS文件), Mike Rundle’s initial CSS file, Ping Mag’s initial CSS file. [Roger Johansson]
  • 使用主样式表master stylesheet. “一个常见的错误就是, 我看到很多初学者和中级玩家, 在使用样式表的时候, 由于不同的浏览器对一些样式有不同的缺省设置, 再没有统一化的情况下, 就会导致在不同浏览器中显示效果不一致. 而招致程序员抱怨调试困难. 其实, 你只要重置这些设置, 很多问题都可以得到避免. ” [Master Stylesheet: The Most Useful CSS Technique(主样式表: 最有用的CSS技术)], [Ryan Parr]
  1. master.css
  2. @import url("reset.css");
  3. @import url("global.css");
  4. @import url("flash.css");
  5. @import url("structure.css");
  1. <style type="text/css" media="Screen">
  2. /*\*/@import url("css/master.css");/**/
  3. </style>
  • 保持一个有用的CSS对象库. 这对调试很有用, 但应该避免出现在发布的版本中. ?因为你可以同时使用多个类名称用来调试你的一个标记(i.e. <p class="floatLeft alignLeft width75">...</p>用了三个类名称来标记<p/>). [Richard K. Miller]
  1. CSS:
  2. .width100 { width: 100%; }
  3. .width75 { width: 75%; }
  4. .width50 { width: 50%; }
  5. .floatLeft { float: left; }
  6. .floatRight { float: right; }
  7. .alignLeft { text-align: left; }
  8. .alignRight { text-align: right; }

1.2. 组织化CSS编码

  • 使用主样式表组织化CSS “用主样式表组织化的样式非常有利于网站维护 . 在这个样式表中输入 reset.css, global.css, flash.css (如果需要) 和 structure.css 以及间歇使用的拓扑样式, 这里是一个如何使用这些技术的样例”
  1. h2 { }
  2. #snapshot_box h2 {
  3. padding: 0 0 6px 0;
  4. font: bold 14px/14px "Verdana", sans-serif; }
  5. #main_side h2 {
  6. color: #444;
  7. font: bold 14px/14px "Verdana", sans-serif; }
  8. .sidetagselection h2 {
  9. color: #fff;
  10. font: bold 14px/14px "Verdana", sans-serif; }
  1. /* -----------------------------------*/
  2. /* ---------->>> GLOBAL <<<-----------*/
  3. /* -----------------------------------*/
  • 用一个内容表来组织样式表. 在你的CSS文件头, 画一个内容表, 例如, 你可以勾画出CSS控制的不同区域, 用醒目的分割来划分他们. ?[5 Steps to CSS Heaven(5步跨进CSS天国)]
  • 用字母次序表规划样式表. “我不知道怎么想到这个主意的, 反正用了几个月, 发现找到这些样式很容易.(译者注: 对于中文用户, 除非每个样式的名称很准确,并能被大家理解, 否则可用性会很差.)” [Christian Montoya]
  1. body {
  2. background:#fdfdfd;
  3. color:#333;
  4. font-size:1em;
  5. line-height:1.4;
  6. margin:0;
  7. padding:0;
  8. }
  • 把代码分成不同的块.. “很多人直觉上都会这么做, 只要变成习惯, 经年累月的实践, 这应该是最好的办法. 例如:: /* Structure */, /* Typography */ etc.” [CSS Tips and Tricks(CSS窍门和魔法)]
  • 钩子, 线, 和铅坠Hook, line, and sinker. 一旦你的CSS文档已经分成了不同的区块, 你就应该思考, 如何让这些小节点上的钩子结构化, 这将给你节省大量的时间, 并让文档更有说服力.” [Ryan Parr]
  • 把样式表分成不同的块. “我通常把自己的样式表分成三个块. 第一部分是元素直白定义, 变换文体, 页头风格, 重置表单的间距, 一些链接的风格, 等等. 接下来, 我会定义一些类, 例如提示框, 警告框, ?等等, 我倾向于先定义主容器, 然后定义这个主容器中的元素, 这样扫一眼,就可以看到文档的规划结构, 对于哪些没有约束的容器, 我一般也要给他们一个名字.” [Jonathan Snook]

1.3. Workflow: 控项编号, 类, 同类项, 属性 Handling IDs, Classes, Selectors, Properties

  • 让容器最小化. “结构化灌装文档. 新手会使用很多像表格一样的单元去构建一个文档. 而用结构化的要素构建文档才是最有效的. 要做到这点, 必须开始之前统盘考虑所有要素, 争取用通用的结构获得相同的效果, 而不是不断定义哪些小巧的DIV单元. ” [Ryan Parr]
  • 属性最小化. “善用CSS. 这个大原则可以派生很多小原则: 如果没有一个点来增加属性, 就不要增加, 如果你不确定该属性的用途, 就不要增加, 如果相同的属性被赋予很多地方, 争取在一个地方定义它.” [CSSing]
  • 同类项最小化. “避免不必要的同类项, 同类项越少, 问题就越容易处理.” [Jonathan Snook]
  • CSS 修复点(hack)最小化. “除非是公认的或文档化的缺陷, 尽量不要使用修复点. 我常常看到的情况是, 修复点本身变成了问题. 最好找到问题的根源, 从根本上解决或避免, 而不是滥用修复点.[10 Quick Tips for an easier CSS life(10个让CSS更简单的窍门)]
  • 使用CSS常量开发. “所谓常量 – 就是在很多地方使用的固定数值. 在CSS文档前面创建这些常量的说明, 颜色对照表, 利用替换的方式, 可以减少修订中的错误.” [Rachel Andrew]
  1. # /*
  2. # Dark grey (text): #333333
  3. # Dark Blue (headings, links) #000066
  4. # Mid Blue (header) #333399
  5. # Light blue (top navigation) #CCCCFF
  6. # Mid grey: #666666
  7. # */
  • 使用通用命名空间. 一套好的命名体系, 会在修复缺陷时, 节省大量时间. 我建议使用 parent_child 结构. [10 CSS Tips]
  • 按语法定义类和编号. “错误的名称会引起岐义, 不便于沟通协作, 也会导致重复定义”. [Garrett Dimon]
  • 用通用的CSS定义给同类项编组. “当一些元素的类型,类,或ID:s 使用相同的属性, 你可以把这些同类项编组, 以便一起定义, 而不是分开重复定义” [Roger Johansson]
  • 如果一个独立属性需要复用, 就把它独立出来. “如果你发现一个属性的定义被广泛使用, 不妨把它单拿出来定义” [5 Steps to CSS Heaven]
  • 尽可能树状化表达你的编号和类. 文档的层次化 contextual selectors 十分必要. 这样可以使文档更容易阅读和使用. [Chric Casciano]
  • 学会充分利用CSS的瀑性(继承性)特征. “如果你的网站中有两个类似的显示区(box),你愿意定义两个样式, 还是定义一个样式后, 用一个外部样式对它进行修正?” [5 Steps to CSS heaven]
  • 使用工具化标记(Tag): <small>, <em><strong>. “可以充分使用这些工具化标记, 对XHTML来说, 它具有更好的语意结构性, 过多的利用类来定义类似的要素, 会让文档结构本身的语法环境遭到破坏”. [Mike Rundle’s 5 CSS Tips]

1.4. Workflow: 使用缩写标注

  • 缩写十六进位色彩标注. “在颜色定义中: #000 等同于 #000000, #369 等同于 #336699 ?[Roger Johansson]
  • 用 LoVe/HAte-次序定义链接伪类 Link, Visited, Hover, Active. “可以确保你看到所有的链接样式.” [Eric Meyer]
  1. a:link { color: blue; }
  2. a:visited { color: purple; }
  3. a:hover { color: purple; }
  4. a:active { color: red; }
  • 用 TRouBLed-次序定义外边距, 内边距和边框: Top, Right, Bottom, Left. “用顺时针的方向,从顶部开始定义, 养成这种习惯,还可以用缩写法快速定义.” [Roger Johansson]
  • 使用缩写属性 shorthand properties.
    “使用缩写定义 margin, padding and border 属性可以节省大量空间.
  1. CSS:
  2. margin: top right bottom left;
  3. margin:1em 0 2em 0.5em;
  4. (margin-top: 1em; margin-right: 0; margin-bottom: 2em; margin-left: 0.5em;)
  1. CSS:
  2. border:width style color;
  3. border:1px solid #000;
  1. CSS:
  2. background: color image repeat attachment position;
  3. background:#f00 url(background.gif) no-repeat fixed 0 0;
  1. CSS:
  2. font: font-style (italic/normal) font-variant (small-caps) font-weight font-size/line-height font-family;
  3. font: italic small-caps bold 1em/140% "Lucida Grande",sans-serif;

1.5. Workflow: 建立拓扑结构

  • 用62.5%的比例, 保持 EM单位和PX单位的协同性. ?font-size 的缺省值是 16px; 利用这个原则, 你可以换算一个 Em 大约是10像素 ?(16 x 62.5% = 10). “我倾向于让不同文字之间的比例保持在62.5%. 这样可以让你同时用em 和 px 两种方法思考 ” [Jonathan Snook]
  • 使用通用字符集UTF-8编写代码. . [20 pro tips]
  1. <meta http-equiv="content-type" content="text/ html;charset=utf-8" />
  • 使用 CSS转换大小写. 如果你相让一些内容全部大写, 很简单,只需要在CSS中做如下定义即可”. [20 pro tips]
  1. h1 {
  2. text-transform: uppercase;
  3. }
  • 使用 small-caps . 例如:
  1. h1 {
  2. font-variant: small-caps;
  3. }
  • Cover all the bases – 定义通用字体. “如果我们使用某些特殊的字体, 必须要确定浏览者的机器上也装载这些字体, 因此我们必须了解哪些是通用的字体, 才能保证设计和展示是一致的. [Getting into good coding habits]
  1. p {
  2. font-family: Arial, Verdana, Helvetica, sans-serif;
  3. }
  • 用 1.4em – 1.6em 定义线高 line-height.line-height:1.4” ?合理的线长 line-lengths应避免超过10个单词 . 例如纯黑或纯白在CRT显示器上过亮. 尝试使用次白 (#fafafa) 和灰黑(#333333,).比较理想” [Christian Montoya]
  • 用 100.01% 定义HTML元素(html-element). 这个特义值 100.01% 定义字符大小可以解决很多浏览器的bug. 首先, 用百分比设置缺省的 body font size 就用这个值, 这样基本上可以解决IE, Opera, Safari中的字体不同大小和缩放的问题.” [CSS: Getting into good habits]

1.6. Workflow: 调试

  1. * { border: 1px solid #f00; }
  • 调试时, 先检查封闭元素. “很多意想不到的错误,都是由于该封闭的元素,没有被封闭导致的”. [10 CSS Tips]

2.1. 技术窍门: IDs, Classes

  • 每页只能有一个ID, 但可以有多个类. “检查你的 IDs: 一个页面只能有一个元素使用一个确定的ID,很多元素可以用相同的类定义, 注意 ID 和 Class 的名字只能用使用 [A-Za-z0-9] 的字母或数字以及连接符号 (-), 开始字母不能用数字或连接符号(参照 CSS2 语法和类型.” [Roger Johansson]
  • 元素在同类项(selectors)中是大小写相关的. “记住大小写相关. 当 CSS用在XHTML, 因为XML是大小写相关的.” [Roger Johansson]
  • CSS classes 和 IDs 必须合法. “我们在定义这些对象的使用最好用他们的功能, 而不是他的外观” [CSS Best Practices]
  • 一个元素可以使用多个类“你可以分配多个类给一个元素, 因此你通过多定义一些不同的类,而有选择的使用他们,完成你对样式的约束.” [Roger Johansson]

2.2. 技术窍门: 利用同类项

Roger Johansson 曾写过很有用的一篇文章 CSS 2.1 Selectors. 强烈推荐阅读这篇文章.你可以发现很多有用的东西. 例如同类项父子定义 ‘>’ 和 ‘+’ 在 IE6 和早期版本中并不支持.

  • 你可以使用子同类项. “A child selector targets an immediate child of a certain element. A child selector consists of two or more selectors separated by a greater than sign, “>”. The parent goes to the left of the “>”, and whitespace is allowed around the combinator. This rule will affect all strong elements that are children of a div element. [Roger Johansson]
  1. div > strong { color:#f00; }
  • 使用多血缘同类项(adjacent sibling selector ). An adjacent sibling selector is made up of two simple selectors separated by a plus sign, “+”. Whitespace is allowed around the adjacent sibling combinator. The selector matches an element which is the next sibling to the first element. The elements must have the same parent and the first element must immediately precede the second element. [Roger Johansson]
  1. p + p { color:#f00; }
  • 使用特性同类项 一个特性同类项, 可以通过四种方式找到要定义的对象:
  1. [att]
  2. Matches elements that have an att attribute, regardless of its value.
  3. [att=val]
  4. Matches elements that have an att attribute with a value of exactly “val”.
  5. [att~=val]
  6. Matches elements whose att attribute value is a space-separated list that contains “val”. In this case “val” cannot contain spaces.
  7. [att|=val]
  8. Matches elements whose att attribute value is a hyphen-separated list that begins with “val”. The main use for this is to match language subcodes specified by the lang attribute (xml:lang in XHTML), e.g. “en”, “en-us”, “en-gb”, etc.
  • The selector in the following rule matches all p elements that have a title attribute, regardless of which value it has:
  1. p[title] { color:#f00; }
  • The selector matches all div elements that have a class attribute with the value error:
  1. div[class=error] { color:#f00; }
  • Multiple attribute selectors can be used in the same selector. This makes it possible to match against several different attributes for the same element. The following rule would apply to all blockquote elements that have a class attribute whose value is exactly “quote”, and a cite attribute (regardless of its value):
  1. blockquote[class=quote][cite] { color:#f00; }
  • 使用降阶同类项descendant selectors. “Descendant selectors can help you eliminate many class attributes from your markup and make your CSS selectors much more efficient. ” [Roger Johansson]

2.3. 技术窍门: 链接样式化

  • 如果使用锚点, 你要小心. “如果在你的编码中使用锚点 (<a name="anchor">) 你要注意, 他会使用 :hover:active 这些伪类. 为避免这些问题, 你要使用ID 来定义这些锚点,或使用内部约束 slightly more arcane 语法: :link:hover, :link:active” [Dave Shea]
  • 定义链接关系 “The rel attribute is supposed to indicate a semantic link relationship from one resource to another.
  1. a[rel~="nofollow"]::after {
  2. content: "\2620";
  3. color: #933;
  4. font-size: x-small;
  5. }
  6. a[rel~="tag"]::after {
  7. content: url(http://www.technorati.com/favicon.ico);
  8. }
  • “These make use of the attribute selector for space separated lists of values. Any a element with a relationship containing those values will be matched. Links with the nofollow relationship will be followed by a dark red skull and crossbones (?) and those with the tag relationship will be followed by the Technocrati icon.” [Handy CSS]
  • You can mark external links automatically. Many people make use of the non-standard rel="external" relationship to indicate a link to an external site. However, adding that to each and every link is time consuming and and unnecessary. This style rule will place an north east arrow after any link on your site to an external site. [Handy CSS]
  1. a[href^="http://"]:not([href*="smashingmagazine.com"])::after {
  2. content: "\2197";
  3. }
  • 利用 outline: none;来去除链接产生的虚点框. 这一点对导航条很有用 remove dotted links
  1. a:focus {
  2. outline: none;
  3. }

2.4. 技术窍门: CSS-技术

  • 付给<body> 标记一个 ID. “大多数情况下, 给body 放置一个 ID , 可以逐页控制CSS, 而不必要不断更换模板” [Ryan Parr, Invasion of Body Switchers]
  • 用CSS创建相同高度的列. Equal Height Technique: a method to make all columns appear to be the same height. But without the need for faux column style background images. Faux Columns: with background images.
  • 用 CSS做垂直布局. “假设你有一个导航菜单高度是2em. 解决方案: 在CSS中把线高设定成和显示模块一样的高度.在这个案例中,字符可以在显示模块中间浮动. ” [Evolt.org]
  • 使用伪元素 pseudo-elements 和类 classes 创建动态内容. Pseudo-classes and pseudo-elements. Pseudo-classes and pseudo-elements can be used to format elements based on information that is not available in the document tree. For example, there is no element that refers to the first line of a paragraph or the first letter of an element’s text content. You can use :first-child, :hover, :active, :focus, :first-line, :first-letter, :before, :after and more.
  • 通过设置 <hr> 分割的更漂亮. “把水平分割线 (<hr>) 用图形代替可以增加页面的美观性. [CSS: Best Practices]
  • 在每个页面使用相同的导航条 (X)HTML-编码. “许多网站都想强化导航条, 但你需要在每个页面优化导航条代码, 我们如何把两者完美的处理好呢?” [Ten More CSS Tricks you may not know]
  1. XHTML:
  2. <ul>
  3. <li><a href="#" mce_href="#" class="home">Home</a></li>
  4. <li><a href="#" mce_href="#" class="about">About us</a></li>
  5. <li><a href="#" mce_href="#" class="contact">Contact us</a></li>
  6. </ul>
  • Insert an id into the <body> tag. The id should be representative of where users are in the site and should change when users move to a different site section.
  1. CSS:
  2. #home .home, #about .about, #contact .contact
  3. {
  4. commands for highlighted navigation go here
  5. }
  • 布局中,使用” margin: 0 auto;" 水平居中. “利用 CSS来水平居中一个元素, 你需要设定这个元素的宽度,和水平间距就可以做到.” [Roger Johansson]
  1. XHTML:
  2. <div id="wrap">
  3. <!-- Your layout goes here -->
  4. </div>
  1. CSS:
  2. #wrap {
  3. width:760px; /* Change this to the width of your layout */
  4. margin:0 auto;
  5. }
  • 给 RSS-feeds附加样式. “用 XSL stylesheet (turn links into clickable links, etc)格式化, CSS让非技术人员更能接受. [Pete Freitag]
  1. <?xml version="1.0" ?>
  2. <?xml-stylesheet type="text/css" href="http://you.com/rss.css" mce_href="http://you.com/rss.css" ?>
  3. ...
  • 在老的浏览器中隐藏CSS . “最基本的办法就是利用@import 方法,解决隐藏问题.” ? [Roger Johansson]
  1. @import "main.css";
  • 在块级的元素定义中, 必须声明外间距和内间距Always declare margin and padding in block-level elements. [10 CSS Tips]
  • 要么设定宽度, 要么设定内间距和外间距 “我的一个重要原则是, 如果我设定了宽度,就不必要设定间距, 同理, 如果设定了间距, 就不必要设定宽度. 在盒状显示模块中, 特别你你用百分比处理的情况下, 我才用设定容器宽度, 里面的元素使用间距设定, 这样一切就会变得游刃有余. ” [Jonathan Snook]
  • 避免使用内间距/边框 和固定的宽度同时定义一个元素. “IE5 会让这样的定义出错, 一切变得一团糟. 为修订宽度的错误, 在父对象中设置内间距,取代子元素固定宽度的方法. [CSS Crib Sheet]
  • 提供打印样式.
  1. <link rel="stylesheet" type="text/css" href="print.css" mce_href="print.css" media="print">
  2. or
  3. <style type=”text/css” media=”print”> @import url(print.css); </style>
  • This ensures that the CSS will only apply to printed output and not affect how the page looks on screen. With your new printed stylesheet you can ensure you have solid black text on a white background and remove extraneous features to maximise readability. More about CSS-based print-Layouts. [20 pro tips]

2.5. 技术窍门: IE 改进

  • 强制 IE 透明化处理 PNG图像. “理论上, PNG 文件支持不同的透明度; 但是. 一个Explorer 6 缺陷让这种方法很难跨浏览器使用” [CSS Tips, Outer-Court.com]
  1. #regular_logo
  2. {
  3. background:url('test.png'); width:150px; height:55px;
  4. }
  5. /* \ */
  6. * html #regular_logo
  7. {
  8. background:none;
  9. float:left;
  10. width:150px;
  11. filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='test.png', sizingMethod='scale');
  12. }
  13. /* */
  1. #container
  2. {
  3. min-width: 600px;
  4. max-width: 1200px;
  5. width:expression(document.body.clientWidth < 600? "600px" : document.body.clientWidth > 1200? "1200px" : "auto");
  6. }
  • 在IE中使用条件说明 “在IE/WIN中,最安全的方式是使用条件说明 conditional comments. 这比使用修正点更有效. 利用这种方法, 可以让IE 使用自己的样式, ” [Roger Johansson]
  1. <!--[if IE]>
  2. <link rel="stylesheet" type="text/css" href="ie.css" mce_href="ie.css" />
  3. <![endif]-->

Workflow: 获得灵感

参考和推荐内容:

1 Comment | Tags:

当你遇见以下十种人一定要珍惜

要努力争取和他相伴一生的机会。因为当他离去时,一切都来不及了。

2.遇到可相信的朋友时—
要好好和他相处下去。因为在人的一生中,可遇到知己真的不易。

3.遇到人生中的贵人时—
要记得好好感激,因为他是你人生的转折点。

4.遇到曾经爱过的人时—
记得微笑向他感激,因为他是让你更懂爱的人。

5.遇到曾经恨过的人时—
要微笑向他打招呼,因为他让你更加坚强。

6.遇到曾经背叛你的人时—
要跟他好好聊一聊,因为若不是他,今天你不会懂这世界。

7.遇到曾经偷偷喜欢的人时—
要祝他幸福唷!因为你喜欢他时?不是希望他幸福快乐吗?

8.遇到匆匆离开你人生的人时—
要谢谢他走过你的人生,因为他是你精采回忆的一部分。

9.遇到曾经和你有误会的人时—
要趁现在解清误会,因为你可能只有这一次机会解释清楚

10.遇到现在和相伴一生的人—
要百分百感谢他爱你,因为你们现在都得到幸福和真爱

No Comments | Tags: ,

爱和喜欢的区别

  喜欢是在深夜看书时突然想起他,想象他现在做什么,心里漾起一阵轻飘飘的温暖,却从不主动给他打电话。几分钟后,注意力又重新被书中的情节吸引!

  爱是在寂寞的夜里,思念如潮水般涌来,手里捧着书却怎么也看不进去,心里惦记着他此时是否还在加班,吃没吃晚饭,是不是如自己想着他一般想着自己。
  喜欢是和他讨论问题争的面红耳赤,各不相让,在他面前像个刺猬一样从不认输,但在心里却早已暗暗佩服他的见地他的才华。

  爱是希望他和自己步调一致,和自己心灵相通,他无心说的一句玩笑话也能让自己顷刻情绪低落甚至眼泪汪汪。在他面前,自己是从不设防的。
  喜欢是出门在外给他发个短信,告诉他这边的天气很好,然后把手机关掉,独自在异地疯玩一个星期,晒成一个黑人后突然出现在他面前吓他一跳。

  爱是无论到哪都希望有他陪伴。可以站在海边给他打手机,让他听听海浪的声音;也可以因为在异乡的街道上看到一个酷似他的背影而愣在原地久久不动。
  喜欢是他出差前简单的道一声“一路平安”,看着他离去的背影,心中有一点不舍,却什么也不说,只是默默等待他归来的消息.

  爱是他临出差前千叮咛万嘱咐,往他的背包里塞满衣服和食物,在车站要等到火车开走才肯离开。并且在他走后的日子里天天心神不定,一遍遍的祈祷他能够平安归来。
  喜欢是在受伤的时候,不想让他看到自己脆弱的一面,在他面前把眼泪悄悄抹掉,转过头依然是一副快乐坚强的模样。

  爱是在受委屈的时候,爬在他的胸前痛哭,没有伪装没有顾虑,把所有的烦恼统统告诉他,并渴望从他的怀抱中得到安慰。
  喜欢是和他周末逛街逛累了一起吃肯德基;是在寒冷的冬天和他抢一杯热咖啡;是和他并肩走在街上中间始终隔着半米的距离;是陪他一起在电脑前打游戏两个人笑的像个孩子。

  爱是周末利用半天时间亲手做出几道好菜满足的看他吃下去;是在寒冷的冬天不断为他的咖啡杯里续上热水;是和他走在街上任由他紧紧挽着自己的手;是在他旁边安静着做着,幸福地看着他在电脑前工作时专心的样子。
  喜欢是听他讲自己童年的趣事,然后哈哈大笑,心中涌起一阵莫名的感动。

  爱是听他将自己童年的趣事,然后微微一笑,心中更加怜惜眼前这个曾经如此调皮捣蛋的男人。
  喜欢是在楼道里碰上他,愉快的和他打声招呼,再简单寒暄几句,擦肩而过的时候看见了窗外明媚的阳光,心情无端好了起来。

  爱是在楼道了看见他,脸上装出一副毫不在乎的表情,但在擦肩而过时细心感受身边颤动的空气,于是忍不住回头望一眼。
  喜欢是看到他和别人牵手走过,心里有一点点疼,但很快会冲着朝阳重新扬起笑脸。

  爱是输不起的游戏,付出全部只后,留下的可能仅仅是刻在心底的一道伤痕

  
  喜欢一个人是想要他是自己的,所以,可以喜欢很多人,想要很多人都是自己的
  爱是明明离不开他,却要不得不放弃他,因为他要的幸福,也许我给不了。不敢霸占他,希望看他找到幸福,即使那份幸福不是跟我分享的

  喜欢是,希望寂寞的时候,无聊的时候,伤感的时候,找个人说说话。
  爱是,在任何时候都想跟他分享,快乐的时候甚至希望把错有快乐都给了他。

  喜欢是,在很久很久没联络的时候,接到他的电话,然后笑着听他说话。
  爱是,在几天没有联络的时候,着急得的打电话给他,然后忍住眼泪笑一笑。

  喜欢,只有在一起的时候,才惦记着对方。
  爱,是哪怕是在一起,每一秒钟也都在思念他。

  喜欢一个人,多出许多朋友,也会觉得快乐。
  爱一个人,是多一个人,都会难受的两个人的世界

  喜欢一个人,是甜腻的。
  爱一个人,是苦尽甘来的。

  喜欢一个人,在一起的时候会很开心
  爱一个人,在一起的时候,会莫名的失落

  喜欢一个人,你不会想到你们的将来
  爱一个人,你们常常在一起憧憬明天

  喜欢一个人,在一起的时候永远是欢乐
  爱一个人,你会常常流泪

  喜欢一个人,当你们好久不见,你会突然想起他
  爱一个人,当你们好久不见,你会天天想着他

  喜欢一个人,当你想起他,你会微微一笑
  爱一个人,当你想起他,你会对着天空发呆

  喜欢一个人就是希望大家都开心
  爱一个人希望他会更开心

  喜欢一个人,你要得只是今天
  爱一个人,你期望的是永远

  喜欢一个人,是看到了他的优点
  爱一个人,是包容了他的缺点

  当你站在你爱的人面前,你的心跳会加速
  但当你站在你喜欢的人面前,你只感到开心

  当你与你爱的人四目交投,你会害羞
 但当你与你喜欢的人四目交投,你只会微笑

  当你与你爱的人对话,你觉得难以启齿
  但当你和你喜欢的人对话,你可以畅所欲言

  当你爱的人哭,你会陪他一起哭
  但当你喜欢的人哭,你会技巧的安慰他

  当你不想再爱一个人,你要闭上眼睛并忍着泪水
  当你不想再喜欢一个人,你只要掩住双耳!

  喜欢,是一种心情
  爱,是一种感情

  喜欢,是一种直觉
  爱,是一种感觉

  喜欢,可以停止
  爱,没有休止

  喜欢一个人,特别自然
  爱一个人,特别坦然

  喜欢一个人,有时候盼和他在一起
  爱一个人,有时候怕和他在一起

  喜欢一个人,不停的和他争执
  爱一个人,不停的为他付出

  喜欢一个人,希望他可以随时找到自己
  爱一个人,希望可以随时找到他

  喜欢一个人,总是为他而笑
  爱一个人,总是为他而哭

  喜欢,是执着
  爱,是值得

  喜欢就是喜欢,很简单
  爱就是爱,很复杂

  喜欢你,却不一定爱你
  爱你,就一定很喜欢你

  其实,喜欢和爱仅一步之遥
  但,想要迈这一步
  就看你是喜欢迈这一步
  还是爱迈这一步

No Comments | Tags: , ,

佛家经典语录

一、人之所以痛苦,在于追求错误的东西。

  二、与其说是别人让你痛苦,不如说自己的修养不够。

  三、如果你不给自己烦恼,别人也永远不可能给你烦恼。因为你自己的内心,你放不下。

  四、好好的管教你自己,不要去管别人。

  五、不宽恕众生,不原谅众生,是苦了你自己。

  六、别说别人可怜,自己更可怜,自己修行又如何?自己又懂得人生多少?

  七、学佛是对自己的良心交待,不是做给别人看的。

  八、福报不够的人,就会常常听到是非;福报够的人,从来就没听到过是非。

  九、修行是点滴的工夫。

  十、在顺境中修行,永远不能成佛。

  十一、你永远要感谢给你逆境的众生。

  十二、你随时要认命,因为你是人。

  十三、你永远要宽恕众生,不论他有多坏,甚至他伤害过你,你一定要放下,才能得到真正的快乐。

  十四、这个世界本来就是痛苦的,没有例外的。

  十五、当你快乐时,你要想,这快乐不是永恒的。当你痛苦时你要想这痛苦也不是永恒的。

  十六、认识自己,降伏自己,改变自己,才能改变别人。

  十七、今日的执著,会造成明日的后悔。

  十八、你可以拥有爱,但不要执著,因为分离是必然的。

  十九、不要浪费你的生命在你一定会后悔的地方上。

  二十、你什么时候放下,什么时候就没有烦恼。

  二一、内心没有分别心,就是真正的苦行。

  二二、学佛第一个观念,永远不去看众生的过错。你看众生的过错,你永远污染你自己,你根本不可能修行。

  二三、你每天若看见众生的过失和是非,你就要赶快去忏悔,这就是修行。

  二四、业障深重的人,一天到晚都在看别人的过失与缺点,真正修行的人,从不会去看别人的过失与缺点。

  二五、每一种创伤,都是一种成熟。

  二六、当你知道迷惑时,并不可怜,当你不知道迷惑时,才是最可怜的。

  二七、狂妄的人有救,自卑的人没有救。

  二八、你不要一直不满人家,你应该一直检讨自己才对。不满人家,是苦了你自己。

  二九、一切恶法,本是虚妄的,你不要太自卑你自己。一切善法,也是虚妄的,你也不要太狂妄你自己。

  三十、当你烦恼的时候,你就要告诉你自己,这一切都是假的,你烦恼什么?

  三一、当你未学佛的时候,你看什么都不顺。当你学佛以后,你要看什么都很顺。

  三二、你要包容那些意见跟你不同的人,这样子日子比较好过。你要是一直想改变他,那样子你会很痛苦。要学学怎样忍受他才是。你要学学怎样包容他才是。

  三三、承认自己的伟大,就是认同自己的愚疑。

  三四、修行就是修正自己错误的观念。

  三五、医生难医命终之人,佛陀难渡无缘的众生。

  三六、一个人如果不能从内心去原谅别人,那他就永远不会心安理得。

  三七、心中装满着自己的看法与想法的人,永远听不见别人的心声。

  三八、毁灭人只要一句话,培植一个人却要千句话,请你多口下留情。

  三九、当你劝告别人时,若不顾及别人的自尊心,那么再好的言语都没有用的。

  四十、不要在你的智慧中夹杂着傲慢。不要使你的谦虚心缺乏智慧。

  四一、根本不必回头去看咒骂你的人是谁?如果有一条疯狗咬你一口,难道你也要趴下去反咬他一口吗?

  四二、忌妒别人,不会给自己增加任何的好处。忌妒别人,也不可能减少别人的成就。

  四三、永远不要浪费你的一分一秒,去想任何你不喜欢的人。

  四四、多少人要离开这个世间时,都会说出同一句话,这世界真是无奈与凄凉啊!

  四五、恋爱不是慈善事业,不能随便施舍的。感情是没有公式,没有原则,没有道理可循的。可是人们至死都还在执著与追求。

  四六、请你用慈悲心和温和的态度,把你的不满与委屈说出来,别人就容易接受。

  四七、创造机会的人是勇者。等待机会的人是愚者。

  四八、能说不能行,不是真智慧。

  四九、多用心去倾听别人怎么说,不要急着表达你自己的看法。

  五十、同样的瓶子,你为什么要装毒药呢?同样的心理,你为什么要充满着烦恼呢?

  五一、得不到的东西,我们会一直以为他是美好的,那是因为你对他了解太少,没有时间与他相处在一起。当有一天,你深入了解后,你会发现原不是你想像中的那么美好。

  五二、这个世间只有圆滑,没有圆满的。

  五三、修行要有耐性,要能甘于淡泊,乐于寂寞。

  五四、活着一天,就是有福气,就该珍惜。当我哭泣我没有鞋子穿的时候,我发现有人却没有脚。

  五五、多一分心力去注意别人,就少一分心力反省自己,你懂吗?

  五六、眼睛不要老是睁得那么大,我且问你,百年以后,那一样是你的。

  五七、欲知世上刀兵劫,但听屠门夜半声。不要光埋怨自己多病,灾祸横生,多看看横死在你刀下的众生又有多少?

  五八、憎恨别人对自己是一种很大的损失。

  五九、每一个人都拥有生命,但并非每个人都懂得生命,乃至于珍惜生命。不了解生命的人,生命对他来说,是一种惩罚。

  六十、自以为拥有财富的人,其实是被财富所拥有。

No Comments | Tags: , ,