参考:https://blog.csdn.net/zhaolandelong/article/details/88544298
aside:表示article元素内容之外,与article元素内容相关的辅助信息。(当前文章的其他引用, 备注,侧边栏,广告等有别于主要内容的部分)
figure:代表一个块级图像,还可以包含说明。figure添加标题时,与figcaption元素结合使用。
dialog:表示几个人直接的对话。与dt和dd元素结合使用,dt表示讲话者,dd表示讲话内容
thead:表格表头
tfoot:表格页脚
行内元素不可以。
HTML元素分为行内、块状、行内块元素三种。
1、三者是可以通过display属性任意转换的
inline 行内元素 block 块状元素 inline-block行内块元素
行内转块
块转行
行转行内块
block:独占一行,可以设置宽高
inline: 宽高由内容撑开
inline-block:可以设置宽高
行内元素特征: (span、b、i)
1、设置宽高无效
2、设置margin的上下无效,左右有效,设置padding上下左右都有效(并且会撑大空间)
3、不会自动换行
附: 55的9次方
55
9
块级元素特征:(p nav aside header footer section article ul-li address)
1、可以设置宽高
2、设置margin、padding的上下左右都有效
3、独占一行
4、多个块状元素一起写,默认排列从上至下
行内块元素
1、能设置宽高
2、不会自动换行
3、多个行内块一起写,默认从左至右排列
(在html5中,可以自定义标签,在任意标签加上display属性就好。)
div {
-ms-transform: rotate(0);
-webkit-transform: rotate(0);
-moz-transform: rotate(0);
-o-transform: rotate(0);
transform: rotate(0);
}
CSS前缀补全:autoprefixer
解决IE8及更早版本不兼容问题可以在HTML页面声明 即可。
实例:margin:20px,border:10px,padding:10px;width:200px;height:50px;
标准盒模型占用宽:margin2+padding2+border2+width=202+102+102+200 = 280
标准盒模型占用高:margin2+padding2+border2+height=202+102+102+50 = 130
盒子的实际宽度大小为:padding2+border2+width = 240
实际高度:padding2+border2+height = 90
ie占用宽:margin2+width=240
ie占用高:margin2+height=90
盒子的实际宽度大小为:width = 200
实际高度:height = 50
box-sizing: content-box(标准盒模型)|border-box(怪异盒模型)|inherit(继承父元素);
content-box的宽高由content决定
border-box的宽高由content+padding+border决定
BFC(块状格式化上下文,独立的盒子,布局不受外部影响,但是如果同一个BFC中,同级块状元素的margin-top和margin-bottom会重叠)
1、兄弟div(上下margin塌陷)
2、父子div(如果父级div没有padding\border\inlinecontent, 子级div的margin会向上查找边界塌陷的div,直到找到某个标签包括border\padding\inline content的其中一个,然后按此div进行margin)
cc
解决办法: overflow:hidden; 防止溢出部分,隐藏溢出部分。
overflow:auto .制作一条滚动条,当元素溢出,用滚动条将溢出部门展示出来。
具有BFC特征的元素可以看做是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素。
只要元素满足下面的任一条件,都会触发BFC特征。
1、body根元素
2、position: fixed|absolute(绝对定位元素)
3、float(浮动元素) 除了none
4、overflow: hidden|auto|scroll (除了visible之外的值)
5、display: inline-block\ table-cells\flex (具有table-的属性)
问题:
1、解决边界塌陷问题
2、解决浮动元素导致父元素高度塌陷问题
3、解决阻止元素被浮动元素覆盖问题
元素被当成行内元素排版时,元素直接的空白符会被浏览器处理,根据white-spack的处理方式(默认是normal,合并多余空白),Html代码在回车换行时被转成一个空白符,在字体不为0的情况下,空白符占据一定宽度,所以inline-block元素之间就出现了空隙。
这些元素之间的间距会随字体的大小而变化,当行内元素font-size:16px是,间距为8px。
解决办法:1、多个inline元素写在同一行
2、将父级元素的font-size:0
3、给inline元素添加float的样式
4、设置子元素的margin为负值
5、设置父元素display:table和word-spacing:-1em
法一:笔者真的无地自容,废了九牛二虎之力写了一个
请实现三列布局,要求:背景色分别为red、green、blue;左右各定宽200px;中间随屏幕大小变化
法二:Flex布局
请实现三列布局,要求:背景色分别为red、green、blue;左右各定宽200px;中间随屏幕大小变化
法三:BFC
请实现三列布局,要求:背景色分别为red、green、blue;左右各定宽200px;中间随屏幕大小变化
法四:table\table-cell
请实现三列布局,要求:背景色分别为red、green、blue;左右各定宽200px;中间随屏幕大小变化
1、浮动会导致父元素高度塌陷
2、会覆盖其他元素
清楚浮动:
1、父元素加上overflow:hidden
2、在浮动元素的后面(同级),添加一个div,属性是clear:both
3、在父元素添加一个伪元素
.clearfix:after {
display: block;
height: 0;
visibility: hidden;
clear: both;
content: '';
}
.clearfix{ //IE6模式下
zoom:1;
}
4、在父元素添加双伪元素
.clearfix:before, .clearfix:after {
display: table;
content: '';
}
.clearfix:after {
clear: both;
}
.clearfix {
zoom: 1; //兼容IE6下
}
使用圣杯布局。
基础:
Document
写一个双飞翼布局:
Document
最简易的布局
Document
html:
aaa
bbb
bbb
bbb
ccc
ccc
法一:table、table-cell(父元素的display为table,子元素为table-cell)
法二:Flex布局(父元素设置display:flex; 子元素设置flex:1;)
法三: margin/padding互补(子元素的margin设为-999em,padding设为999em)
C
法一:flex
法二:定位(left:50%; top:50%; transform: translateX(-50%) translateY(-50%))
.container {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
.a,
.b {
position: absolute;
top: 50%;
left: 50%;
transform: translateX(-50%) translateY(-50%);
}
.a {
width: 200px;
height: 200px;
background-color: red;
}
.b {
width: 20px;
height: 20px;
font-size: 15px;
background-color: yellow;
}
.a{
width: calc(100% - 40px);
}
.container {
margin: 0 20px;
}
.a {
width: 100%;
}
.a {
width: calc(100vw - 40px);
height: calc((100vw - 40px)/2);
}
比如width:50%;之后设置该box为正方形设置height:0;padding-bottom:50%;
id、class、tag、属性(a[href=""] )派生选择器
不同级优先级:
!important>内联>id>class = 属性 = 伪类 >标签 = 伪元素 > 通配符(*)
同一级别:
优先级相同时会发生什么?
样式被覆盖
列举几条常用的CSS reset,是否了解normalize.css?
normalize.css是一个css reset的替代方案。
如何做到一个list中奇数和偶数行的背景色不一样?
ul>li:nth-child(2n+1) {
background-color: red;
}
ul>li:nth-child(2n) {
background-color: yellow;
}
如何做到一个list的第一行没有上边框?
ul>li:first-child {
border-top: none;
}
解析HTML文件,创建DOM树
解析CSS,形成CSS对象模型
将CSS与DOM合并,构建渲染树(rendering tree)
布局和绘制
从右。
因为从右向左的匹配在第一步就筛选掉了大量的不符合条件的最右节点(叶子节点);
而从左向右的匹配规则的性能都浪费在了失败的查找上面。
repaint:重绘(改变不影响元素在网页中的位置的元素样式时,根据浏览器新属性重新绘制一次。不会带来重新布局)
例如:bg-c border-color ......
reflow:重排(改变元素在网页中的布局和位置)
例如:浏览器放大缩小、DOM元素的增删改、内容变化,包括表单内的文本变化、CSS属性的计算和改变、添加或者删除样式表、伪类激活(悬停)、更改类属性
display:none; 重排 (不占空间)
visibility: hidden; 重绘 (占空间)
overflow:hidden; 重绘+重排 (占空间,超出隐藏)
css文件放前面,js文件放在html和css的后面
//使用这个
img {max-width:100%} //最大宽度显示为自身的100%
//不用这个
img {width: 100%} //宽度为外层容器的宽度 图片会被无情地拉伸
media screen and (min-width:1000px) {
body{
background:red;
}
}
(function (){
const desWid = 640
const winWid = document.documentElement.clientWidth
const oMain = document.getElementById('main')
const ratio = winWid / desWid
if(winWid > desWid) {
oMain.style.width = desWid + 'px'
oMain.style.margin = '0 auto'
return
}
oMain.style.fontSize = ratio*100 + 'px'
} ())
任意浏览器的默认字体高都是16px。
用transform:scale(0.5)
下边框有线
11
四条边都有线
用渐变写一个
缩放系数是0.0-1.0 用户缩放选项是yes|no
ios10之后不接受meta标签,监听gesturestart,阻止默认事件
document.addEventListener('gesturestart',function(e) {
e.preventDefault()
})
法一: css
body {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
法二: js
在需要禁止的dom加上这句
ontouchstart="return false;"
备注: 手机uc浏览器,meta标签的name=browsermode content= application 这样就无法调起长菜单