标准盒子模型:宽度=内容宽度(content)+左右padding+左右margin+border
IE盒子模型(怪异盒子模型):宽度=内容宽度(content+左右padding+border)+左右margin
box-sizing 属性允许以特定的方式定义匹配某个区域的特定元素。
box-sizing: content-box; 宽度和高度分别应用到元素的内容框。在宽度和高度之外绘制元素的内边距和边框。
box-sizing: border-box; 为元素设定的宽度和高度决定了元素的边框盒。就是说,为元素指定的任何内边距和边框都将在已设定的宽度和高度内进行绘制。通过从已设定的宽度和高度分别减去边框和内边距才能得到内容的宽度和高度。
即box-sizing属性可以指定盒子模型种类,content-box指定盒子模型为W3C(标准盒子模型),border-box为IE盒子模型(怪异盒子模型)。
id选择器(#myid)、类选择器(.myclassname)、标签选择器(div, h1, p)、相邻选择器(h1 + p)、子选择器(ul > li)、后代选择器(li a)、通配符选择器(*,所有元素)、属性选择器(a[rel=”external”])、伪类选择器(a:hover, p:nth-child)
选择器优先级:
在属性后面使用 !important 会覆盖页面内任何位置定义的元素样式。
优先级顺序:!important > 行内样式>ID选择器 > 类选择器 > 标签 > 通配符 > 继承 > 浏览器默认属性
权重规则:
第一等:代表内联样式,权值为1000。
第二等:代表id选择器,,权值为0100。
第三等:代表类,伪类和属性选择器,权值为0010。
第四等:代表类型选择器和伪元素选择器,如div p,权值为0001。
通配符、子选择器、相邻选择器等的。如*、>、+,权值为0000。
通过权重计算来实现样式的展示。
可继承的属性:color,line-height,font,font-family,font-size,font-style,font-variant,font-weight,text-decoration,text-transform,direction等等。
不可继承的样式:border, padding, margin, width, height,display,overflow,position,left,right,top,bottom,z-index,float,clear,table-layout,vertical-align等等。
Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。设置为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效。
采用 Flex 布局的元素,称为 Flex 容器。
flex容器里边有6个属性:
flex容器内各元素内的属性:
1、
#juzhong{
width: 100px;
height: 100px;
margin: 0 auto;
background-color: red;
}
2、绝对定位居中
#juzhong{
width: 100px;
height: 100px;
background-color: red;
position: absolute;
left: 0;
right: 0;
margin: 0 auto;
}
3、相对定位居中
#juzhong{
width: 100px;
height: 100px;
background-color: red;
position: relative;
left: 50%;
transform: translate(50%,0);
}
3、浮动居中
#juzhong{
width: 100px;
height: 100px;
background-color: red;
position: absolute;
float: left;
left: 50%;
margin: 0 -50px;
}
4、flexbox居中
#juzhongfather{
display: flex;
justify-content: center;
}
#juzhong{
width: 100px;
height: 100px;
background-color: red;
}
1、绝对定位垂直居中
#center{
width: 100px;
height: 100px;
position: absolute;
background-color: black;
top: 0;
bottom:0;
left: 0;
margin: auto;
right: 0;
}
2、
#center{
width: 100px;
height: 100px;
position: absolute;
background-color: black;
top: 50%;
left: 50%;
transform: translate(-50%,-50%); //transform可换成margin:-50px 0 0 -50px; method3
}
3、flexbox垂直居中
#juzhongfather{
display:flex;
justify-content: center;
align-items: center;
}
#juzhong{
width: 100px;
height: 100px;
background-color: red;
}
static(默认):按照正常文档流进行排列;
relative(相对定位):不脱离文档流,参考自身静态位置通过 top, bottom, left, right 定位;
absolute(绝对定位):参考距其最近一个不为static的父级元素通过top, bottom, left, right 定位;
fixed(固定定位):所固定的参照对像是可视窗口。
1、float布局
<style>
.left{
float: left;
width: 200px;
background-color: blue;
}
.right{
float: right;
width: 200px;
background-color: gray;
}
.middle{
margin-right: 200px;
margin-left: 200px;
background-color: red;
}
</style>
<body>
<div class="left">left</div> //div的顺序一定是左右中!!
<div class="right">right</div>
<div class="middle" >middle</div>
</body>
2、flex布局
<style>
.content{
flex: 1;
flex-direction: row;
display: flex;
}
.left{
background-color: blue;
height: 100px;
width: 100px;
}
.middle{
background-color: red;
height: 100px;
flex:1;
}
.right{
background-color: pink;
width: 100px;
}
</style>
<body>
<div class="content">
<div class="left"></div> //flex布局就按照左中右
<div class="middle" ></div>
<div class="right"></div>
</div>
</body>
一般情况下, 我们设置盒子的宽高度, 及上下左右边框。会呈现如下效果
将盒子的宽高设置0后,效果如下:
可以看到整个图形其实是由4个边界的样式构成,将其中3个边界的样式颜色设置transparent,后,就可以呈现出三角形的效果。
.triangle{
width: 0;
height: 0;
border-top: 40px solid #FF9600;
border-left: 40px solid transparent;
border-right: 40px solid transparent;
border-bottom: 40px solid transparent;
}
.content{ //上边一个
background-color: tomato;
width: 100%;
height: 600px;
}
.content1{ //下边两个用float设置为不换行
float: left;
width: 50%;
height: 600px;
background-color: violet;
}
.content2{
float: right;
width: 50%;
background-color: teal;
height: 600px;
}
浏览器把获取到的HTML代码解析成1个DOM tree(包含了所有HTML标签,包括display:none隐藏,还有用JS动态添加的元素等),DOM tree与样式组合构建render tree(不包含隐藏的节点)。
回流:
当render tree中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建。这就称为回流(reflow)。每个页面至少需要一次回流,就是在页面第一次加载的时候,构建render tree。回流也被称为重排,其实从字面上来看,重排更容易让人形象易懂(即重新排版整个页面)
重绘:
当render tree中的一些元素需要更新属性,而这些属性只是影响元素的外观,风格,而不会影响布局的,比如background-color。则就叫称为重绘。
回流必将引起重绘,而重绘不一定会引起回流
减少回流和重绘的方法:
display:none 不显示对应的元素,在文档布局中不再分配空间(回流+重绘)
visibility:hidden 隐藏对应元素,在文档布局中仍保留原来的空间(重绘)
BFC(Block Formatting Context)格式化上下文,是Web页面中盒模型布局的CSS渲染模式,指一个独立的渲染区域或者说是一个隔离的独立容器。
形成条件:
特性:
CSS 的 Float(浮动),会使元素向左或向右移动,其周围的元素也会重新排列。
特性:
1、浮动的元素脱标
即浮动元素脱离正常的文档流
2、浮动的元素互相贴靠
3、收缩
一个浮动的元素,如果没有设置width,那么将自动收缩为内容的宽度
4、浮动的元素会被包围
即在浮动元素会被非浮动元素包围。
设置元素浮动后,该元素的display值为block。
浮动带来的问题:
清除浮动的方法:
块级元素:
div、h1-h6、ul、ol、form、dl、dt、dd、p、table
行内元素:
span、a、b、strong、em、input、img、i、del、label
通过媒体查询可以为不同大小和尺寸的媒体定义不同的css,适应相应的设备的显示。
首先需要设置meta标签
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
格式:
/* 屏幕尺寸大于960px时(普通彩色屏幕) */
@media only screen and (min-width:960px){ }
/* 屏幕尺寸小于1440px时 */
@media only screen and (max-width:1440px){ }
/* 屏幕尺寸大于960px而小于1920px */
@media only screen (min-width: 960px) and (max-width: 1920px){ }
/* 屏幕大于2000px时(MAC) */
@media only screen and (min-width:2000px){ }
/* 当设备可视宽度小于480px (iphone)*/
@media only screen and (max-device-width:480px){ }
/* 当设备可视宽度等于768px时 (iPad) */
@media only screen and (device-width:768px){ }
/* 屏幕尺寸大于481px而小于1024px (iPad 竖屏) */
@media only screen and (min-device-width: 481px) and (max-device-width: 1024px) and (orientation:portrait) { }
/* 屏幕尺寸大于481px而小于1024px (iPad横屏) */
@media only screen and (min-device-width: 481px) and (max-device-width: 1024px) and (orientation:landscape) { }
CSS预处理器是一种专门的编程语言,用来为CSS增加一些编程特性(CSS本身不是编程语言)。
不需要考虑浏览器兼容问题,因为CSS预处理器最终编译和输出的仍是标准的CSS样式。
可以在CSS预处理器中:使用变量、简单逻辑判断、函数等基本编程技巧。
Sass:
特点:
$blue:#1875e7;
div{
color:$blue;
border-#{$side}-radius:5px;
margin:(14px/2);
top:50px+100px;
right:$var*10%;
}
.father{
.son{
color:red
}
.son2{
color:blue
}
}
子选择器
.father{
>.son{
color:red
}
}
.borderBox {
border: {
width: 10px;
style: solid;
color: red;
}
}
相当于
.borderBox {
border-width: 10px;
border-style: solid;
border-color: red;
}
混合器使用@mixin标识符定义,重复样式可以用到
@mixin borderstyle {
border: 1px solid red;
font-size: 16px;
font-weight: bold;
}
.testBox {
@include borderstyle;
}
相当于
.testBox {
border: 1px solid red;
font-size: 16px;
font-weight: bold;
}
margin:
padding:
兼容性的问题:在IE5 IE6中,为float的盒子指定margin时,左侧的margin可能会变成两倍的宽度。通过改变padding或者指定盒子的display:inline解决。
响应式网站设计(Responsive Web design)是一个网站能够兼容多个终端。
基本原理是通过媒体查询检测不同的设备屏幕尺寸做处理。
页面头部必须有meta声明。
写在body标签前,因为页面加载是自上而下,所以会首先加载样式。
写在body标签后由于浏览器以逐行方式对HTML文档进行解析,当解析到写在尾部的样式表(外联或写在style标签)会导致浏览器停止之前的渲染,等待加载且解析样式表完成之后重新渲染,在windows的IE下可能会出现FOUC现象(即样式失效导致的页面闪烁问题)。
文档样式短暂失效FOUC(Flash of Unstyled Content)
如果使用import方法对CSS进行导入,会导致某些页面在Windows 下的Internet Explorer出现一些奇怪的现象:以无样式显示页面内容的瞬间闪烁,这种现象称之为文档样式短暂失效,简称为FOUC。原因:
当样式表晚于结构性html加载,当加载到此样式表时,页面将停止之前的渲染。此样式表被下载和解析后,将重新渲染页面,也就出现了短暂的花屏现象。解决方法:使用LINK标签将样式表放在文档HEAD中。
CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的“background-image”,“background- repeat”,“background-position”的组合进行背景定位,background-position可以用数字能精确的定位出背景图片的位置。
CSS Sprites为一些大型的网站节约了带宽,让提高了用户的加载速度和用户体验,不需要加载更多的图片