Archive for 07月, 2008

对待css需要首先掌握的一些问题

07月 8th

总结一下在css方面的经验,列一下对待css需要首先掌握的一些问题。掌握这些问题可以让你更快速的在项目中coding
1.概念:

html语义
盒模型
文本流
浮动
haslayout
html元素嵌套规则
常见的几个hack

2.实例

布局:三栏布局,二栏布局
文字单行居中和多行居中
等高列
margin负值的作用
position:relative和absolute
图片居中,垂直和水平
block元素的水平居中
overflow的作用
滑动门
对付脏数据

接下来的blog,会一一对上述问题做出总结

wordpress的空格问题

07月 3rd

  网络上发表文章的时候,要有点敬业精神,就是需要注意一下排版,不光给别人看的方便,自己也看得顺眼。中文排版一定要开头注意缩进,这个是小学语文就教导给大家的:“开头要空两格”。如果要开头空两格,有如下些办法

在css中给p元素直接设置text-indent:20px。
在源码中直接编辑 
用中文的全角来做空格。

  用wordpress写“伪绝对定位一文”时,很是奇怪。无论我用方法2还是3,都没办法把空格给弄出来,无奈之下只好google之,很快发现:在firefox下,使用wordpress写的文章,缩进会被自动过滤,而ie下不会。。。。太夸张了。
  所以,这篇记录这个问题的blog,只好用ie内核的浏览器来写。囧

伪绝对定位(译)

07月 3rd

有两种流行的css定位的方法:浮动或者绝对定位。这两种类似的方法都有他们的优点和缺点。我和我的团队伙伴们开发了一种全新的定位的方法,这也许是世界上 最好的方法。经过了一些实验和测试之后,现在是时候把它和业界一起分享了,来看看我们是如何一起工作,并改进。
  我称呼这种方法为:“伪绝对定位”,这 是一种伪造的列的技术 什么我们需要另外一种css布局技术 很 多网站都是基于带页头和页尾的分栏来设计。使用绝对定位布局,如果在垂直的分栏高度不固定的情况下,几乎是不可能来准确定位到页尾的位置。通过浮动定位, 如果有意想不到的内容的出现,会打乱你页面的整体布局(意译),关于这种情况,可以查看Shaun Inman in Clearance的描述。这些问题由于ie的宽度解析问题,都是非常讨厌,且难以解决的。
  我们遇到的情况相当的复杂:我团队试图开发一个基于 WYSIWYG(所见即所得)的表单,而且可以允许用户把内容在界面上随意的拖动。我们需要建立一个精巧的结构让用户不需要过度的倚赖静态布局,而且在他们的需要的时候把相应的列可以对齐。
  例如:假定我们需要在表单的同一行里面加入邮编和城市选项,这两者在内容逻辑上是在同一行的。为了实现它,我们尝试用 Holy Grail technique所 创造的浮动定位方法。通过这种方法,我们需要去调整邮编对象width,border,margins,或者padding来和城市选项对齐成一行。这是 个很麻烦的事情,因为邮编的宽度是动态的。或者我们调整了邮编之间的空白之后,城市的位置可能就挪位了。页面里面更多的元素,栅格中的布局,都需要做这种 无聊而且单调的调整。另外,微小的(属性的)数字变化就会导致布局错乱过敏。所以他基本上不可能用于弹性布局中。 然后我们试图利用绝对定位。他可以给我们更多的在位置上的可控性,而且他很健壮。但是绝对定位元素没有高度,这会导致父层元素的塌陷(其实是因为定义了position:absolute 之后,对象会脱离当前文本流,而父层元素任然处于文本流之中,所以在浏览器渲染的时候,是不会计算绝对定位元素的高度的,并非作者所说的have no height)。所以这样很难在不把所有的元素都绝对定位的情况下来对内容定位.所以这个方法在动态布局中基本不能实现。   另外一种办法   最后,我们的解决办法基于从定位过的布局中计算右侧的距离,而不是从在他源码前的元素右侧来计算他(?)。我们通过 position: relative, left: 100%和负margin值的组合来实现。 我们的方法从建立栅格和单元开始。我们可以在容器中把任意多的单元排成一行而且可以有任意多行。<div id=”canvas”> <div class=”line”>  <div class=”item” id=”item1″>   <div class=”sap-content”>content here</div>  </div> </div></div>

在ie 6下避免了 redraw bug
他给我们额外的添加padding的弹性
他可以让我们使用position: overflow,却不破坏栅格

基类的css如下: .line { float: left; width: 100%; display: block; position: relative;}
.item { position: relative; float: left; left: 100%;}
对于特定的单元。我们只需要给他负margin-left值以及指定宽度即可。#item1 { margin-left: -100%; width: 30%;}  基类的css将每一个单元的都在容器的右边定位在容器的右边,每个单元的宽度都倚赖于他自己里面的内容,而且所有单元都按照html源码的顺序排列。margin-left现在是为了抵消容器右边的距离,而不是左侧。注:作者的解释比较简单,以下是我的分析:
  首先有一个外容器,id=”canvas”来包含列,也就是栅格中的一行。 canvas用来定义你所需要的宽度。需要有overflow:hidden;(用来计算内容item里面的float元素所带来的高度,同时解决等高列问题)。其中每一行定义为line,我们这里假设他宽度为950px
.line { float: left;(计算内容item里面的float元素所带来的高度) width: 100%; display: [...]

Next Entries »

Size

Colors