首先要了解如下概念:

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. USB 设备类协议入门【转】

    本文转载自:http://www.cnblogs.com/xidongs/archive/2011/09/26/2191616.html 一.应用场合 USB HID类是比较大的一个类,HID类设备属 ...

  2. HAL中通过JNI调用java方法【转】

    转载请注明本文出处:http://www.cnblogs.com/xl19862005 作者:Xandy 由于工作的需要,最近一直在研究HAL.JNI.Java方法之间互调的问题,并做了如下一些记录和 ...

  3. TI CC254x BLE教程 2

    连接更新请求(connection update request) 如果slave不满意现有的连接参数, 比如间隔, 延迟等等, 可以向master提出自己希望的参数范围 连接终止(connectio ...

  4. 专为物联网开发的开源操作系统Contiki(转)

    专为物联网开发的开源操作系统Contiki(转)  (2012-04-19 15:31:09) 原文网址:http://blog.sina.com.cn/s/blog_6de000c201010z7n ...

  5. Web SQL

    HTML5本地存储——Web SQL Database 基于 HTML5 中的 Web SQL Database 来构建应用程序 前端HTML5几种存储方式的总结 <!DOCTYPE HTML& ...

  6. (转)java线程安全问题之静态变量、实例变量、局部变量

    java多线程编程中,存在很多线程安全问题,至于什么是线程安全呢,给出一个通俗易懂的概念还是蛮难的,如同<java并发编程实践>中所说: 写道 给线程安全下定义比较困难.存在很多种定义,如 ...

  7. Array JSON

    Tool: Online jsonviewer JSON: JavaScript Object Notation. JSON is a syntax for storing and exchangin ...

  8. PHP中header函数的用法及其注意重点是什么呢

    1.使用header函数进行跳转页面: header('Location:'.$url); 其中$url就是将要跳转的url了. 这种用法的注意事项有以下几点: •Location和":&q ...

  9. PHP开发异步高性能的MySQL代理服务器

    ySQL数据库对每个客户端连接都会分配一个线程,所以连接非常宝贵.开发一个异步的MySQL代理服务器,PHP应用服务器可以长连接到这台Server,既减轻MYSQL的连接压力,又使PHP保持长连接减少 ...

  10. oracle-odu小试牛刀--恢复drop表的数据

         现在进入oracle12c时代:普遍用的oracle版本为10g以上.在oracle10g之后提供了一个回收的机制.所以恢复drop表的数据以及表很容易.当然需要打开回收机制以及是归档模式. ...