1、流动模型


HTML元素在默认情况下都是按照“流动模型”进行布局的,网上也有人称之为“普通流”、“文档流”之类的。这种布局模式的特点在于:
  • 块状元素都会在所处的包含元素内自上而下按顺序垂直延伸分布
  • 内联元素都会在所处的包含元素内从左到右水平分布显示
 

2、层模型


如上图,网页呈现的内容,就像PS中的图层一样,是多层重叠呈现的效果,当然,一般情况下我们的网页只有一层,因为任何元素在默认情况下是不能浮动的。但是脱离了“普通流”的层,顾名思义是浮动的,那么它会覆盖下一层元素。

2.1 float

然而,当一个元素被定义为浮动了,那么效果不言而喻,浮动元素使用 float: left/right 来定义,设置后其会脱离“普通流”:
  • 浮动元素变为块级,且不再占据原来那层的空间,它还会覆盖下一层的元素
  • 浮动后,该元素的下个非浮动兄弟元素,会往前移动补充位置(浮动元素脱离该层了,那么其后的非浮动元素自然要往前靠来补位)
  • 如果浮动元素的下个兄弟元素中有内联元素(往往是文字),则会围绕该浮动元素,类似“文字围绕图片”的效果
  • 浮动的设定只有left/right,没有top/bottom

2.2 position

那么在层模型中,这些元素又是如何定位的呢,这就要用到position属性,并通过left/right/top/bottom进行定位:
  • position:absolute
  • position:fixed
  • position:relative

注:
  • position的默认值是static,即不会特殊定位
  • 浮动的元素如果不想覆盖下层元素,可以通过z-index属性调整
  • 清除浮动,此处不再展开(e.g.清除浮动


position:absolute 绝对定位
绝对定位的元素,会脱离“普通流”,它的定位原则是:相对于其最接近的一个具有定位属性的父包含块,如果没有,则相对于浏览器窗口。同时,该元素变为块级。划下重点:最近的具有定位属性position的父包含块;如果不存在这样的包含块,则相对于浏览器窗口。

e.g.
.relative {
position: relative;
width: 600px;
height: 400px;
}
.absolute {
position: absolute;
top: 120px;
right: 0;
width: 300px;
height: 200px;
}
12
 
1
.relative {  
2
  position: relative;
3
  width: 600px;
4
  height: 400px;
5
}
6
.absolute {
7
  position: absolute;
8
  top: 120px;
9
  right: 0;
10
  width: 300px;
11
  height: 200px;
12
}



position:fixed 固定定位
固定定位的元素,也会脱离“普通流”,但它的定位则是相对于视图(即屏幕内的网页窗口),所以除非你拖动浏览器的窗口,否则该元素的位置是始终不动的。同时,该元素变为块级。

e.g.
.fixed {
position: fixed;
bottom: 0;
right: 0;
width: 200px;
background-color: white;
}
7
 
1
.fixed {
2
  position: fixed;
3
  bottom: 0;
4
  right: 0;
5
  width: 200px;
6
  background-color: white;
7
}
 


position:relative 相对定位
相对定位的元素,比较特殊,它的定位原则是相当于该元素在原“普通流”中的位置进行偏移。意思就是,相对定位完成的过程是首先按static(float)方式生成一个元素(并且元素像层一样浮动了起来),然后相对于以前的位置移动,移动的方向和幅度由left、right、top、bottom属性确定,偏移前的位置保留不动。

e.g.
.relative1 {
position: relative;
}
.relative2 {
position: relative;
top: -20px;
left: 20px;
background-color: white;
width: 500px;
}
 
1
.relative1 {
2
  position: relative;
3
}
4
.relative2 {
5
  position: relative;
6
  top: -20px;
7
  left: 20px;
8
  background-color: white;
9
  width: 500px;
10
}
 

3、参考链接



[浅谈CSS核心概念] CSS布局模型:float和position的更多相关文章

  1. CSS核心概念之盒子模型

    盒子模型(Box Model) 关于更多CSS核心概念的文章请关注GitHub--CSS核心概念. 当对一个文档进行布局的时候,浏览器的渲染引擎会根据标准之一的 CSS 基础框盒模型(CSS basi ...

  2. [浅谈CSS核心概念] CSS元素类型和盒模型

    元素类型 在CSS中,HTML标签元素分为三种类型: 块状元素 内联元素(也叫行内元素) 内联块状元素 它们之间的区别在于: 块级元素会独占一行,内联元素和内联块状元素则都会在一行内显示 块状元素和内 ...

  3. 【转】浅谈UML的概念和模型之UML九种图

    原文地址:浅谈UML的概念和模型之UML九种图 目录: UML的视图 UML的九种图 UML中类间的关系 上文我们介绍了,UML的视图,在每一种视图中都包含一个或多种图.本文我们重点讲解UML每种图的 ...

  4. CSS——NO.7(布局模型)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  5. 浅谈SpringBoot核心注解原理

    SpringBoot核心注解原理 今天跟大家来探讨下SpringBoot的核心注解@SpringBootApplication以及run方法,理解下springBoot为什么不需要XML,达到零配置 ...

  6. CSS(三) - 定位模型 - float的几要素

    要点 1.浮动盒子会脱离文文档流,不会在占用空间. 2.非浮动元素几乎当浮动盒子根本不存在一样该怎么布局怎么布局不会被影响 3.非浮动元素中的文本内容会记住浮动元素的大小,并在排布时避开它,为其留出响 ...

  7. CSS核心内容之盒子模型

    1.盒子模型具有的属性: 内容(content) 填充(padding) 边框(border) 边界(margin) 图示如下: 2.流概念 1.流的概念 在现实生活中已经流水,在网页设计中就是指元素 ...

  8. 浅谈UML的概念和模型之UML九种图

    1.用例图(use case diagrams) [概念]描述用户需求,从用户的角度描述系统的功能 [描述方式]椭圆表示某个用例:人形符号表示角色 [目的]帮组开发团队以一种可视化的方式理解系统的功能 ...

  9. [UML]转:浅谈UML的概念和模型之UML九种图

    转自:http://blog.csdn.net/jiuqiyuliang/article/details/8552956 目录: UML的视图 UML的九种图 UML中类间的关系 上文我们介绍了,UM ...

随机推荐

  1. python邮件发送

    '''qq邮件与其他邮件有所不同,下以我的qq邮件为例(切勿转载):''' import osimport smtplibfrom email.mime.text import MIMEText # ...

  2. win7下解决vs2015新建项目,提示“未将对象引用设置到引用实例“的问题

    问题描述: 打开vs2015新建c++项目时,出现有如下内容的对话框“未将对象引用设置到引用实例”的提示 解决方法: 1.  温馨提示:千万不要一冲动,就去卸载vs2015!! win7下安装vs20 ...

  3. ActiveReports 报表控件V12新特性 -- 可定制的安装设置

    ActiveReports是一款专注于 .NET 平台的报表控件,全面满足 HTML5 / WinForms / ASP.NET / ASP.NET MVC / WPF 等平台下报表设计和开发工作需求 ...

  4. Java java jdk在Linux下安装与环境变量的配置

    java jdk在Linux下安装与环境变量的配置 by:授客 QQ:1033553122 linux环境:CentOS-6.0-x86_64-bin-DVD1.iso [root@localhost ...

  5. Unity Profiler Memory

    当游戏出现闪退时很大概率是内存出现了问题,查找下代码中是否报错导致一直申请内存,还是申请的内存没有释放掉,比如图集等. 比如开着Profiler,一直开关界面看界面用到的图集是否被释放掉. 点击Mem ...

  6. 机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes)

    机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes) 关键字:朴素贝叶斯.python.源码解析作者:米仓山下时间:2018-10-2 ...

  7. innodb索引统计信息

    以下分析基于mysql5.6.10 统计信息相关字典表 information_schema.statistics mysql.innodb_table_stats mysql.innodb_inde ...

  8. 适用于 Windows 的自定义脚本扩展

    自定义脚本扩展在 Azure 虚拟机上下载并执行脚本. 此扩展适用于部署后配置.软件安装或其他任何配置/管理任务. 可以从 Azure 存储或 GitHub 下载脚本,或者在扩展运行时将脚本提供给 A ...

  9. Django中的DateTimeField格式

    转自:http://www.nanerbang.com/article/5488/ 创建django的model时,有DateTimeField.DateField和TimeField三种类型可以用来 ...

  10. skype客户端搜不到联系人解决办法

    1.确认skype客户端登陆的配置信息 按住Ctrl 键不放,右击右下角任务栏 skype 图标,选择:配置信息,确认skype的:GAL搜索或基于服务器的搜索为:基于服务器的搜索,如下图所示: 2. ...