存档: ‘视觉设计’ 分类

理解绝对定位和相对定位布局

没有评论 2009年9月18日

概要:
本文主要描述XHTML中相对定位和绝对定位各自的本质、用法、区别和两者之间的关系。以及使用CSS的Left、Right、Top、Bottom属性(偏移属性)和Margin属性(外边距)对定位块级元素进行布局的方法。

说明:
占位空间:元素在文档流中所占据的空间。
物理空间:元素本身所占据的空间。

下面分3种情况分别对相对定位和绝对定位进行讨论:
1.只使用css第一组属性布局定位元素的情况
2.只使用css第二组属性布局定位元素的情况
3.混合使用第一组和第二组属性的情况

图1为未定位时的初始效果,
层级关系为:
<div
  <div box1
  <div box2
  <div box3
效果图:
图片
图1

一、用相对定位布局块级元素
元素设置position值: position:relative
此属性值的设置,元素没有脱离文档流,还是普通流定位模型的一部分,会对文档流中其它元素布局产生影响。(说明:蓝色代表占位空间,红色代表元素)

1.仅使用left、right、top和bottom属性布局相对定位元素的情况
元素原本所占的占位空间仍保留,物理空间偏移。

图2中,设置元素的left和top的值,对box2进行布局,可以发现除了box2偏移之外,其他块级元素的位置没有被影响,可见box2的占位空间还是存在的。
层级关系为:
<div
  <div box1
  <div box2 ——– position:relative ; top:-60px; left:80px;
  <div box3
效果图:
图片
图2

2.仅使用margin属性布局相对定位元素的情况
用margin-bottom属性和margin-top属性设置负值可以改变文档流中所占空间的高度,会影响文档流中的其它元素位置。例如:margin-top:负值; margin-bottom:负值

图3中,box1和box2都设置了元素margin-bottom的值,值等于它们高度的负值。box1和box2物理空间没有改变,占位空间高度为0。box3的margin-bottom值设置为0,物理空间没有改变,占位空间高度不变。再通过margin-left对box2和box3设置左偏移值。
层级关系为:
<div
  <div box1 ——– position:relative ; margin-bottom:-102px;
  <div box2 ——– position:relative ; margin-bottom:-102px; margin-left:110px;
  <div box3 ——– position:relative ; margin-bottom:0px; margin-left:220px;
效果图:
图片
图3

3.混合使用left、right、top和bottom属性与margin属性布局相对定位元素的情况
此情况,它们的值会产生累加的效果。在CSS2.1中所有的浏览器都使用外边距边界来完成 偏移计算。本文从数学的角度理解为偏移属性值和外边距属性值累加。

图4中,box2是在图3的基础上增加设置left的值产生的效果,可见margin-left的值和left的值产生了累加。(偏移量:80px = 110px – 30px)
层级关系为:
<div
  <div box1 ——- position:relative ; margin-bottom:-102px;
  <div box2 ——- position:relative ; margin-bottom:-102px;margin-left:110px; flet:-30px;
  <div box3 ——- position:relative ; margin-bottom:0px; margin-left:220px;
效果图:
图片
图4

二、用绝对定位布局块级元素
设置position值:position:absolute;
此属性值的设置,元素从文档流完全删除。

1.仅使用left、right、top和bottom属性布局绝对定位元素的情况
绝对定位的元素的偏移位置以最近的定位(包括相对定位和绝对定位)祖先元素作参照物。如果元素没有已定位(包括相对定位和绝对定位)的祖先元素,那么它的参照物为最顶级元素(由于浏览器的默认参照物不同,物可能是BODY或 HTML 元素)。
注意:IE下参照物需设置宽度或高度bottom和right属性才可以正确的定位。

设置元素为绝对定位元素后,元素的Left、 Right、Top和Bottom属性默认值不是0,只是将元素脱离文档流。以下例子说明这个问题。
在图5中,将橘黄色的祖先元素设置为定位元素(即参照物),box2设为绝对定位,文档流由box1-box2-box3变为box1-box3,可box2却没有移动到距离参照物0值的位置上,可见box2的Left、 Right、Top和Bottom属性默认值不等于0,它只是脱离了文档流而已。
层级关系为:
<div ———————————position:relative 参照物
  <div—————————-没有设置为定位元素,不是参照物
    <div———————-没有设置为定位元素,不是参照物
      <div box1
      <div box2 ——–absolute
      <div box3
效果图:
图片
图5

以最近的祖先定位元素为参照物的情况
图6中,Box2设置成绝对定位元素,脱离了文档流,文档流由box1-box2-box3变为box1-box3,box2以最近的定位祖先(蓝色框)为参照物。
层级关系为:
<div ——————————— position:relative; 不是最近的祖先定位元素,不是参照物
  <div—————————-没有设置为定位元素,不是参照物
    <div———————- position:relative 参照物
      <div box1
      <div box2 ——–position:absolute; top:50px; left:120px;
      <div box3
效果图:
图片
图6

图7中,为改变参照物(橘色框)后的效果
层级关系为:
<div ——————————— position:relative;最近的祖先定位元素,参照物
  <div—————————-没有设置为定位元素,不是参照物
    <div———————-没有设置为定位元素,不是参照物
      <div box1
      <div box2 ——–position:absolute; top:50px; left:120px;
      <div box3
效果图:
图片
图7

图8中,参照物为最顶级的元素情况
层级关系为:
<div ———————————没有设置为定位元素,不是参照物
  <div—————————-没有设置为定位元素,不是参照物
    <div———————-没有设置为定位元素,不是参照物
      <div box1
      <div box2 ——–position:absolute; top:50px; left:120px;
      <div box3
效果图:
图片
图8

2.仅使用margin属性布局绝对定位元素的情况
此情况,margin-bottom 和margin-right的值不再对文档流中的元素产生影响,因为该元素已经脱离了文档流。另外,不管它的祖先元素有没有定位,都是以文档流中原来所在的位置上偏移参照物。

图9中,使用margin属性布局相对定位元素。
层级关系为:
<div ——————————— position:relative; 不是参照物
  <div—————————-没有设置为定位元素,不是参照物
    <div———————-没有设置为定位元素,不是参照物
      <div box1
      <div box2 ——–position:absolute; margin-top:50px; margin-left:120px;
      <div box3
效果图:
图片
图9

IE6的情况下,box2前面没有兄弟节点,则margin-left的值会出现双倍边距,见图10。
层级关系为:
<div ——————————— position:relative; 不是参照物
  <div—————————-没有设置为定位元素,不是参照物
    <div———————-没有设置为定位元素,不是参照物
      <div box1
      <div box2 ——–position:absolute; margin-top:50px; margin-left:60px;
      <div box3
效果图:
图片
图10

3.混合使用left、right、top和bottom属性与margin属性布局相对定位元素的情况
a.margin属性和top、bottom、left、right属性同时使用,如果同一方向偏移,它们的值会产生累加的效果,见图11。
例如:margin-left:120px; left:-20px; 那么box2的偏移值为120px-20px=100px;
层级关系为:
<div ———————————-不是参照物
  <div—————————–不是参照物
    <div———————–position:relative; 参照物
      <div box1
      <div box2 ———position:absolute; margin-left:120px; left:-20px; top:50px;
      <div box3
效果图:
图片
图11

b.绝对定位和相对定位的累加加效果不同,如果top、bottom、left、right属性和margin属性偏移的方向相反,top、bottom、left、right属性值有效,反方向的margin属性值无效,见图12。
层级关系为:
<div ———————————-不是参照物
  <div—————————–不是参照物
    <div———————–position:relative; 参照物
      <div box1
      <div box2 ———position:absolute; margin-left:120px; right:10px; top:50px;
      <div box3
效果图:
图片
图12

总结:

  • 相对定位的元素不会脱离文档流,占用文档流的空间,Left; Right; Top和Bottom属性与margin属性混合使用会产生累加效果。
  • 绝对定位的元素脱离文档流,偏移不影响文档流中的其它元素,Left; Right; Top和Bottom属性与margin属性混合使用,偏移方向相同值累加,方向相反,margin属性值无效。
  • 绝对定位的元素以最近的定位祖先元素为参照物。

初尝规范甜-ISD规范浅谈

没有评论 2009年9月18日

图片

最近常常看到有人在网上谈起web设计规范这个话题,而这半年中ISD也在如火如荼地制定着各种规范,所以我们觉得有必要和大家分享一下我们这半年来我们遇到的问题和经验.

就ISD来说,制定规范的初衷在以下三个方面
1.品牌风格在探索中被明确,品牌备忘和梳理势在必行。
2.产品线日益丰富,后续设计一致性和可循性的要求被提高。
3.公司机构壮大,新人不断流入,沟通和执行效率急待提升。

在这之前,我们已经拥有许多零散的规范,但多为某一样特定产品的制作标准,例如给CP外包制作时的品质规范等,而对ISD四大业务的梳理(QQ会员\QQ空间\QQ 秀和QQ音乐),实际上是从08年中旬才开始的。
半年多的时间,我们陆续完成了:

QQ空间完整的portal线上规范、空间模板规范,以及细节到空间loading、挂件制作的规范;图片

QQ音乐针对portal和miniportal的线上规范;图片

QQ秀改版后的新portal线上规范;图片

以及QQ会员改版后整理出的一套PPT格式的设计规范;图片

这些规范为我们带来了便利,指明了方向,提高了效率,甚至一定程度上为设计团队赢得了认可…白纸黑字果然是解决意见分歧的最好方式…好吧,付出总会有回报的,规范的好处想必大家也都了解,这里就不繁述了。
重点在于,我们的规范还可以更规范一些:

1.别把规范做成了VIS手册。
目前我们的规范中还有太多华丽的词藻,类似花大篇幅介绍网站的配色方案这样的方式,把规范做成了花架子,几乎没有人会去用到它。我们的设计师大都受过平面设计公司的影响,一说到做规范,总是会下意识地做成企业VIS手册,想必这VIS手册里面的门道大家也都了解一二,那都是忽悠客户用的…当然,我们不是排斥装饰,但如果把过多无用的规范整理成华丽的效果图,或是无中生有的编织许多美丽的花圈,显然是不符合ISD的现状的,规范应该更加务实。

2.别让规范拖累了你。
我们在制定每一个规范的初期,都很担心规范的制定会限制了设计师的创作,所以我们没有把规范做到细无巨细,类似文字的左右边距这样的规范,其实是有非常大的不确定性的。所以我们还是倡导在规范中加入一条设计意识的规范,比方说,在设计中的找对齐,以及在设计后的去繁求简。只有大家的设计意识被规范了后,设计品质才会真正实现质的突破。当然,一些灵活的规范,例如:可定制式的模块规范也可以很好的解决这些问题。

3.规范也要有“试用期”。
在规范执行的时候,我们总是会遇到一些别扭的条目,让我们进退两难,有些设计师就干脆直接把规范给“扩展”了。确实,我们一般都是在关键设计完成后,来制定规范,很多条目并没有经历过各种情况的考验。所以,如果实践是检验真理的唯一标准,那么就也给规范一个试用期吧。

4.不要忽视了规范的用户体验。
规范做好了,是给大家用的,除了不要用过多无用的装饰来干扰规范的可读性,对于敏捷的互联网设计团队来说,“目录准确”“标识图容易懂”“文件好找到”等,也是我们所不容忽视的,为什么许多规范在上线后,我们的设计师都记不住地址,是不是很多时候,我们的规范倒不如一个PSD源文件来得便捷些。

5.规范的规范。
说完了前面的这些感想,我们理所应当地想到,对于ISD这样一个产品丰富的部门,我们的规范是不是也应该有一个统一的标准,而不是像现在这样,规范分类不同、规范描述不同、图文标注不同、文件格式不同…
看样子,想要更专业,还需要付出更多的努力…
 
这些就是ISD在摸着石头过河中的一些简单的心得,对于规范,我们浅尝但绝不停止,之所以把这些思考写出来,是想大家共同来关注这个互联网设计规范这个话题,希望大家多多指正,多多交流。

Hello world!

3 条评论 2009年9月18日

欢迎使用 WordPress 。这是系统自动生成的演示文章。编辑或者删除它,开始您的博客!