首先要了解如下概念:

viewport,窗口大小,containing block,block formatting context,inline formatting context,dirction和unicode-bidi,display和float以及postion的三者关系,盒子模型。

一.viewport

viewport是你所看到的窗口。它有两个重要属性,一个是css像素,另一个是设备像素。

设备像素由分辨率决定,css像素由开发者决定。

设备像素和css像素的关系有

1.重叠,即1css像素等于1设备像素。

2.缩小浏览器,一个设备像素覆盖多个css像素。

3.放大浏览器,一个css像素覆盖多个设备像素。

设置width=device-width之后,一个css像素会占用多个设备像素,从而感觉上网页放大了。占用计算方式是,css像素=设备像素/(device-width)。

二.窗口大小

浏览器窗口的大小,一种带滚动条,另一种不带滚动条。

不带滚动条的窗口宽高获取,document.documentElement.clientWidth和document.documentElement.clientHeight。

带滚动条的窗口宽高获取,window.innerWidth和window.innerHeight。

这些个属性获取到的是css像素。因此,当用户放大浏览器,一个css像素覆盖多个设备像素,用户能看到的CSS像素变少,所以window.innerWidth会变小

参考链接:两个viewport的故事

三.containing block

containing block(包含块)是,一个元素的盒模型的定位计算所依据的矩形(box)。

如果一个元素的’position’为’relative’或’static’,那么其包含块则是由最近的块级或单元格或行内块级元素的内容区创建。

如果一个元素’position’为’fixed’,那么其包含块为当前屏幕的可视窗口。

如果一个元素的’position’为’absolute’,那么其包含块则是最近的’position’为’relative’ 或’absolute’或 ‘fixed’的祖先元素,有如下几种情况:

->如果其祖先元素是行内元素,则包含块取决于其祖先元素的 “direction” 特性。

->其他情况下,如果祖先元素不是行内元素,那么包含块的区域应该是祖先元素的内边距边界。

详情看参考链接:smallni的包含块containing block曹鹏的什么是CSS包含块(Containing Block)

四.block formatting context

BFC主要是用来计算包含浮动元素的元素宽高。

它的触发方式:

float:(任何值除了none)
overflow:(任何值除了visible)
display:(table-cell/table-caption/inline-block)
position:(任何值除了static/relative)

它的效果:

1.浮动元素参与高度的计算

2.与浮动元素相邻,不覆盖浮动元素

3.不会与它们的子元素发生外边距折叠

参考链接:smallni的hasLayout && Block Formatting Contexts

五.inline formatting context

有文字便有inline box,有inline box便有行框line boxes,有行框意味着它是在ifc里面。

1.行框的宽高计算:

浮动的文字在行框外面,即不参与行框的宽高计算。行框的高度由文字的大小决定,宽度由包含块containg block决定,会被浮动框隔断哦。

2.行内框的垂直对齐

当一个行内框的高度小于包含它的行框的高度时,在行框中垂直方向上的对齐决定于 'vertical-align' 特性。 'vertical-align' 默认值为基线( 'baseline' )对齐。

3.行内框在行框中水平方向上的对齐

取决于text-align属性。

参考链接:KB010: 常规流( Normal flow )

六.dirction和unicode-bidi

让文字倒着来,比如"例如strong为行内元素,行内元素可能会占多行,所以行内元素框可能由多行多个框组成。" 变成 "。成组框个多行多由能可框素元内行以所,行多占会能可素元内行,素元内行为gnorts如例"

设置unicode-bidi: bidi-override;direction: rtl;即可

七.display和float以及postion的三者关系

1. 'display' 的值为 'none'

如果 'display' 的值为 'none',那么 'position' 和 'float' 不起作用。在这种情况下,元素不产生框。因此浮动和定位无效。

2. 'position' 的值是 'absolute' 或 'fixed'

否则,如果 'position' 的值是 'absolute' 或 'fixed',框就是绝对定位的,'float' 计算后的值应该是 'none',并且,'display' 会被按照下表设置。 框的位置将由 'top','right','bottom' 和 'left' 属性和该框的包含块确定。

3. 'float' 的值不是 "none"

如果 'float' 的值不是 "none",该框浮动并且 'display' 会被按照转换对应表设置。

总结是:浮动或绝对定位的元素,只能是块元素或表格。

参考链接:KB009: CSS 定位体系概述 (那个图float的流程是错误的)

八.盒子模型

盒子模型就不说了,太多书籍解释这个。

需要注意的是

1.盒子的宽高是cotent+padding+border+margin

2.盒子的背景颜色和图像默认覆盖到content+padding+border

3.块级盒子兄弟的上下margin,父和第一个子元素margin-top会发生折叠。

参考:css彻底研究,写给大家看的css书,精通CSS:高级Web标准解决方案(第2版),精通CSS+DIV网页样式与布局

草珊瑚的css基础的更多相关文章

  1. 前端开发:css基础知识之盒模型以及浮动布局。

    前端开发:css基础知识之盒模型以及浮动布局 前言 楼主的蛮多朋友最近都在学习html5,他们都会问到同一个问题 浮动是什么东西?  为什么这个浮动没有效果?  这个问题楼主已经回答了n遍.今天则是把 ...

  2. CSS基础总结

    CSS基础总结链接地址:http://segmentfault.com/a/1190000002773955

  3. CSS基础篇之了解CSS和它的基本属性

    CSS是什么? CSS英文全名是Cascading Style Sheets翻译过来就是层叠样式表,它主是把网页表现与内容分离的一种样式设计语言.这种语言能优化我们编程,把东西简化和优化写法,而且不同 ...

  4. HTML5 -入门 (---css样式-------------(css基础与css选择器)---------------------—)

    ---恢复内容开始--- 一css基础入门与css选择器 CSS英文全拼:cascading style sheet 层叠样式表. 在html中使用:要在head中写style标签,所有样式放在sty ...

  5. css 基础---选择器

    1.css基础 selector {property: value} eg: h1 {color:red; font-size:14px;} p { text-align: center; color ...

  6. 妙味课堂——HTML+CSS基础笔记

    妙味课堂的课程讲得非常的清楚,受益匪浅.先把HTML和CSS基础课程部分视频的学习笔记记录如下: padding #PS基础 ##前端需要的PS技能 - PS技能(前端需要):切图.修图.测量 - P ...

  7. WEB前端开发CSS基础样式全面总结

    Web前端开发css基础样式全面总结 颜色和单位的使用 颜色 用颜色的名字表示颜色,比如:red 用16进制表示演示 比如:#FF0000 用rgb数值表示颜色,rgb(红,绿,蓝),每个值都在0-2 ...

  8. css基础不扎实

    写了两周的网页,发现自己的css基础还是很差的,当时培训学习的时候就发现了,我做的页面都特别的别扭和丑吧,在班级上应该是垫底的: 原先只知道用float,不会使用定位,网页连固定定位也不会,现在发现, ...

  9. css基础总结一

    最近在弄一个简单管理系统的前端,所以打算将做项目的一些个人感想以及总结简单罗列下,当然,主要针对前端的基础部分以及一些常用的前端个人简单技巧总结.主要分为js部分和css部分,下面是css的基础部分总 ...

随机推荐

  1. pybot/robot命令参数说明

    Robot Framework -- A generic test automation framework Version: 3.0 (Python 3.4.0 on win32) Usage: r ...

  2. 未知的系统错误(The transaction is no longer active - status: 'Committed'. No further JDBC access is allowed within this transaction.)

    被调用接口处理并发能力太脆弱导致的问题. 重新请求下即可.

  3. MySQL连接字符串总结

    一.MySQL Connector/ODBC 2.50 (MyODBC 2.50)连接方式 1.本地数据库连接 Driver={MySQL};Server=localhost;Option=16834 ...

  4. 《图解TCP/IP》

    MAC寻址:地址转发表:IP寻址:路由控制表. 网卡(网络接口卡),NIC. 循环复用DNS技术. 代理服务器是一种应用网关.防火墙. LLC是Logical Link Control的缩写,意为:逻 ...

  5. $q服务的API详解

    下面我们通过讲解$q的API让你更多的了解promise异步编程模式.$q是做为angularjs的一个服务而存在的,只是对promise异步编程模式的一个简化实现版,源码中剔除注释实现代码也就二百多 ...

  6. 八大排序算法之四选择排序—堆排序(Heap Sort)

    堆排序是一种树形选择排序,是对直接选择排序的有效改进. 基本思想: 堆的定义如下:具有n个元素的序列(k1,k2,...,kn),当且仅当满足 时称之为堆.由堆的定义可以看出,堆顶元素(即第一个元素) ...

  7. 关于left join、right join和inner join

    总结, 1.select * from A left join B on A.XX=B.XX 左侧显示A的列名,右侧显示B的列名 左侧,显示A表的所有列 右侧, A.XX=B.XX的时候,显示B表的列 ...

  8. Pipe(点积叉积的应用POJ1039)

    Pipe Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9723   Accepted: 2964 Description ...

  9. JAVA基础知识之JVM-——通过反射查看类信息

    Class实例 当类被加载之后,JVM中就会生成一个Class实例,通过这个实例就可以访问JVM中的这个类.有三种方式可以获取Class对象 使用Class的静态方法forName(完整包名) 调用类 ...

  10. sql中decode(...)函数的用法

    相当于if语句 decode函数比较1个参数时 SELECT ID,DECODE(inParam,'beComparedParam','值1' ,'值2') name FROM bank #如果第一个 ...