HTML/CSS简记(一)

53 阅读4分钟

行内/块级元素

行内元素:a或span等,padding/margin只能改宽度,不能改高度。

块级元素:div或p等,可以内嵌块级或行内元素。

行内块级元素:例如input等,默认宽度为内容宽度。

三栏布局

1.flex布局:左右固定宽度,中间flex:1。

2.grid布局:grid-template-columns:200px 1fr 200px;grid-template-row:1fr

3.左右使用绝对布局并且left/right为0,中间使用margin

4.float设置左右浮动,中间

4.table布局

.container{
display:table;
}
.left,.content.right{
display::table-cell;
}

圣杯布局

圣杯布局是特殊的三栏布局,即结构为先有main再有其它.

1.flex布局:在三栏布局基础上增加order属性即可,order可以改变视觉上的位置.

2.grid布局:同样在前面基础上增加grid-column属性即可,可以直接改变视觉上的列数

3.使用float浮动实现,首先box元素内左右padding设为200px,并将main,left,right都设为float:left,然后main设置为width:100%,最关键是使用margin-left和left将left和right元素精确定位到目标位置.

.box{    
padding:0 200px;
}
.main,.left,.right{    
float: left;    
position: relative;
}
.main{    
width: 100%;    
background-color: cadetblue;
}
.left{    
width: 200px;    
margin-left: -100%;    
left: -200px;    
background-color: aqua;
}
.right{    
width: 200px;    
margin-left: -200px;    
right: -200px;    
background-color: blueviolet;
}

回流重绘

dom元素的变动引起了元素的宽高位置等属性的变化后,导致浏览器重新构建渲染树,称为重排。一个元素发生外观上比如颜色背景的变化就会重绘。重排一定会导致重绘,尽量不出现重排的方式如下:

1.transform进行形状位置变化。

2.先将多次变更属性的元素设置为display:none,操作完再显示。

3.尽可能一次性操作完成,而不是每次去操作一个特定元素。

4.通过将复杂元素以absolute脱离文档流进行单独操作,然后再放回去。

5.避免多次读取属性。

URL输入到呈现

1.首先浏览器检查是否存在缓存。

2.无缓存则根据三次握手请求服务器。

3.下载js文件和css文件,构建渲染树.

浏览器进程

每一个页面都是一个渲染进程(gui线程,定时器线程,事件侦听线程,js引擎线程,网络请求线程),网络进程,gpu进程,浏览器进程。

innerHTML和innerText,outerText的区别

outerText和outerHTML设置时会将标签也一起替换掉。textContent设置/返回指定节点文本值,与innerText的主要区别是,innerText只能对可视的文本起作用。nodeValue适用于文本节点和属性节点,即对于注释的文本也适用。

href和src的区别

src(可加载的替换)和alt(不可加载的替换)都是对链接内容的替换,而href主要是链接的跳转。

defer和async的区别

1.正常script标签,下载执行都阻碍html解析。

2.defer script标签,下载不阻碍,但执行阻碍。

3.async script标签,下载执行都不阻碍。

HTML中childNodes和children的区别

childNodes返回NodeList,而children返回HTMLCollection,Node类型(NodeList)包含了文本,注释,标签等类型节点,而element元素(HTMLCollection)仅仅包含了标签类型节点。

水平居中,垂直居中的方法

行内元素:text-align为center,line-height设置行高为height。

块级元素:

1.flex布局设置justify-content及align-item为center.

2.abosolute绝对布局left和top为50%再分别减去自身宽高的一半。(使用calc函数或tranasform)

3.相对定位的margin为auto。

使元素消失的方法

1.display:none使得元素消失,空间,事件都不行。

2.visibility:hidden,元素仍然存在,只是隐藏元素,不能触发事件,占据空间。

3.opacity:0,元素透明度为0,区别是能触发事件。

4.position:absolute,top:-1000px,left:-1000px;

link方式与@import引入CSS的区别

link是载入时同时加载,@import在页面完全加载后载入,只能用于CSS,link方式权重大于@import。

盒子模型

盒子模型的box-sizing有两个值:border-box和content-box,主要区别是宽高的计算范围。

CSS渲染优先级

内联>ID>类>标签,后来高于先来,!important在同组中权重最高。

移动端适配

<meta name="viewport" content="width=device-width, initial-scale=1.0">//适配基础

1.媒体查询@media 

 2.flex/grid布局 

 3.百分比 

 4.vw/vh适配 

 5.rem方案(屏幕分成10份,每份为1rem,使用js实现)

flex布局

1.flex-flow为flex-direction flex-wrap,flex为flex-grow,flex-shrink,flex-basis 

2.flex-basis为auto时,优先使用元素指定的宽度/高度,否则使用max-content内容的宽度/高度 

3.flex:initial为flex: 0 1 auto ,flex:auto 为1 1 auto,flex:none为flex: 0 0 auto,而flex:1为 1 1 0。 

4.align-items为交叉轴的对齐,有flex-start,flex-end,stretch(默认),center,而justify-content为主轴的对齐,除了和align-item同样的,还有space-around(元素左右间隔相同),space-between(元素间 间隔相同),剩余空间的分配这两个属性优先级低于flex-grow和flex-shrink。 

5.align-self相对于align-items为单个flex项目设置对齐属性,align-content也可用于交叉轴的对齐,同样有space-around和space-between等值。 

6.direction设置为rtl可以强行让元素从右到左对齐,order可以用于指定显示的顺序。

grid布局

.wrapper {
  display: grid;
  grid-template-columns: 200px 200px 200px;//grid使用举例,或1fr 1fr 1fr或repeat(3, 1fr),minmax(100px, 1fr) 表示最小100px,最大1fr。
}

定义网格线开始结束:

.item {
  grid-column-start: 1;
  grid-column-end: 3; /* 占据从第1条列线到第3条列线之间的区域(即第1列和第2列) */
  grid-row-start: 1;
  grid-row-end: 2; /* 占据第1条行线到第2条行线之间的区域(即第1行) */
}
上面等价于
.item{
    grid-column:1/3;
    grid-row:1/2;
    grid-column:1/span 2;
}

grid-template-areas的使用:

.grid-container{
    grid-template-areas:
    "header header"
    "sidebar main"
    "footer footer";
    gap:10px;
}
.header{
    grid-area:header;
    background:lightblue;
}