笔记一:HTML、CSS与前端导论

167 阅读5分钟

一、前端的关注点

产品功能、网络安全(csrf、xss)、用户体验、加载性能、无障碍性、浏览器兼容。

我的理解:核心还是一切围绕“体验”的开发技术。

二、前端的边界

服务端开发:node.js

桌面端开发:Electron…

客户端跨平台开发:React-Native、Weex、Flutter

3D渲染:WebGL、Three.js(基于webgl)…

前端的未来:WASM、前端智能化、PWA、WebIDE、Serverless…

三、常见前端开发环境


四、为什么需要DOM

DOM是生成页面的基础数据结构;DOM负责提供给 JavaScript 脚本操作的接口,JavaScript可以通过这些接口对 DOM 结构进行访问,从而改变文档的结构和样式;此外,DOM是一道安全防线,DOM 解析阶段会过滤掉一些不安全的 DOM 内容。

五、原生HTML文本下拉框

Input标签属性带list,后跟datalist标签包裹,包裹内容填入想要显示的option标签,option标签内显示textTag内容。

六、为什么需要HTML语义化?

1、提升代码可读性与可维护性(对于开发者而言)

2、利于SEO(对于搜索引擎、爬虫而言)

3、提升无障碍性(对于各类阅读人群而言)

七、CSS的使用方式

1、外链式(推荐,利于维护和代码打包,加载过程中也不会轻易改变DOM树)

2、嵌入式(写Demo常用)


3、内联式(不推荐,增大了阅读难度和代码的耦合性)


八、CSS解析的工作流程

CSS 解析器最终的目的也是构建树;不过它构建的树是 CSSOM 树,树的构建流程和 DOM 树的构建流程基本较为类似。

页面上的任何对象计算最后一组样式时,浏览器都会先从适用于该节点的最通用规则开始(例如,如果该节点是 body 元素的子项,则应用所有 body 样式),然后通过应用更具体的规则(即规则“向下级联的CSS规则”)以递归方式优化计算的样式。

九、常见CSS的选择器

通配、标签、id、类、属性([attr]、[attr=value]、开头[attr^=value]、结尾[attr$=value]、伪类(状态、结构)…

十、CSS的选择器组合

1、常见的组合:交集(input.error)、后代(input .error)、亲子(input>.error)…

2、“,”在CSS选择器中表示并列关系

3、混合与嵌套尽量不要超过三层。

十一、CSS的一些text相关属性

1、letter-spacing:字母之间的属性。

2、word-spacing:单词之间的距离(英文)。

3、text-indent:调整文段之间的首行缩进。

4、white-spacing:控制空格和换行的形为;normal-常规形为;no-wrap-永不换行;pre-保留html原始代码的空格;pre-wrap-文字显示不下的时候自动换行;pre-line-合并空格但是会保留换行。

十二、关于CSS的继承

1、文字相关的属性往往是可以隐式继承的。

2、显式继承,属性值输入inherit。

十三、关于CSS的文档流

主要包括:


十四、关于CSS的IFC

十五、关于CSS的BFC

1、在一个块格式化上下文中,盒在垂直方向一个接一个地放置,从包含块的顶部开始(就如根元素一般)。

2、两个兄弟盒之间的垂直距离由margin属性决定。

3、同一个块格式化上下文中,即在BFC盒的内部,相邻块级盒之间的垂直外边距会合并(外边距的塌陷情况,共用margin,margin取最大)。常见于:父子盒子与兄弟盒子常见解决方案:父子内外边距塌陷让父亲变BFC;兄弟盒子内外边距塌陷,给任意一个兄弟套一个父级BFC。

4、同一个块格式化上下文中,每个盒的左外边界(left outer edge)挨着包含块的左外边界(对于从右向左的格式化,右外边界挨着)。

5、BFC的区域不会与float box的区域接触时,不会发生上下的重叠;基于这个思路可以实现双栏自适应布局

6、计算BFC的高度时,浮动元素也参与计算;因为浮动元素会脱离文档流,所以浮动元素撑不开块元素的高度,导致高度发生塌陷。父级使用BFC,父元素会计算包含块的高度,即浮动元素会撑开BFC。

十六、子元素的flex属性


默认值:

(1)flex-grow:0(不会伸展);

(2)flex-shrink:1(可以收缩)

(3)flex-basis:默认参考元素的width,如果设置了具体值则可能忽略。

十七、CSS3的新动画类属性

1、Transform:变形、含3d

2、Transition:过渡,决定一个状态到另一个状态时的中间变化。

注意这种情况下,第二行的第二个1s表示delay的值,即宽度过渡过1秒钟才开始发生变化,可以用来制作有流程的过渡效果。

3、animation:手写方式主要是通过定义关键帧来实现(引发重绘):

简单示例如下:

.test{
            width:200px;
            height:200px;
            background-color:hotpink;
            animation: rotate 3s linear infinite;
        }
        @keyframes rotate{
            from{
                transform: rotate(0deg);
            }
            to{
                transform: rotate(360deg);
            }        
}

Animation-direction可以用来制作往返倒置、连贯的动画。

十八、background-size属性

1、contain:不管容器怎么改变,都会通过缩放的手段让这张图片能够完整的显示出来。

2、cover:不管容器怎么变,都会通过缩放的手段让这张图片能够完整的填满整个容器,但这意味着可能对图片本身进行裁切。

十九、媒体查询

举例,上面是只针对宽度大于480px才生效的样式。常查询的属性包括:width、height、dw/dh、dpr(1px问题)、orientation。