-
**背景和边框:**形成层叠上下文的元素的背景和边框。层叠上下文中的最低等级。
-
**负 z-index 值:**层叠上下文内有着负z-index 值的子元素。
-
**块级盒:**文档流中非行内非定位子元素。
-
**浮动盒:**非定位浮动元素。
-
**行内盒:**文档流中行内级别非定位子元素。
-
**z-index: 0 :**定位元素。这些元素形成了新的层叠上下文。
-
**正z-index 值:**定位元素。层叠上下文中的最高等级。
这七个层叠等级构成了层叠次序的规则。在层叠等级七上的元素会比在等级一至六上的元素显示地更上方(更靠近观察者)。可以结合w3help中的一张图来帮助我们更好的理解这七个层叠等级:
其实对于层叠顺序规则还是较为复杂的。
当页面包含浮动元素、绝对定位的元素、固定定位的元素或相对定位的元素(元素从正常位置偏移一定量)以及内联元素时,浏览器会以不同的方式显示它们(放置它们)。元素从最靠近查看者的地方排列到最远的地方,如下所示:
-
定位元素按源代码中的外观顺序排列。源代码中的最新内容最接近查看者
-
内联元素(比如文本和图像)是流入和非定位(它们的位置是静态的)
-
非浮动元素按照源代码中外观的顺序排列
-
非定位和非浮动块级元素
-
根元素 html 是全局层叠上下文的根,包含页面上的所有元素
这就是浏览器在呈现页面上的元素时应用的默认层叠顺序。
如果你想要更改定位元素在 z 轴上的渲染顺序,可以使用 z-index 属性。例如,你有两个绝对定位的元素,它们在某个点上重叠,并且你希望其中一个元素显示在另一个元素的前面,即使它在源代码中出现在它之前,你也可以使用 z-index 属性来实现这一点。
此时需要注意的第一件重要的事情是,z-index 属性只适用于定位元素。所以,即使为元素提供 z-index 的值将其置于其他元素之前,z-index 也不会对元素产生影响,除非它被定位;也就是说,除非它具有除 static 之外的 position 值。
因此,如果所有定位的元素具有 z-index 的索引值,则将元素从最靠近查看者排列到最远的位置,如下所示:
具有正值的 z-index 的定位元素。较高的值更接近屏幕。然后,按照它们出现在源代码中的顺序排列:
-
定位元素的 z-index:0 或 z-index: auto ;
-
内联元素(如文本和图像)是流中的和非定位的(它们的位置是静态的)
-
源代码中出现顺序的非定位浮动元素
-
非定位和非浮动块级元素
-
具有负值的 z-index 的定位元素。较低的 z-index 索引值更近。然后按照它们在源代码中出现的顺序
-
根元素 html 是全局层叠上下文的根,包含页面上的所有元素
当我们在定位元素上设置 z-index 值时,它指定该元素在它所属的层叠顺序上下文中的顺序,并且它将根据上述步骤在屏幕上渲染。
但是,当我们设置元素的 z-index 时会发生另一件事。获取除默认值 auto 之外的 z-index 值的元素实际上为其所有定位的后代元素创建层叠上下文。我们之前提到过,每个层叠上下文都有一个根元素,它包含其中的所有元素。当你将 z-index 属性应用于这个元素时,它将在其包含的下下文中指定元素的 z 轴顺序,并且还将创建以该元素为根的新层叠顺序上下文。
一个具有值为z-index:auto的定位元素被视为创建了新的堆叠顺序上下文,但任何实际创建新层叠顺序上下文的定位后代和后代被视为父层叠顺序上下文的一部分,而不是新的层叠顺序上下文。
当一个元素成为一个新的层叠顺序上下文时,它所定位的后代元素将会按照我们前面提到的元素本身的规则在其中进行层叠渲染。因此,如果我们再次重写渲染过程,它会是这样的:
-
具有正值 z-index 的定位元素组成的层叠顺序上下文。较高的值更接近屏幕。然后按照它们在源代码中出现的顺序呈现
-
定位元素的 z-index: 0 或 z-index: auto
-
内联元素(比如文本和图像)是流中的和非定位的(它们的位置是静态的)
-
非浮动元素按照源代码中外观的顺序排列
-
非定位和非浮动块级元素
-
具有负值 z-index 的定位元素组成的层叠顺序上下文。较低的 z-index 的值更接近屏幕。然后按照它们在源代码中出现的顺序呈现
-
根元素 html 是全局层叠上下文的根,包含页面上所有元素
因此,当我们使用z-index 属性来确定其层叠顺序中定位元素的顺序时,我们还创建了“原子(Atomic)”层叠顺序上下文,其中每个元素成为其所有定位后代的层叠顺序上下文。
样式层叠
再回过头来看样式的层叠。CSS在任何代码块中,比如{} 中都可以同时书写相同的样式规则,比如:
p {
color: red;
color: blue; /* 被采用 */
}
虽然这样书写并不会引起错误,但不建议这么来写CSS样式规则。
前面我们也提到过,在同一个样式文件中也有可能在对同一个元素使用相同的样式规则,比如:
a {
color: red;
}
.link {
color: blue;
}
甚至是我们在不同的样式文件中也可对同一元素使用相同的样式规则,比如:
/* base.css */
a {
color: red
}
/* style.css */
@import base.css;
a {
color: orange;
}
上面几种不同的样式写法,都可以被称为样式的层叠。只不过最终被运用到元素上的规则以最终出现的规则为准,当然这也有一个前提条件,那就是他们选择器权重是相同。
权重
在CSS领域说到权重,或许大家更多关注到的是CSS选择器的权重。其实除了选择器权重对元素样式有影响之外,也和CSS样式规则出现的先后顺序有关(正如前面所提到的层叠顺序)。而且除了选择器有权重之外,也有属性权重一说。
对于选择器权重,下图可以很形象的阐述:
选择器权重可以类似于海洋世界中的生存规则,大鱼吃小鱼,小鱼吃虾米。如果你实现不清楚两个选择器的权重,也可以 使用在线的测试工具来检测(https://specificity.keegan.st/):
对于一个选择器的权重,将会按下面这样的规则进行计算:
-
如果声明来自一个行内样式(style 属性)而不是一条选择器样式规则,算1 ,否则就是 0 (=a )。HTML中,一个元素的 style 属性值是样式规则,这些属性没有选择器,所以 a=1 , b = 0 , c = 0 , d = 0 ,即 1, 0, 0, 0
-
计算选择器中 ID 属性的数量 (= b )
-
计算选择器中其它属性和伪类的数量 (= c )
-
计算选择器中元素名和伪元素的数量 (= d )
4个数连起来a-b-c-d (在一个基数很大的数字系统中)表示特殊性,比如下面这样的示例:
* {} /* a=0 b=0 c=0 d=0 -> 选择器权重 = 0,0,0,0 */
li {} /* a=0 b=0 c=0 d=1 -> 选择器权重 = 0,0,0,1 */
li:first-line {} /* a=0 b=0 c=0 d=2 -> 选择器权重 = 0,0,0,2 */
ul li {} /* a=0 b=0 c=0 d=2 -> 选择器权重 = 0,0,0,2 */
ul ol+li {} /* a=0 b=0 c=0 d=3 -> 选择器权重 = 0,0,0,3 */
h1 + [rel=up]{} / a=0 b=0 c=1 d=1 -> 选择器权重 = 0,0,1,1 */
ul ol li.red {} /* a=0 b=0 c=1 d=3 -> 选择器权重 = 0,0,1,3 */
li.red.level {} /* a=0 b=0 c=2 d=1 -> 选择器权重 = 0,0,2,1 */
#x34y {} /* a=0 b=1 c=0 d=0 -> 选择器权重 = 0,1,0,0 */
style=“” /* a=1 b=0 c=0 d=0 -> 选择器权重 = 1,0,0,0 */
客户端渲染页面时,除了选择器权重会影响元素样式规则之外,还有样式来源也会影响元素样式规则。就CSS规则的来源而言,规则主要来自三个地方:
-
**编写者规则(Author):**这是HTML文档声明的CSS。也就是我们前端开发人员编写的,根据文档语言(比如HTML)约定给源文档指定样式表。这也是我们能够控制的唯一来源
-
**用户(User):**这是由浏览器的用户定义和控制的。不是每个人都会有一个,但是当人们添加一个时,通常是为了覆盖样式和增加网站的可访问性。比如,用户可以指定一个售有样式表的文件,或者用户代理可能会提供一个用来生成用户样式(或者表现得像这样做了一样)的界面
-
**用户代理(User-Agent):**这些是浏览器为元素提供的默认样式。这就是为什么 input 在不同的浏览器上看起来略有不同,这也是人们喜欢使用CSS重置样式,以确保重写用户代理样式的原因之一
这三种样式表将在一定范围内重叠,并且它们按照层叠互相影响。
CSS中运用于同一元素时的属性也会有权重一说,比如说同样用来描述元素宽度的属性 width 、min-width 、max-width ,比如:
最终 max-width: 100% 取胜,即 max-width 权重高于 width 和 min-width ,但这并不是绝对的,这和场景有着紧密关系。不过同时在同一个元素上使用了这三个属性时,他们的权重大致如下:
-
当 width 大于 min-width 时,会取 width 的值;当 width 小于 min-width 时,会取 min-width 的值
-
当 width 大于 max-width 时,会取 max-width 的值;当 width 小于 max-width 时,会取 width 的值
-
如果 min-width 大于 max-width ,那么 min-width 值将作为元素的宽度;如果 min-width 小于 max-width ,那么 min-width 值将作为元素的宽度
如果你使用Flexbox来构建Web的布局,那么对于Flex项目的宽度也有一定的权重规则:
首先根据 content ➜width ➜flex-basis 来决定用哪个来决定用于Flex项目。如果Flex项目显式设置了flex-basis 属性,则会忽略content 和 width 。而且min-width 是用来设置Flex项目的下限值;max-width 是用来设置Flex项目的上限值。
即:
-
flex-basis 大于max-width ,Flex项目的宽度等于max-width ,即max-width 能覆盖flex-basis
-
如果 flex-basis 小于 min-width 时,Flex项目的宽度会取值 min-width ,即 min-width 覆盖 flex-basis
由于min-width 大于max-width 时会取min-width ,有了这个先取条件我们就可以将flex-basis 和min-width 做权重比较,即:flex-basis 会取于min-width 。反过来,如果min-width 小于max-width 时则依旧会取max-width ,同时要是flex-basis 大于max-width 就会取max-width 。
注意,Flexbox布局中有关于Flex项目的宽度计算是非常复杂的。
继承
“继承”是CSS中另一个重要概念。在W3C规范中,描述每个CSS属性时都会有一个选项是“Inherited”,如果值为“no”表示该属性是不可继承的,比如下图左侧的border 属性;如果值为“yes”表示该属性是可继承的,比如下图右侧的color 属性:
在CSS中提供了处理CSS继承的机制,简单地讲就是CSS提供了几个属性值,可以用来处理属性的继承。这几个属性值就是initial 、inherit 、unset 和revert 。其实除了这四个属性值之外,还有一个all 属性值。虽然这几个属性值主要用来帮助大家处理CSS属性继承的,但他们之间的使用,还是有一定的差异化。
也就是说,CSS的层叠、权重和继承都会对你的CSS有影响。在实际使用的时候,如果很好的运用这些概念和手段,可以更好的帮助大家少写很多样式代码,而且更易于维护自己的CSS代码。
这里提到的CSS层叠、权重和继承都是CSS的基础概念,也是CSS的核心概念,掌握或者了解这些概念对于每一位从事Web开发者同学而言都是很有必要的。只有掌握这些概念,有助于帮助大家更好的理解CSS和正确的使用CSS。
视觉格式化模型
首先要声明一点:
视觉格式化模型和CSS盒模型不是同一个东西!
简单点说呢。Web页面(文档树)是由很一个个盒子组成(因为任何元素都可以被视为是一个盒子),而视觉格式化模型却是一套规则,用来计算元素转换为盒子的规则。而页面的布局都由这些盒子的所处的各处位置组合而成。那么理解了元素怎么转成盒子的规则,就理解了Web页面是怎么布局。而每个盒子的布局主要由以下几个因素决定:
-
**盒子的尺寸 :**精确指定、由约束条件指定或没有指定
-
**盒子的类型 :**行内盒子(inline)、行内级盒子(inline-level)、原子行内级盒子(atomic inline-level)和块盒子(block)
-
**定位方案 :**普通流定位、浮动定位或绝对定位
-
**文档树中的其它元素 :**即当前盒子的子元素或兄弟元素
-
视窗尺寸与位置
-
所包含的图片的尺寸
-
其他的某些外部因素
如果你想彻底理解CSS的视觉可式化模型,其中还有一些概念需要掌握,比如:
-
**块(Block):**一个抽象的概念,一个块在文档流上占据一个独立的区域,块与块之间在垂直方向按照顺序依次堆叠(默认情况之下)
-
**包含块(Containing Block):**指的是包含其他盒子的块
-
盒子(Box): 一个抽象的概念,由CSS引擎根据文档中的内容所创建,主要用于文档元素的定位、布局和格式化等用途
-
**块级盒子(Block-level Box):**由块级元素生成。一个块级元素至少会生成一个块级盒子,但也有可能生成多个(例如列表项元素)
-
**行内级盒子(Inline-level Box)😗*由行内级元素生成。同样的,一个行内元素至少会生成一个行内级盒子。行内级盒子包括行内盒子和原子行内级盒子两种,区别在于该盒子是否参与行内格式化上下文的创建
-
**块盒子(Block Box)😗*如果一个块级盒子同时也是一个块容器盒子,则称其为块盒子。除具名块盒子之外,还有一类块盒子是匿名的,称为匿名块盒子(Anonymous Block Box),匿名盒子无法被CSS选择器选中
-
**原子行内级盒子(Atomic Inline-level Box):**不参与行内格式化上下文创建的行内级盒子。原子行内级盒子一开始叫做原子行内盒子(Atomic Inline Box),后被修正。原子内级盒子的内容不会拆分成多行显示。
-
行盒(Line Box): 和行内盒是不一样的。行盒是由行内格式化上下文(Inline Formatting Context)产生的盒子,用于表示一行。行盒从包含块的一边排版到另一边。一般情况下,浏览器为会每行创建一个看不见的行盒
-
**块容器盒子(Block Container Box或Block Containning Box):**块容器盒子侧重于当前盒子作为容器角色,它不参与当前块的布局和定位,它所描述的仅仅是当前盒子与其后代之间的关系
-
块级元素(Block-level Element): 是指元素的display 值为block 、list-item 、table 、flex 和grid 等,该元素将成为块级元素。元素是否是块级元素仅是元素本身的属性,并不直接用于格式化上下文的创建或布局
-
**行内级元素(Inline-level Element):**是指元素的display 值为inline 、inline-block 、inline-table 、inline-flex 和inline-grid 等,该元素将成为行内级元素。与块元素一样,元素是否是行内级元素仅是元素本身的属性,并不直接用于格式化上下文的创建或布局
-
**视窗(Viewport):**视窗就是浏览器中可视区域。视窗大小指的就是浏览器可视区域的大小
-
匿名盒子 : 分为块匿名盒子和行内匿名盒子。在某些情况下进行视觉格式化时,需要添加一些增补性的盒子,这些盒子无法被CSS的选择器选中,而这种盒子被称为匿名盒子(Anonymous Box)。
除了上述说到的盒子,在CSS中还定义了几种内容模型,这些模型同样可以应用于元素。这些模型一般用来描述布局,它们可能会定义一些额外的盒子类型:
-
**表格内容模型 :**可能会创建一个表格包装器盒子和一个表格盒子,以及多个其他盒子如表格标题盒子等
-
**多列内容模型 :**可能会在容器盒子和内容之间创建多个列盒子
-
**Flexbox内容模型 :**可能会创建一个弹性盒子
-
**Grid内容模型 :**可能会创建一个网格盒子
就这些概念也足让我们感到烦人了吧。我想你看到这些概念,应该不会再说CSS容易了。
有了这些概念,我们再来说CSS中的格式化上下文。我想你或多或少听过这个词吧。在CSS中,格式化上下文有很多种,除了大家熟悉的 BFC 、 IFC 之外还有由Flexbox布局创建的 FFC 和Grid布局创建 GFC 等。这些统称为CSS 格式化上下文 ,也被称作 视觉格式化模型 。而CSS视觉格式化模型是用来处理文档并将它显示在视觉媒体上的机制。
简单地说, 就是用来控制盒子的位置,即实现页面的布局 。
格式化上下文也可以说是CSS视觉渲染中的一部分, **其主要作用是决定盒子模型的布局,其子元素将如何定位以及和其他元素的关系和相互作用 。**那么理解CSS格式化上下文有助于我们掌握各类CSS布局的关键。
行内格式化上下文
行内格式化上下文(Inline Formatting Context),简称 IFC 。主要用来规则行内级盒子的格式化规则。
IFC的行盒的高度是根据包含行内元素中最高的实际高度计算而来。主要会涉及到CSS中的 font-size 、line-height 、vertical-align 和 text-align 等属性。
行内元素从包含块顶端水平方向上逐一排列,水平方向上的margin 、border 、padding 生效。行内元素在垂直方向上可按照顶部、底部或基线对其。
当几个行内元素不能在一个单独的行盒中水平放置时,他们会被分配给两个或更多的(Vertically-stacked Line Box)垂直栈上的行盒,因此,一个段落是很多行盒的垂直栈。这些行盒不会在垂直方向上被分离(除非在其他地方有特殊规定),并且他们也不重叠。
-
垂直方向上,当行内元素的高度比行盒要低,那么 vertical-align 属性决定垂直方向上的对齐方式。
-
水平方向上,当行内元素的总宽度比行盒要小,那么行内元素在水平方向上的分部由 text-align 决定。
-
水平方向上,当行内元素的总宽度超过了行盒,那么行内元素会被分配到多个行盒中去,如果设置了不可折行等属性,那么行内元素会溢出行盒。
-
行盒的左右两边都会触碰到包含块,而 float 元素则会被放置在行盒和包含快边缘的中间位置。
下面这些规则都会创建一个行内格式化上下文:
-
IFC只有在一个块级元素中仅包含行内级元素时才会生成
-
内部的盒子会在不平方向,一个接一个的放置
-
这些盒子垂直方向的起点从包含块盒子的顶部开始
-
摆放这些盒子的时候,它们在水平方向上的 padding 、border 和 margin 所占用的空间都会被考虑在内
-
在垂直方向上,这些盒子可能会以不同形式来对齐(vertical-align)
-
能把在一行上的盒子都完全包含在一行行盒(Line Box),行盒的宽度是由包含块和存在的浮动来决定
-
IFC中的行盒一般左右边都紧贴其包含块,但是会因浮动元素的存在发生变化。浮动元素会位于IFC与行盒之间,使得行盒宽度缩短
-
当行内级盒的总宽度小于包含它们的行盒时,其水平渲染规则则由text-align 来确定
-
当行内盒超过行盒的宽度时,它会被分割成多个盒子,这些盒子被分布在多个行盒里。如果一个行内盒不能被分割,则会溢出行盒
IFC主要用于:
-
行内元素按照 text-align 进行水平居中
-
行内元素撑开父元素高度,通过 vertical-align 属性进行垂直居中
块格式化上下文
块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视化CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。
BFC实际上就是页面中一块渲染区域,该区域与其他区域隔离开来。容器里面子元素不会影响到外部,外部的元素也不会影响到容器里的子元素。
BFC 内部的盒子会从上至下一个接着一个顺序排列。BFC 内的垂直方向的盒子距离以 margin 属性为准,上下 margin 会叠加。每个元素的左侧最外层边界与包含块 BFC 的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。BFC 的区域不会与浮动元素的盒子折叠。BFC 的高度也会受到浮动元素的影响,浮动元素参与计算。
下面这些规则可以创建一个BFC:
-
根元素或包含根元素的元素
-
浮动元素(元素的 float 不是 none )
-
绝对定位元素(元素的 position 为 absolute 或 fixed )
-
行内块元素(元素的 display 为 inline-block )
-
表格单元格(元素的 display 为 table-cell ,HTML表格单元格默认为该值)
-
表格标题(元素的 display 为 table-caption ,HTML表格标题默认为该值)
-
匿名表格单元格元素(元素的display 为table 、table-row 、table-row-group 、table-header-group 、table-footer-group (分别是HTMLtable 、row 、tbody 、thead 、tfoot 的默认属性)或inline-table )
-
overflow 值不为visible 的块元素
-
display 值为 flow-root 的元素
-
contain 值为 layout 、content 或strict 的元素
-
弹性元素(display 为flex 或inline-flex 元素的直接子元素)
-
网格元素(display 为 grid 或 inline-grid 元素的直接子元素)
-
多列容器(元素的column-count 或 column-width 不为auto ,包括column-count 为1 )
-
column-span 为 all 的元素始终会创建一个新的BFC,即使该元素没有包裹在一个多列容器中
块格式化上下文包含创建它的元素内部的所有内容。其主要使用:
-
创建独立的渲染环境
-
防止因浮动导致的高度塌陷
-
防止上下相邻的外边距折叠
Flex格式化上下文
Flex格式化上下文(Flexbox Formatting Context)俗称 FFC 。当display 取值为flex 或inline-flex ,将会创建一个Flexbox容器。该容器为其内容创建一个新的格式化上下文,即Flex格式化上下文。
不过要注意的是,Flexbox容器不是块容器(块级盒子),下列适用于块布局的属性并不适用于Flexbox布局:
-
多列中的 column-* 属性不适用于Flexbox容器
-
float 和 clear 属性作用于Flex项目上将无效,也不会把让Flex项目脱离文档流
-
vertical-algin 属性作用于Flex项目上将无效
-
::first-line 和::first-letter 伪元素不适用于Flexbox容器,而且Flexbox容器不为他们的祖先提供第一个格式化的行或第一个字母
Grid格式化上下文
Grid格式化上下文(Grid Formaatting Context),俗称 GFC 。和FFC有点类似,元素的 display 值为grid 或inline-grid 时,将会创建一个Grid容器。该完完全全器为其内容创建一个新的格式化上下文,即Grid格式化上下文。这和创建BFC是一样的,只是使用了网格布局而不是块布局。
网格容器不是块容器,因此一些假定为块布局设计的属性并不适用于网格格式化上下文中。特别是:
-
float 和clear 运用于网格项目将不会生效。但是float 属性仍然影响网格完完全全器子元素上display 的计算值,因为这发生在确定网格项目之前
-
vertical-align 运用于网格项目也将不会生效
-
::first-line 和::first-letter 伪元素不适用于网格容器,而且网格容器不向它们社先提供第一个格式化行或第一个格式化字母
盒模型
在CSS世界中,会何一个HTML元素可以解析成一个盒子。可以通过CSS属性(物理属性)来决定盒子的大小。而决定盒子大小主要由四个属性来决定:
-
**Content :**元素中的文本、图像或其他媒体内容
-
**padding :**盒子内容格边框之间的空间
-
**border :**盒子的边框
-
**margin :**盒子与其他盒子之间的距离
如果我们用一张图来描述的话,可以类似下面这样的:
上面提到的几个属性就是浏览器渲染元素盒子所需要的一切。对于CSSer来说,都喜欢用类似下图来阐述元素的盒模型:
而在浏览器调试器中“Computed”可以看到它是怎么来解释一个元素的盒模型:
在一般情况之下,我们所说的盒子的 width 是元素内容的宽度,内距和边框的和,这也常常被称之为内盒的宽度。如果你在内盒的宽度上加外距的大小就可以计算出盒子外盒的宽度。
盒子的 height 计算和 width 类似。
但在布局中,盒子的宽度计算会直接影响到布局,甚至会直接打破页面的布局。比如说,一个 div 元素:
div {
width: 100%;
padding: 1rem;
}
会让div 超出容器,类似下图这样:
面对这样的场景时,就需要借助CSS的box-sizing 属性,它可以更好的帮助我们控制盒子的大小:
用个实例来解释,这样更易于理解:
大家是否有留意到,在前面提到的padding 、border 和margin 等都是采用的物理特性来描述一个盒子,而且开发者讨论盒模型的时候,都习惯使用下图来阐述它:
但随着CSS的逻辑属性的出现(https://www.w3.org/TR/css-logical-1/),在CSS中就除我们所熟悉的物理属性之外,还新增了很多逻辑属性:
同时逻辑属性对于CSS盒模型也将带来相应的变化:
如果你在布局时,使用逻辑属性来替代物理属性,对于一些国际网站,比如阿拉伯语的网站,有着明显的作用。在改变书写模式时,不需要额外调整布局相关的属性:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
总结一下
面试前要精心做好准备,简历上写的知识点和原理都需要准备好,项目上多想想难点和亮点,这是面试时能和别人不一样的地方。
还有就是表现出自己的谦虚好学,以及对于未来持续进阶的规划,企业招人更偏爱稳定的人。
万事开头难,但是程序员这一条路坚持几年后发展空间还是非常大的,一切重在坚持。
为了帮助大家更好更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。
前端面试题汇总
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
mg-A2DGBuqT-1712364553439)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-NPzQSXk0-1712364553439)]
总结一下
面试前要精心做好准备,简历上写的知识点和原理都需要准备好,项目上多想想难点和亮点,这是面试时能和别人不一样的地方。
还有就是表现出自己的谦虚好学,以及对于未来持续进阶的规划,企业招人更偏爱稳定的人。
万事开头难,但是程序员这一条路坚持几年后发展空间还是非常大的,一切重在坚持。
为了帮助大家更好更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。
前端面试题汇总
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算