在我们HTML页面中,每一个元素都可以被看作一个盒子,而这个盒子由:内容区(content)、填充区(padding)、边框区(border)、外边界区(margin)四部分组成。
标准模式下: 一个块的总宽度(页面中占的宽度)= width + margin(左右) + padding(左右) + border(左右)
怪异模式下: 一个块的总宽度= width + margin(左右)(即width已经包含了padding和border值)(IE浏览器)
box-sizing:content-box; 将采用标准模式的盒子模型标准
box-sizing:border-box; 将采用怪异模式的盒子模型标准
box-sizing:inherit; 规定应从父元素继承 box-sizing 属性的值。
怎么获取和设置box的内容宽高
IE: dom.currentStyle.width/height
非IE: window.getComputedStyle(dom).width/height
var obj = document.getElementById("box");
var style = null;
if (window.getComputedStyle) {
style = window.getComputedStyle(obj, null); // 非IE
} else {
style = obj.currentStyle; // IE
}
alert("width=" + style.width + "\nheight=" + style.height);
当我们浮动给父元素中的子元素加浮动时,父元素高度会坍塌,给父盒子加oxerflow:hidden;就不会坍塌,我一开不理解,然后查询资料才知道这是一种BFC布局。
BFC就是“块级格式化上下文
”的意思,它可以解决外边距折叠的问题。
- overflow: auto/ hidden;
- position: absolute/ fixed;
- float: left/ right;
- display: inline-block/ table-cell/ table-caption/ flex/ inline-flex
利用BFC的这一个原理就可以实现两栏布局,左边定宽,右边自适应。不会相互影响,哪怕高度不相等。
给盒子加overflow:hidden;使其变成BFC,消除外部盒子因浮动对他的影响
父元素加overflow:hidden/auto,变BFC
同级元素在垂直方向上外边距会出现重叠情况,最后外边距的大小取两者绝对值大的那个
可通过添加空元素或伪类元素,设置overflow:hidden;解决margin重叠问题
清除浮动主要是为了解决,父元素因为子级元素浮动引起的内部高度为0的问题
clear:both;
.clearfix:after{
/*伪元素是行内元素 正常浏览器清除浮动方法*/
content: "";
display: block;
height: 0;
clear:both;
visibility: hidden;
}
.clearfix{
*zoom: 1;/*ie6清除浮动的方式 *号只有IE6-IE7执行,其他浏览器不执行*/
}
"father clearfix">
"big">big
"small">small
"footer">
<style>
.father{
border: 1px solid black;
*zoom: 1;
}
.clearfix:after,.clearfix:before{
content: "";
display: block;
clear: both;
}
.big ,.small{
width: 200px;
height: 200px;
float: left;
}
.big{
background-color: red;
}
.small{
background-color: blue;
}
</style>
<div class="father clearfix">
<div class="big">big</div>
<div class="small">small</div>
</div>
<div class="footer"></div>
</div>
#box{
width: 400px;
height: 400px;
background: red;
position: relative;
}
#x{
width: 200px;
height: 200px;
background: yellow;
position: absolute;
left: 50%;
top: 50%;
transform:translate(-50%,-50%)
}
#box{
width: 400px;
height: 400px;
background: red;
display: flex;
justify-content: center;
align-items: center;
}
#box{
width: 400px;
height: 400px;
background: red;
position: relative;
}
#x{
width: 200px;
height: 200px;
background: yellow;
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
margin: auto;
}
左边左浮动,右边加oveflow:hidden;变成BFC清除左侧浮动元素的影响
圣杯布局和双飞翼布局是前端工程师需要日常掌握的重要布局方式,两者的功能相同,都是为了实现一个两侧宽度固定,中间宽度自适应的三栏布局。(中间先加载渲染)
<div id="header">div>
<div id="container">
<div id="center" class="column">div>
<div id="left" class="column">div>
<div id="right" class="column">div>
div>
<div id="footer">div>
首先定义出整个布局的DOM结构,主体部分是由container包裹的center,left,right三列,其中center定义在最前面。
body {
min-width: 550px;
}
#container {
padding-left: 200px;
padding-right: 150px;
}
#container .column {
float: left;
}
#center {
width: 100%;
}
#left {
width: 200px;
margin-left: -100%;
position: relative;
right: 200px;
}
#right {
width: 150px;
margin-right: -150px;
}
#footer {
clear: both;
}
<body>
<div id="header">div>
<div id="container" class="column">
<div id="center">div>
div>
<div id="left" class="column">div>
<div id="right" class="column">div>
<div id="footer">div>
<body>
双飞翼布局的DOM结构与圣杯布局的区别是用container仅包裹住center,另外将.column类从center移至container上。
body {
min-width: 500px;
}
#container {
width: 100%;
}
.column {
float: left;
}
#center {
margin-left: 200px;
margin-right: 150px;
}
#left {
width: 200px;
margin-left: -100%;
}
#right {
width: 150px;
margin-left: -150px;
}
#footer {
clear: both;
}
<div id="container">
<div id="center">div>
<div id="left">div>
<div id="right">div>
div>
#container {
display: flex;
}
#center {
flex: 1;
}
#left {
flex: 0 0 200px;
order: -1;
}
#right {
flex: 0 0 150px;
}
Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。
//任何一个容器都可以指定为 Flex 布局。
.box{
display: flex;
}
//行内元素也可以使用 Flex 布局。
.box{
display: inline-flex;
}
//Webkit 内核的浏览器,必须加上-webkit前缀。
.box{
display: -webkit-flex; /* Safari */
display: flex;
}
常用的属性:
flex-direction 主轴方向
flex-wrap 是否换行
flex-flow flex-direction与flex-wrap简写形式 默认为row nowrap
justify-content 水平对齐方式
align-items 垂直对齐方式
align-content 多行垂直对齐方式 只有一行不生效
弹性布局使用范围很广,我一般用于移动端,因为PC端需要兼容,我用于九宫格、底部tabbar、头部标题和返回键、商品列表等。
CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,比如div默认display属性值为“block”,成为“块级”元素;span默认display属性值为“inline”,是“行内”元素。
一般来说是针对不同的浏览器写不同的CSS,就是 CSS Hack。
CSS Hack常见的有三种形式:
属性Hack、选择符Hack、条件注释Hack, Hack主要针对IE浏览器
1、条件Hack
<!--[if IE]>
<p>你在非IE中将看不到我的身影</p>
<![endif]-->
<!--[if IE]>
<style>
.test{
color:red;}
</style>
<![endif]-->
<!--[if lt IE 9]>
<script src="//cdn.bootcss.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="//cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
条件注释只有在IE浏览器下才能执行,这个代码在非IE浏览下被当做注释视而不见。可以通过IE条件注释载入不同的CSS、JS、HTML和服务器代码等。
2、属性Hack
.test{ color:#090\09; /* For IE8+、FF */
color:#f00; / * For IE7 * /
_color:#ff0; / For IE6 */ }
属性级Hack:
比如IE6能识别下划线“”和星号“”,
IE7能识别星号“”,但不能识别下划线” ”,而firefox两个都不能认识。
background-color:red9; 9所有的ie浏览器可识别;
background-color:yellow0; 0 是留给ie8的,
3、选择符Hack
- html .test{color:#090;} /* For IE6 and earlier */
+html .test{color:#ff0;} / For IE7 /
.test{color:#f00;} / For IE8+ and not IE */
src是指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;主要用于img、script等。
href 是指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,用于超链接。
- link属于html标签。@import在css中使用表示导入外部样式表;
- 页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;
- import只在IE5以上才能识别,而link是HTML标签,无兼容问题;
- link方式的样式的权重 高于@import的权重;
- link 支持使用javascript改变样式 (document.styleSheets),后者不可
<head>
<link rel="stylesheet" href="./a.css">
<style>
/* @import 在css环境中 导入外部css */
@import url('./b.css');
.box{
width: 100px;
height: 100px;
background: green;
}
style>
head>
语义化标签:header、footer、section、nav、aside、article
增强型表单:input 的多个 type
新增表单属性:placehoder、min 和 max
音频视频:audio、video
canvas 画布
地理定位
拖拽
本地存储:
localStorage 没有时间限制的数据存储;
sessionStorage, session 的数据存储,当用户关闭浏览器窗口后,数据会被删除
选择器
背景和边框
文本效果
2D/3D 转换 — 变形(transform)、过渡(transtion)、动画(animation)
详细介绍