首先要了解如下概念:

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. mysql主从同步及清除信息

    主:reset master; 从:reset slave all; mysql主从配置: 1.MySQL主配置文件增加如下:default-storage-engine = innodbinnodb ...

  2. PHP将多张小图拼接成一张大图

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> < ...

  3. <<构建之法>>略读感想

    经过对构建之法这本书的快速阅读和学习,我有以下疑问. 1.对软件工程来说是应该更注重结果和功能的实现还是更注重代码的易读和完整? 2.应该怎样平衡不同用户的不同需求以达到使大多数人满意的目的? 3.应 ...

  4. Cocos2dx-lua开发之c++绑定到lua

    一. 简单介绍 文章介绍是在实际的游戏开发项目中,将自定义的C++类绑定到lua中,能够让lua调用c++类.会创建一个python脚本,执行python脚本会让自动将我们的c++类绑定到lua.生成 ...

  5. 5.toogleButton以及Switch

    Switch现在用得更多,比toogleButton界面美观,用户体验也要好. 点击事件: 用isChecked来判断点击的是哪一个,然后做相对应的回应.

  6. Mybatis用法小结

    select 1.基本用法 <select id="selectTableOne" resultType="com.test.entity.tableOne&quo ...

  7. ResultSetMetaData和DatabaseMetaData实现数据库中属性,属性值,属性所赋值的获取等

    ----------------------------------------------有些类下面代码中有; public class Test1 { TestDAO t=new TestDAO( ...

  8. 如何在 Eclipse 中连接源码

    1:首先在window 中 打开首选项(preferences) 找到如下java -- 已安装的JRE

  9. Python相对路径转绝对路径,绝对路径转相对路径

    1.绝对路径转相对路径 print os.path.relpath("d:/MyProj/MyFile.txt") #..\MyProj\MyFile.txt 是根据当前路径的相对 ...

  10. windows下UDP服务器和客户端的实现

      UDP是面向非连接的协议,因此在实现UDP服务器时,服务器不用总是处于监听状态.可以直接收发数据.   服务器端   1.初始化 WASStartup ( ... )   2.创建Socket s ...