CSS是谁发明的?
Håkon Wium Lie
李爵士的挪威同事赖先生首先提出CSS.
CSS全称:层叠样式表
CSS 2.1 (2004~2011)是使用最广泛的版本(IE支持)
CSS3 1999年开始起草,现代化版本,分模块(IE8部分支持)
http://caniuse.com/
可以知道哪些浏览器支持哪些特性。
语法一:样式语法
选择器{
属性名:属性值;
}
注意! 注释要这样写:/*注释*/
注意事项:
1.所有符号都是英文
2.区分大小写,a和A是不同的东西。
3.没有//注释
4.不要漏分号 " ; "
5.注意单词有没有拼写错误
语法二:@语法
@charset "UTF-8";
@import url(2.css);
@media (min-width: 100px) and (max-width: 200px)
{
语法一
}
注意事项:
@charset 必须放在第一行
前两个 @ 语法必须以分号 ; 结尾
charset 是字符集的意思,但 UTF-8 是字符编码
charset指定的是文件编码
border调试法
步骤:
怀疑某个元素有问题,就给这个元素加 border。
border 没出现?说明选择器错了或者语法错了。
border 出现了?看看边界是否符合预期,bug 解决了才可以把 border 删掉。
记住 CSS 的 border 调试法 就相当于 JS 的 log 调试法。
查资料: MDN、CSS tricks
基本概念
-
文档流 文档流即文档流动的方向。
-
inline(内联)元素,方向是从左到右,直到第一行排满才会另起一行,比如span元素。
内联元素一般不能包含块级元素
-
block(块级)元素,方向是从上到下,每一个都另起一行,比如div元素。
-
inline-block 也是从左到右。与inline元素的区别是,inline元素在边界会被分离,inline-block不会,会完整的转到第二行。
其实元素不分内联和块级
因为所有元素都是可以设置成内联或块级的。比如:
span{
display:block;
}
就把span设置成块级了。
之所以说(div是块级/span是内联)是因为浏览器默认他们是(块级/内联)元素。
所有元素都是可以通过 display:block/inline/inline-block
设置相应的属性。
用浏览器查看元素是内联还是块级
-
宽度:
-
inline 元素宽度为内部 inline 元素的和,不能用 width 指定
-
block 元素默认自动计算宽度,可用 width 指定。不写宽度默认宽度是 width: auto 不是100%。永远不要写宽度是100%,容易出Bug。
-
inline-block 元素结合前两者特点,可用 width指定。
特点是:默认样式和inline一样,由内部元素数量决定宽度,但样式上和block一样可用width调节。
-
高度:
-
inline元素高度由 line-height(行高) 间接确定(大部分时候是一样的,但是如果字体不一致,就只能间接决定,会有一些误差),跟 height 无关
-
block元素高度由内部文档流元素决定,可以设 height。
block元素比如<div>
,<div>
里面不写东西,高度为0。inline元素比如<span>
就算里面不写东西也有高度,因为span的高度由行高(line-height)决定,block元素由内部文档流元素决定。
- inline-block元素跟 block 类似,可以设置 height。
overflow溢出
当内容大于容器:
当内容的宽度或高度大于容器的宽度或高度,会溢出,可用 overflow 来设置是否显示滚动条
overflow:auto; 是灵活设置,内容超出会显示滚动条,不超出则不显示。
scroll 是永远显示滚动条(很丑。。每有auto好用)
hidden 是直接隐藏溢出部分
visible 是直接显示溢出部分
overflow 可以分为 overflow-x 和 overflow-y
脱离文档流
- 哪些元素脱离文档流?
在要脱离文档流的元素里面加:
float:left; / right;
或者是
position: absolute; / fixed;
速打:pos:a +tab
- 怎么让元素不脱离文档流?
不要用上面属性就不脱离了
脱离文档流后会对高度造成影响
盒模型
CSS盒模型分两种:一种是content-box,另一种是border-box。
content-box 内容盒 - 内容就是盒子的边界
border-box 边框盒 - 边框才是盒子的边界
二者区别是:
-
content-box宽度只包含content。高也一样
-
border-box宽度只包含border、padding、content。高也一样
border-box更好用。
margin合并
HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<div class="parent">
<div class="child">第2个孩子</div>
<div class="child">第2个孩子</div>
<div class="child">第3个孩子</div>
<div class="child">第4个孩子</div>
<div class="child">第5个孩子</div>
</div>
</body>
</html>
CSS:
.parent{
margin:15px 0;
background:red;
}
.child{
border:1px solid blue;
margin:30px 0;
}
body{
border:1px solid green;
}
- 哪些情况margin会合并? parent(父)的margin会与child(子)合并
child与child之间的margin也会合并
简称:父子 margin 合并;兄弟 margin 合并
外边距(margin)合并只存在于上下边距合并,左右不存在,左右不合并。
-
如何阻止合并?
-
父子合并用 padding / border 挡住,在父元素上加padding/border-top即可阻止margin合并。
-
父子合并用 overflow: hidden 挡住 在父元素上加overflow:hidden;
overflow:hidden 速打:o:h +tab
-
父子合并用 display: flex,不知道为什么
-
兄弟合并是符合预期的
-
兄弟合并可以用 inline-block 消除
基本单位
- 长度单位 px:像素
em:相对于自身 font-size 的倍数
rem:这个单位代表根元素(通常为 元素)的 font-size 大小。 当用在根元素的 font-size 上面时 ,它代表了它的初始值。
vw:视口的初始包含块的宽度的 1%。
vh:视口的初始包含块的高度的 1%。
- 颜色
十六进制 #FF6600(淘宝色) 或者 #F60
RGBA 颜色 rgb(0,0,0) = rgb(红,绿,蓝)
或者 rgba(0,0,0,1),1为调整透明度,0是透明,1是不透明,0-1之间可调整。
hsl 颜色 hsl(360,100%,100%) 三个属性分别是:色相、饱和度、亮度
- 小技巧:速写嵌套版的标签
div>div>div>div> +tab生成四个嵌套的div
div可以替换成任何标签
margin的拓展用法
margin-top:用来设置元素的顶部外边距,也可以使用负值。这个属性对于不可替换的inline元素没有效果,比如<tt>、<span>
。
margin-top:5%/10px/-10px/1em
同理,margin-bottom:是用来设置元素的底部外边距,允许设置负数值。
margin-right/left也一样。
设置最大宽度100px:max-width=100px;
设置最小宽度100px:min-width=100px;
同理,高度也是一样的。