CSS网页布局:关于定位(position)

2016-02-19 23:25 14 1 收藏

今天图老师小编给大家介绍下CSS网页布局:关于定位(position),平时喜欢CSS网页布局:关于定位(position)的朋友赶紧收藏起来吧!记得点赞哦~

【 tulaoshi.com - Web开发 】

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)使用CSS来定位页面内层的位置,一直是比较难以掌握的事情,很多时候,往往被绝对定位的元素,总是以浏览器的左上角为坐标原点,此时,如果浏览器的大小改变,被定义的层就会偏离设计想要的位置,让人很挠头。

其实,要想控制好层的绝对定位,只要理解CSS中关于定位(position)的定义,一切就会变得轻松简单。

CSS中关于定位(position)是这样定义的:
定位(position)允许用户精确定义元素框出现的相对位置,可以相对于它通常出现的位置,相对于其上级元素,相对于另一个元素,或者相对于浏览器视窗本身。每个显示元素都可以用定位的方法来描述,而其位置由此元素的包含块来决定的。
包含块(containing block)是格式编排发生的关联场景,例如,一个加粗的元素的包含块可以是该元素所出现的段落,如图1所示。
包含块

在理解定位之前,首先,要先理解HTML文件的结构,例如有一个html文件内容如下:
html
head
meta http-equiv="Content-Type" content="text/html; charset=gb2312" /
title文档结构/title
/head
body
h1CSS规则/h1
p样式表由一些strong样式规则/strong组成。/p
ul
  li选择符
    ul
      li类选择符/li
      liID选择符/li
      liem包含/em选择符/li
    /ul
  /li
  li属性/li
  li值/li
/ul
/ul
/body
/html

此文档对应的树型结构,如图2所示。
html文档树结构

CSS大部分能力是基于元素的父子关系,在图2的家族树中,每个元素都是另一个元素的父或者子或者两者都是。例如:body既是html的子元素,又是h1的父元素,而html就是h1的祖先,h1则是html的子孙。
Body是所有浏览器能显示的元素的祖先,而html是所有元素的祖先,也称为根元素。

那为什么定位了的元素还总是以浏览器窗口的左上角为坐标呢?
因为并不是每个元素都能为其后辈元素生成一个包含块。
建立包含块的规则如下:
根元素的包含块(也叫初始包含块)由用户代理生成,在HTML中,根元素是HTML元素,尽管有的浏览器会不正确地使用body元素。 对于那些未绝对定位的非根元素来说,元素的包含块设置为最近的块级祖先元素的内容区边沿。 对那些使用绝对(absolute)作为定位(postition)的非根元素,包含块设为最近的定位(postition)不是静止(static)的祖先元素(任何类型)。有以下几种情况: 如果祖先元素是块级(block)元素,包含块设为祖先元素的填充(padding)边沿,也就是被边框(border)约束的区域。 如果祖先元素是内联(inline)元素,包含块设为祖先元素的内容边沿。 关于包含块,最重要的是要记住它为所有后辈元素建立了一个格式编排的上下文。另一个重要方面是,元素可定位于它们的包含块之外。
因此,绝对定位的元素往往以浏览器可视区域的左上为坐标原点来进行定位了。

在CSS中可是使用position属性来在不同的定位类型中选择。

语法:
position : static | absolute | fixed | relative | inherit

其各参数含义是:
static : 静态(默认),无特殊定位。 relative : 相对,对象不可层叠,但将依据left,right,top,bottom等属性在正常文档流中偏移位置 absolute : 绝对,将对象从文档流中拖出,使用left,right,top,bottom等属性进行绝对定位。而其层叠通过z-index属性定义。此时对象不具有边距,但仍有补白和边框。 fixed : 悬浮,使元素固定在屏幕的某个位置,其包含块是可视区域本身,因此它不随滚动条的滚动而滚动。(IE5.5+不支持此属性。) inherit : 这个值从其上级元素继承得到。 示例:
div {...}{ position: absolute; bottom: 1in; left: 1in; right: 1in; top: 1in; }
div {...}{ position:relative; top:-3px; left:6px; } 

既然了解了包含块的概念,那么对于相对定位和绝对定位的关系,就很好掌握了。
例如,现在需要把页面内容整体居中,然后再将其中某些层绝对定位的话,那就要把最外面的层设置定位属性。
body
div id="box"
  div id="nav"
    p每个显示元素都可以用定位的方法来描述,而其位置由此元素的strong包含块/strong来决定的。/p
  /div
/div
/body
此时,如果你要对nav绝对定位,则需设置css:
body {...}{
margin:0;
padding:0;
text-align:center;
}
#box{...}{
background:#ff0;
position:relative; /**//* 使box层成为其子孙元素的包含块 */
width:500px;
height:200px;
margin:0 auto;
}
#nav {...}{
background:#ccc;
position:absolute; /**//* nav层将在box层的边框范围内绝对定位 */
top:20px;
left:40px;
width:200px;
}

其显示效果如图3所示。
定位显示

因此,掌握了包含块的概念,定位就变得不那么困难了。


本文部分知识

来源:http://www.tulaoshi.com/n/20160219/1629883.html

延伸阅读
标签: Web开发
1. position:static 所有元素的默认定位都是:position:static,这意味着元素没有被定位,而且在文档中出现在它应该在的位置。 一般来说,不用指定 position:static,除非想要覆盖之前设置的定位。 #div-1 { position:static;} 2. position:relative 如果设定 position:relative,就可以使用 top,bottom,left 和 right 来相对于元素在文...
标签: Web开发
声明 定位元素: position属性值设置除默认值static以外的元素,包括relative,absolute,fixed。 平台:win/IE win/FF z-index 用来确定定位元素在垂直于显示屏方向(以下称为Z轴)上的层叠顺序 值:auto | 整数 | inherit 默认:auto 适用于:定位元素 继承性:no 理解stacking context 每个box都归属于一个stacking context,...
标签: Web开发
从这件事证明了,我专业知识欠缺很多,还需要持续学习,静下心来吧。  新进的公司,接触新的东西,一切都让我倍感紧张。很久没有接触设计的东西了,突然上手就要做界面,心里还是很忐忑的。 贴一下Card的这个界面。    以前很少使用这类的总宽度自适应100%,两列布局,一列固定,一列自适应的,于是,有点头大。 搜索...
标签: Web开发
在CSS中,实现分栏布局有两种方法。第一种方法是使用四种CSS定位选项(absolute 、static、relative和fixed)中的绝对定位(absolute positioning),它可以将文档中的某个元素从其原本位置上移除,并重新定位在期望的任何地点之上。第二种则是使用CSS中的浮动(float)概念。 绝对定位或浮动都能够用来实现分栏效果。二者可以独立使用,也...
标签: Web开发
用CSS 来布局很容易。如果你已经习惯用表格布局的话,起先会感觉比较困难。其实不难,只不过动机不同,并且在实践中更有意义。 你可以把这一页面的各个部分当作独立的版块来看待,无论你选择哪一块。你可以绝对或相对地用彼块取代此块。 定位 定位属性position用于定义一个元素是否absolute(绝对),relative(相对),static(静态),或...

经验教程

588

收藏

53
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部