当我们对一个文档进行布局的时候,浏览器的渲染引擎会根据标准之一的css基础的盒模型,将所有的元素表示为一个个的矩形的盒子
一个盒子有四个部分组成,content(实际内容,显示文本和图像)、padding(内边距)、border(边框)、margin(外边距)
盒模型有两种:分别是标准盒模型和怪异盒模型(IE盒模型)
标准盒模型的总宽度:width= content部分的宽度
怪异盒模型的总宽度:width=content+padding+border
可以通过修改元素的box-sizing属性来改变元素的盒模型:
box-sizing:content-box表示标准盒模型(默认值)
box-sizing:border-box表示IE盒子模型(怪异盒模型)
行内元素:a,b,span,img,input,strong,label,button,select,textarea,em
块级元素:div,ul(无序列表),ol,li,dl(自定义列表),dt(自定义列表项),dd(自定义列表项的定义),p,h1-h6,blockquote(块引用)
空元素(void):即没有内容的HTML元素。br(换行),hr(水平分割线),meta,link,input,img
区别:
行内元素与块级函数可以相互转换,通过修改display属性值来切换块级元素和行内元素,行内元素display:inline,块级元素display:block。
行内元素和其他行内元素都会在一条水平线上排列,都是在同一行的;
块级元素却总是会在新的一行开始排列,各个块级元素独占一行,垂直向下排列,若想使其水平方向排序,可使用左右浮动(float:left/right)让其水平方向排列。
行内元素不可以设置宽高,宽度高度随文本内容的变化而变化,但是可以设置行高(line-height),同时在设置外边距margin上下无效,左右有效,内填充padding上下无效,左右有效;
块级元素可以设置宽高,并且宽度高度以及外边距,内填充都可随意控制。
块级元素可以包含行内元素和块级元素,还可以容纳内联元素和其他元素;
行内元素不能包含块级元素,只能容纳文本或者其他行内元素。
意思就是说:行内元素不可以设置宽高,不独占一行
块级元素可以设置宽高,独占一行
作用结果不同、浏览器解析方式不同、请求资源类型不同。
作用结果不同
href 用于在当前文档和引用资源之间确立联系;
src 用于替换当前内容。
浏览器解析方式不同
若在文档中添加href ,浏览器会识别该文档为 CSS 文件,就会并行下载资源并且不会停止对当前文档的处理。这也是为什么建议使用 link 方式加载 CSS,而不是使用 @import 方式。
当浏览器解析到src ,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等也如此,类似于将所指向资源应用到当前内容。这也是为什么建议把 js 脚本放在底部而不是头部的原因。
请求资源类型不同
href 表示超文本引用。用来建立当前元素和文档之间的链接。常用的有:link、a。
请求 src 资源时会将其指向的资源下载并应用到文档中。常用的有script,img 、iframe。
简而言之,src用于替换当前元素;href用于在当前文档和引用资源之间建立联系。
CSS hack就是通过在CSS样式中加入一些特殊的符号,让不同的浏览器识别不同的符号(哪些浏览器识别哪些符号是有标准的,CSS hack就是让你记住这个标准),从而达到应用不同CSS样式的目的。
CSS Hack大致有三种形式,分别是CSS类中、选择器的Hack和HTML头引用(IF IE)的Hack。CSS Hack主要是针对类中的Hack:比如IE6可以识别下划线’ _ ‘和星号’ * ‘,IE7可以识别星号’ * ‘,但是不能识别下划线’ _ ',firefox也不能识别。
渐进增强(Progressive Enhancement):一开始就针对低版本浏览器进行构建页面,完成基本的功能,然后再针对高级浏览器进行效果、交互、追加功能达到更好的体验。
优雅降级(Graceful Degradation):一开始就构建站点的完整功能,然后针对浏览器测试和修复。比如一开始使用 CSS3 的特性构建了一个应用,然后逐步针对各大浏览器进行 hack 使其可以在低版本浏览器上正常浏览。
px 和 em 都是⻓度单位,区别是, px 的值是固定的,指定是多少就是多少,
计算⽐较 容易。 em 得值不是固定的,并且 em 会继承⽗级元素的字体⼤⼩。
浏览器的默认字体⾼都是 16px 。所以未经调整的浏览器都符合: 1em=16px 。
那么 12px=0.75em , 10px=0.625em 。
HTML5 不基于 SGML(标准通用标记语言) ,因此不需要对 DTD ( 文档类型定义 ) 进⾏引⽤,但是需要 doctype 来规范浏览器 的⾏为
HTML4.01 基于 SGML ,所以需要对 DTD 进⾏引⽤,才能告知浏览器⽂档所使⽤的⽂档 类型
1、域名解析
2、发起TCP的三次握手
3、建立TCP连接后发起http请求
4、服务器端响应http请求,浏览器得到html码
5、浏览器解析html代码,并请求html代码中的资源
6、浏览器对页面进行渲染并呈现给客户
HTTP事务有以下四个部分组成:
HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。
解析html代码,生成DOM tree
解析css代码,生成CSSOM tree
通过DOM tree 和 CSSOM tree 生成 Render tree
Layout(布局),计算Render tree中各个节点的位置及精确大小
Painting(绘制),将render tree渲染到页面上
1、IE浏览器内核:Trident内核,也是俗称的IE内核;
2、Chrome浏览器内核:统称为Chromium内核或Chrome内核,以前是Webkit内核,现在是Blink内核;
3、Firefox浏览器内核:Gecko内核,俗称Firefox内核;
4、Safari浏览器内核:Webkit内核;
5、Opera浏览器内核:最初是自己的Presto内核,后来是Webkit,现在是Blink内核;
6、360浏览器、猎豹浏览器内核:IE+Chrome双内核;
7、搜狗、遨游、QQ浏览器内核:Trident(兼容模式)+Webkit(高速模式);
8、百度浏览器、世界之窗内核:IE内核;
9、2345浏览器内核:以前是IE内核,现在也是IE+Chrome双内核;
优化图像
图像格式区别
html5新特性
语义化标签:文档头部:header、文档尾部:footer、文档中的节点:section、导航:nav、侧边栏:aside、独立内容区域:article
增强型表单:HTML5 拥有多个新的表单 Input 输入类型。这些新特性提供了更好的输入控制和验证
新增表单属性:
本地存储
localStorage 没有时间限制的数据存储;
sessionStorage, session 的数据存储,当用户关闭浏览器窗口后,数据会被删除
新事件:
css3新特性
CSS动画属性会触发整个页面的重排,重绘,box-shadow和gradients的性能杀手
在使用css3 transtion做动画效果时,优先选择transform,尽量不要使用height,width,margin和padding。
cookie:
cookie能存储的数据容量有限,根据浏览器类型不同而不同,IE6大约只能存储2K。
localStorage:
localStorage是Web Storage互联网存储规范中的一部分,现在在Firefox 3.5、Safari 4和IE8中得到支持。
缺点:低版本浏览器不支持。
sessionStorage:
同一个窗口(或者Tab)页面刷新或者跳转,都能获取到本地存储的数据,当新开窗口或者页面时,原来的数据就失效了。
缺点:IE不支持、不能实现数据的持久保存。
globalStorage:
使用于Firefox2+的火狐浏览器,类似于IE的userData。
缺点:IE不支持。
userData:
IE浏览器可以使用userData来存储数据,容量可达到640K,这种方案是很可靠的,不需要安装额外的插件。
缺点:它仅在IE下有效。
Google Gear:
Google开发出的一种本地存储技术。
缺点:需要安装Gear组件。
Flash ShareObject:
这种方式能能解决上面提到的cookie存储的两个弊端,而且能够跨浏览器,应该说是目前最好的本地存储方案。不过,需要在页面中插入一个Flash,当浏览器没有安装Flash控件时就不能用了。所幸的是,没有安装Flash的用户极少。
缺点:需要安装Flash插件。
不同浏览器标签默认的外边距和内边距不同
问题状况:随便写几个标签,在不加样式控制的情况下,不同浏览器的margin和padding的差异较大。
解决方法:在css里使用:*{margin:0px; padding:0px}。
块属性标签float后,又有横行的margin情况下,在IE6显示margin比设置的大。
问题状况:后面的块属性标签被顶到下一行。
解决方法:在float的标签样式中加入:display:inline;将其转化为行内属性。
设置较小高度标签(一般小于10px),在IE6、IE7,遨游中高度超出自己设置的高度。
问题状况:IE6、7和遨游里这个表情的高度不熟控制,超出自己设置的高度。
解决方法:给超出高度的标签设置overflow:hidden;或者设置行高line-height小于你设置的高度。
行内属性标签,设置display:block后采用float布局,又有横行的margin的情况,IE6间距bug。
问题状况:IE6里间距比超过设置的间距。
解决方法:在display:block;后面加入display:inline;display:table;
图片默认有间距
问题状况:几个img标签放在一起的时候,有些浏览器会有默认的间距,加了问题一中提到的通配符也不起作用。
解决方法:使用float为img布局。
标签最低高度设置min-height步兼容。
问题状况:因为min-height本身就是一个不兼容的css属性,所以设置min-height时不能很好的被给浏览器兼容。
解决方法:如果我们要设置一个标签的最小高度为200px,需要进行的设置为:{min-height:200px; height:auto; !important; height:200px; overflow:visible;}。
透明度的兼容css设置。
IE:filter:alpha(opacity = 10);
FF:不透明度:0.6;
FF:-moz-opacity:0.10;
最好两个都写,并将透明度属性放在下面
最小高度最小高度的实现(兼容IE6,IE7,FF)
#mrjin {
background:#ccc;
min-height:100px;
height:auto !important;
height:100px;
overflow:visible;
}
.IE6下在使用margin:0 auto;无法使其居中
解决办法 :为其父容器设置text-align:center;
被点击过后的超链接不再具有hover和active属性
解决办法:按lvha的顺序书写css样
“:link”: a标签还未被访问的状态;
“:visited”: a标签已被访问过的状态;
“:hover”: 鼠标悬停在a标签上的状态;
“:active”: a标签被鼠标按着时的状态;
IE6下无法设置1px的行高,原因是由其默认行高引起的
解决办法:为期设置overflow:hidden;或者line-height:1px;
第一种方法(知道元素的宽和高)
div.box{
weight:200px;
height:400px;
position:absolute;
left:50%;
top:50%;
margin-left:-100px;
margin-top:-200px;
}
第二种方法(不知道元素的宽和高)
div.box{
weight:200px;
height:400px;
position:absolute;
left:50%;
top:50%;
transform:translate(-50%,-50%);
}
第三种方法(不知道元素的宽和高)
.main{
width: 400px;
height: 400px;
background-color: #aaa;
display: table;/*父元素设置表格属性*/
text-align: center;
}
.main span{
display: table-cell;/*img设置成表格元素属性*/
vertical-align: middle;/*两个display设置后这个属性就起作用*/
}
第四种方法(flex布局)
父级元素:
{
display:flex;
flex-direction:row;
justify-content:center;
align-items:center;
}
子级元素:{flex:1}
响应式布局:意思就是在实现不同屏幕分辨率的终端上浏览网页的不同展示方式。通过响应式设计能使网站在手机和平板电脑上有更好的浏览阅读体验。
一、响应式布局
1、Meta标签定义
使用 viewport meta 标签在手机浏览器上控制布局
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1">
2、使用Media Queries适配对应样式
设备类型(media type):
all所有设备;
screen 电脑显示器;
print打印用纸或打印预览视图;
handheld便携设备;
tv电视机类型的设备;
speech语意和音频盒成器;
braille盲人用点字法触觉回馈设备;
embossed盲文打印机;
projection各种投影设备;
tty使用固定密度字母栅格的媒介,比如电传打字机和终端。
设备特性(media feature):
width浏览器宽度;
height浏览器高度;
device-width设备屏幕分辨率的宽度值;
device-height设备屏幕分辨率的高度值;
orientation浏览器窗口的方向纵向还是横向,当窗口的高度值大于等于宽度时该特性值为portrait,否则为landscape;
aspect-ratio比例值,浏览器的纵横比;
device-aspect-ratio比例值,屏幕的纵横比。
3、表格(table)的响应式处理
(1)、隐藏不重要数据列
@media only screen and (max-width: 800px) {
table td:nth-child(2),
table th:nth-child(2) {display: none;}
}
@media only screen and (max-width: 640px) {
table td:nth-child(4),
table th:nth-child(4),
table td:nth-child(7),
table th:nth-child(7),
table td:nth-child(8),
th:nth-child(8){display: none;}
}
(2)、多列横向变2列纵向
实现方法:定位隐藏,变块元素,并绑定对应列名,然后用伪元素的content:attr(data-th)实现:
(3)、固定首列,剩余列横向滚动
thead {float:left;} tbody {display:block;width:auto;overflow-x:auto;}
二、响应式内容
1、响应式图片
带宽是手机终端的硬伤,如果我们只是页面布局做了响应式处理,在我们用手机访问时,请求的图片还是PC上的大图;文件体积大,消耗流量多,请求延时长,因此导致的问题也是不可估量的。那么我们就得把图片也处理成响应式的根据终端类型尺寸分辨率来适配出合理的图形。
处理原理:浏览器获取用户终端的屏幕尺寸、分辨率逻辑处理后输出适应的图片,如屏幕分辨率320*480,那么我们匹配给它的是宽度应小于320px的图片。如果终端屏幕的DPI(device pixels)DPI详解值很高,也就是高清屏,那么我们就得输出2倍分辨率的图形(宽:640px);以保证在高清屏下图形的清晰度。各种移动终端的屏幕参数可通过http://screensiz.es/phone查询。
2、高分辨率(DPI)下的响应式处理
3、高分辨率下的1px border
为什么会出现浮动?
浮动元素碰到包含它的边框或者浮动元素的边框停留。由于浮动元素不在文档流中,所以文档流的块框表现得就像浮动框不存在一样、浮动元素会漂浮在文档流的块框 上。
浮动带来的问题:
清除浮动的方式:
TCP协议对应于传输层,而Http协议对应于应用层,从本质上讲,二者没有可比性,Http协议是建立在TCP协议之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过tcp建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。所以Http连接是一种短连接,是一种无状态的连接。
所谓的无状态,就是指浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接。如果是一个连接的的话,服务器进程中就能保持住这个连接并并且在内存中记住一些信息状态。而每次请求结束后,连接就关闭,相关的内容就释放了,所以记不住任何状态,成为无状态连接。
1、TCP连接
手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。
建立起一个TCP连接需要经过“三次握手”:
握 手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连 接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写 了,就是服务器和客户端交互,最终确定断开)
2、HTTP连接
HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。
HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
TCP是传输层协议,定义数据传输和连接方式的规范
HTTP是应用层协议,定义传输数据的内容的规范
HTTP协议基于TCP协议,所以支持HTTP也就一定支持TCP
DNS缓存:短时间内多次访问某个网站,在限定时间内,不用多次访问DNS服务器。
CDN缓存:内容分发网络(人们可以在就近的代售点取火车票了,不用非得到火车站去排队)
浏览器缓存:浏览器在用户磁盘上,对最新请求过的文档进行了存储。
服务器缓存:将需要频繁访问的Web页面和对象保存在离用户更近的系统中,当再次访问这些对象的时候加快了速度。
文件合并(目的是减少http请求):使用css sprites合并图片,一个网站经常使用小图标和小图片进行美化,但是很遗憾这些小图片占用了大量的HTTP请求,因此可以采用sprites的方式把所有的图片合并成一张图片 ,可以通过相关工具在线合并,也可以在ps中合并。
使用CDN(内容分发网络)加速,降低通信距离。
缓存的使用,添加Expire/Cache-Control头。
启用Gzip压缩文件。
将css放在页面最上面。
将script放在页面最下面。
避免在css中使用表达式。
将css, js都放在外部文件中。
减少DNS查询。
文件压缩:最小化css, js,减小文件体积。
避免重定向。
移除重复脚本。
配置实体标签ETag。
使用AJAX缓存,让网站内容分批加载,局部更新。
网页标准和标准制定机构都是为了能让web发展的更健康,开发者遵循统一的标准,降低开发难度,开发成本,SEO也会更好做,也不会因为滥用代码导致各种bug、安全问题,最终提高网站易用性。
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
data-为H5新增的为前端开发者提供自定义的属性,
这些属性集可以通过对象的 dataset 属性获取,
不支持该属性的浏览器可以通过 getAttribute 方法获取 :
需要注意的是:data-之后的以连字符分割的多个单词组成的属性,获取的时候使用驼峰风格。 所有主流浏览器都支持 data-* 属性。
即:当没有合适的属性和元素时,自定义的 data 属性是能够存储页面或 App 的私有的自定义数据。
为了兼容所有的浏览器,使用缩放方式使字体变小
p{font-size:10px;-webkit-transform:scale(0.8);}
触发时机
回流这一阶段主要是计算节点的位置和几何信息,那么当页面布局和几何信息发生变化的时候,就需要回流,如下面情况:
1.添加或删除可见的DOM元素
2.元素的位置发生变化
3.元素的尺寸发生变化(包括外边距、内边框、边框大小、高度和宽度等)
4.内容发生变化,比如文本变化或图片被另一个不同尺寸的图片所替代
5.页面一开始渲染的时候(这避免不了)
6.浏览器的窗口尺寸变化(因为回流是根据视口的大小来计算元素的位置和大小的)
主要区别(实现方式):Less在JS上运行,Sass在Ruby上使用。
Less基于JavaScript,通过npm安装,在客户端处理 ;Sass基于Ruby,需要安装Ruby,在服务器处理。
为了使用Less,我们可以将适用的JavaScript文件上传到服务器或通过脱机编译器编译CSS表。
编写变量的方式不同。
Sass使用$,而Less使用@。
在Less中,仅允许循环数值。
在Sass中,我们可以遍历任何类型的数据;但在Less中,我们只能使用递归函数循环数值。
Sass有Compass,Less有Preboot
Sass和Less有可用于集成mixins的扩展(在整个站点中存储和共享CSS声明的能力)。
Sass有适用于mixins的Compass,其中包括所有可用的选项以及未来支持的更新。
1,用html 标签设置HTTP头信息
no-cache: 强制缓存从服务器上获取新的页面
no-store: 在任何环境下缓存不保存任何页面
2,在需要打开的url后面增加一个随机参数:
增加参数前: url = test/test.jsp
增加参数后:url = test/test.jsp?ranparam = random()
说明: 因为每次请求的url后面的参数不一样,相当于请求的是不同的页面,用这样的方法来曲线救国,清除缓存
虚拟dom这个概念大家都不陌生,从react到vue,虚拟dom为这两个框架都带来了跨平台的能力
实际上他只是真实dom的一层抽象,以js对象为基础的树,用对象的属性来描述节点,最终可以通过一系列的操作使这颗树映射到真实环境上
在js对象中,虚拟dom表现为一个onject对象,并且最少包含了签名,属性和子元素着三个属性,不同的框架对着三个属性可能会有差别
虚拟dom的好处:
相同点
伪类和伪元素都不出现在源文件和文档树中。也就是说在html源文件中是看不到伪类和伪元素的。
区别
伪类其实就是基于普通DOM元素而产生的不同状态,他是DOM元素的某一特征。伪元素能够创建在DOM树中不存在的抽象对象,而且这些抽象对象是能够访问到的。
伪类用于选择DOM树之外的信息,或是不能用简单选择器进行表示的信息。前者包含那些匹配指定状态的元素,比如:visited,:active;后者包含那些满足一定逻辑条件的DOM树中的元素,比如:first-child,:first-of-type,:target。
伪元素为DOM树没有定义的虚拟元素。不同于其他选择器,它不以元素为最小选择单元,它选择的是元素指定内容。比如::before表示选择元素内容的之前内容,也就是"";::selection表示选择元素被选中的内容。
1、GET方法
发送一个请求来取得服务器上的某一资源
2、POST方法
向URL指定的资源提交数据或附加新的数据
3、PUT方法
跟POST方法很像,也是想服务器提交数据。但是,它们之间有不同。PUT指定了资源在服务器上的位置,而POST没有
4、HEAD方法
只请求页面的首部
5、DELETE方法
删除服务器上的某资源
6、OPTIONS方法
它用于获取当前URL所支持的方法。如果请求成功,会有一个Allow的头包含类似“GET,POST”这样的信息
7、TRACE方法
TRACE方法被用于激发一个远程的,应用层的请求消息回路
8、CONNECT方法
把请求连接转换到透明的TCP/IP通道
其中alt属性是指图片的替换文本,主要有两个作用:
①当根据路径找不到该图片时,作为替换文本出现,不同的浏览器显示形式不一样。
②通过alt 可以让搜索引擎知道该图片的内容是什么,因为搜索引擎无法根据图片识别当前图片显示的内容。
其中的title属性的作用为:
title属性的作用是指当鼠标放在图片上的时候会出现对图片的描述信息。
content方面
Server方面
Cookie方面
css方面
Javascript方面
图片方面
语义化是指用合理HTML标记以及其特有的属性去格式化文档内容
通俗地讲,语义化就是对数据和信息进行处理,使得机器可以理解.
语义化的(X)HTML文档有助于提升你的网站对访客的易用性,比如使用PDA、文字浏览器以及残障人士将从中受益。对于搜索引擎或者爬虫软件来说,则有助于它们建立索引,并可能给予一个较高的权值。
事实上SEO最有效的一种办法,就是对网页的HTML结构进行重构,实质上就是语义化。
在线的情况下,浏览器发现html头部有manifest属性,它会请求manifest文件,如果是第一次访问app,那么浏览器就会根据manifest文件的内容下载相应的资源并且进行离线存储。如果已经访问过app并且资源已经离线存储了,那么浏览器就会使用离线的资源加载页面,然后浏览器会对比新的manifest文件与旧的manifest文件,如果文件没有发生改变,就不做任何操作,如果文件改变了,那么就会重新下载文件中的资源并进行离线存储。
离线的情况下,浏览器就直接使用离线存储的资源。
标签闭合、标签小写、不乱嵌套、使用外链css和js、结构行为表现的分离
相同点: 都存储在客户端
区别:
选择器
id选择器,类选择器,标签选择器,后代选择器,子选择器,相邻同胞选择器,群组选择器,伪类选择器,伪元素选择器,属性选择器,
可继承的属性:font-size, font-family, color
不可继承的样式:border, padding, margin, width, height
优先级(就近原则):!important > [ id > class > tag ]
!important 比内联优先级高
元素选择符: 1
class选择符: 10
id选择符:100
元素标签:1000
该布局模型的目的是提供一种更加高效的方式来对容器中的条目进行布局、对齐和分配空间。在传统的布局方式中,block 布局是把块在垂直方向从上到下依次排列的;而 inline 布局则是在水平方向来排列。弹性盒布局并没有这样内在的方向限制,可以由开发人员自由操作。
试用场景:弹性布局适合于移动前端开发,在Android和ios上也完美支持。
首先,需要把元素的宽度、高度设为0。然后设置边框样式。
width: 0;
height: 0;
border-top: 40px solid transparent;
border-left: 40px solid transparent;
border-right: 40px solid transparent;
border-bottom: 40px solid #ff0000;
不同浏览器标签默认的外边距和内边距不同
问题状况:随便写几个标签,在不加样式控制的情况下,不同浏览器的margin和padding的差异较大。
解决方法:在css里使用:*{margin:0px; padding:0px}。
块属性标签float后,又有横行的margin情况下,在IE6显示margin比设置的大。
问题状况:后面的块属性标签被顶到下一行。
解决方法:在float的标签样式中加入:display:inline;将其转化为行内属性。
设置较小高度标签(一般小于10px),在IE6、IE7,遨游中高度超出自己设置的高度。
问题状况:IE6、7和遨游里这个表情的高度不熟控制,超出自己设置的高度。
解决方法:给超出高度的标签设置overflow:hidden;或者设置行高line-height小于你设置的高度。
行内属性标签,设置display:block后采用float布局,又有横行的margin的情况,IE6间距bug。
问题状况:IE6里间距比超过设置的间距。
解决方法:在display:block;后面加入display:inline;display:table;
图片默认有间距
问题状况:几个img标签放在一起的时候,有些浏览器会有默认的间距,加了问题一中提到的通配符也不起作用。
解决方法:使用float为img布局。
标签最低高度设置min-height步兼容。
问题状况:因为min-height本身就是一个不兼容的css属性,所以设置min-height时不能很好的被给浏览器兼容。
解决方法:如果我们要设置一个标签的最小高度为200px,需要进行的设置为:{min-height:200px; height:auto; !important; height:200px; overflow:visible;}。
透明度的兼容css设置。
IE:filter:alpha(opacity = 10);
FF:不透明度:0.6;
FF:-moz-opacity:0.10;
最好两个都写,并将透明度属性放在下面
最小高度最小高度的实现(兼容IE6,IE7,FF)
#mrjin {
background:#ccc;
min-height:100px;
height:auto !important;
height:100px;
overflow:visible;
}
.IE6下在使用margin:0 auto;无法使其居中
解决办法 :为其父容器设置text-align:center;
被点击过后的超链接不再具有hover和active属性
解决办法:按lvha的顺序书写css样
“:link”: a标签还未被访问的状态;
“:visited”: a标签已被访问过的状态;
“:hover”: 鼠标悬停在a标签上的状态;
“:active”: a标签被鼠标按着时的状态;
IE6下无法设置1px的行高,原因是由其默认行高引起的
解决办法:为期设置overflow:hidden;或者line-height:1px;
因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。
包含块(Containing Block)是视觉格式化模型的一个重要概念,它与框模型类似,也可以理解为一个矩形,而这个矩形的作用是为它里面包含的元素提供一个参考,元素的尺寸和位置的计算往往是由该元素所在的包含块决定的。简单地说就是定位参考或者坐标参考系。元素一旦定义了定位显示,无论是相对,绝对或者固定,都具有包含块的性质,它所包含的定位元素都将以包含块为坐标系进行定位和调整。
一个元素的containing block (包含块),由position属性确定:
static:默认,relative,简单说就是他的父元素的内容框,即去掉padding部分。
absolute:向上找最近的absolute/relative定位的元素。
fixed:它的contacining block一律为根元素(html/body),根元素也是initial containing block.
当一个元素的visibility属性被设置成collapse值后,对于一般的元素,它的表现跟hidden是一样的。
display:none 和 visibility:hidden 都可以用来隐藏 HTML 元素,但它们的实现方式不同,具有不同的效果。
display:none
这个属性会让元素从文档流中完全消失,即该元素原来所占的空间也会被释放。这意味着,如果你使用 display:none 来隐藏一个元素,那么它将不再占用任何空间,其他元素会自动移动来填补它的位置。这种方式可以完全隐藏元素,但是会影响页面布局。
visibility:hidden
这个属性会让元素隐藏,但元素的占位空间不会被释放,即元素原来所占的空间仍然被保留。这意味着,如果你使用 visibility:hidden 来隐藏一个元素,那么它将不再显示,但是其他元素不会自动移动来填补它的位置,因为该元素的占位空间还存在。这种方式不会影响页面布局,但是可能会导致页面出现空白区域。
总结 :如果你需要完全隐藏元素并影响页面布局,可以使用 display:none。如果你只需要隐藏元素但不影响页面布局,可以使用 visibility:hidden。
display属性规定元素应该生成的框的类型;position属性规定元素的定位类型;float属性是一种布局方式,定义元素在哪个方向浮动。
类似于优先级机制:position:absolute/fixed优先级最高,有他们在时,float不起作用,display值需要调整。float 或者absolute定位的元素,只能是块元素或表格。
BFC指的是块级格式上下文,一个元素形成了BFC之后,那么它内部元素产生的布局不会影响到外部元素,外部元素也不会影响到BFC中的内部元素。一个BFC就像是一个隔离区域,喝其他区域互不影响。
一般来说根元素是一个BFC区域,浮动喝绝对定位的元素也会形成BFC,display属性的值为inline-block、flex这些属性时也会创建BFC。还有就是元素的overflow的值不为visible时都会创建BFC。
为什么会出现浮动?
浮动元素碰到包含它的边框或者浮动元素的边框停留。由于浮动元素不在文档流中,所以文档流的块框表现得就像浮动框不存在一样、浮动元素会漂浮在文档流的块框 上。
浮动带来的问题:
清除浮动的方式:
在重合元素外包裹一层容器,并触发该容器生成一个BFC。
<div class="aside"></div>
<div class="text">
<div class="main"></div>
</div>
<!--下面是css代码-->
.aside {
margin-bottom: 100px;
width: 100px;
height: 150px;
background: #f66;
}
.main {
margin-top: 100px;
height: 200px;
background: #fcc;
}
.text{
/*盒子main的外面包一个div,通过改变此div的属性使两个盒子分属于两个不同的BFC,以此来阻止margin重叠*/
overflow: hidden; //此时已经触发了BFC属性。
}
设置元素为浮动后,会自动变成 display:block
概念:一个网站适配所有终端,实现不同屏幕分辨率下的终端网页的不同布局,使用媒体查询针对不同设备宽度进行布局设置。
优点:一站适配所有终端,减少工作量,缩短开发周期。对搜索引擎友好,在每个设备中都能得到较好的展示。
缺点:对老版本浏览器兼容性不好,兼容各个设备工作量大。效率较低,加载更多的样式文件和脚本文件。设计比较难以精确,是一种折中性的设计方案,维护困难。
通过媒体查询检测不同设备的尺寸,通常在页面头部添加meta标签声明viewport
或者是在css里面 : @media only screen and (max-device-width:480px) {/css样式/}
提升性能
Css优化主要是4个方面