最后
正值招聘旺季,很多小伙伴都询问我有没有前端方面的面试题!
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
没记住CSS数据类型的我:
记住CSS数据类型的我:
不知道你有没有发现,如果文档只告诉你background-position
支持 数据类型,你确定你能知道该属性的全部用法吗?你确实知道该属性支持background-position: 3rem
这样的写法,因为你知道 数据类型包含了 数据类型,但你知道它还支持background-position: bottom 50px right 100px;
这样的写法吗?为什么可以写四个值并且用空格隔开?这是谁告诉你的?
这就需要我们了解CSS的语法了,请认真看下一节
我之前某个样式中需要用到裁剪的效果,所以准备了解一下CSS
中的clip-path
属性怎么使用,于是就查询了比较权威的clip-path MDN,看着看着,我就发现了这个
我这才意识到我竟然连CSS的语法都看不懂。说实话,以前无论是初学CSS还是临时找一下某个CSS属性的用法,都是直接百度,瞬间就能找到自己想要的答案(例如菜鸟教程),而这次,我是真的傻了! 因为本身clip-path
这个属性就比较复杂,支持的语法也比较多,光看MDN给你的示例代码根本无法Get到这个属性所有的用法和含义(菜鸟教程就更没法全面地教你了)
于是我就顺着网线去了解了一下CSS的语法中的一些符号的含义,帮助我更好得理解语法
因为关于CSS语法符号相关的知识在CSS属性值定义语法 MDN上都有一篇超级详细的介绍了(建议大家一定要先看看MDN这篇文章!!非常通俗易懂),所以我就不多做解释了,这里只放几个汇总表格
属性组合符号
属性组合:表示多个属性值的书写组合情况。例如在border: 1px solid #000
中,1px
能否和solid
互换位置、#000
能否省略等等,这些都是属性的组合情况
| 符号 | 名称 | 作用 |
| — | — | — |
| 空格 | 并置 | 空格左右两侧的属性顺序不能互换 |
| , | 逗号(分隔符) | 逗号两侧的属性之间必须用逗号隔开 |
| / | 斜杠(分隔符) | 斜杠两侧的属性之间必须用斜杠隔开 |
| && | "与"组合符 | "与"组合符两侧的属性都必须出现,但左右顺序随意 |
| || | "或"组合符 | "或"组合符两侧的属性至少出现一个,且左右顺序随意 |
| | | "互斥"组合符 | "互斥"组合符两侧的属性恰好只出现一个 |
| [] | 中括号 | 中括号包住的内容表示一个整体,可以类似看成数学中的小括号() |
组合符优先级
"与"组合符、"或"组合符、"互斥"组合符都是为了表示属性值出现的情况,但这三者之间还有个优先级。例如bold | thin || <length>
,其中“或”组合符的优先级高于“互斥”组合符,所以该写法等价于bold | [thin || <length>]
| 符号 | 名称 | 优先级(数字越大,优先级越大) |
| — | — | — |
| 空格 | 并置 | 4 |
| && | "与"组合符 | 3 |
| || | "或"组合符 | 2 |
| | | "互斥"组合符 | 1 |
属性重复符号
属性重复:表示某个或某些属性的出现次数。例如在rgba(0, 0, 0, 1)
中,数字的个数能否是3个、最后一位能否写百分比。这有些类似于正则的重复符号
| 符号 | 名称 | 作用 |
| — | — | — |
| 无 | 不写符号 | 默认。不写符号表示这个属性只出现一次 |
| + | 加号 | 加号左侧的属性或整体出现一次或多次 |
| ? | 问号 | 问号左侧的属性或整体出现零次或一次 |
| * | 星号 | 星号左侧的属性或整体出现零次或一次或多次 |
| # | 井号 | 井号左侧的属性或整体出现一次或多次,且以逗号(,
)隔开 |
| {A, B} | 大括号 | 大括号左侧的属性或整体最少出现A次,最多出现B次 |
| ! | 感叹号 | 感叹号左侧的整体中必须出现一个属性,即使该整体中全部属性都声明了可以出现零次 |
解读CSS语法
以本节clip-path
的语法为例,我们来简单对其中某一个属性来进行解读(只会解读部分哦,因为解读全部的话篇幅会很长很长)
先看看整体的结构
一共分为四部分,顺序是从上到下的,每两个部分之间都以where
来连接,表示的是where
下面的部分是对上面那个部分的补充解释
①:表示的是clip-path
这个属性支持的写法为:要不只写 数据类型的值,要不就最起码从 和 这两者之间选一种类型的值来写,要不就为none
。
②:我们得知①中的 数据类型支持的写法为:inset()
、circle()
、ellipse()
、polygon()
、path()
这5个函数
③:因为我们想了解circle()
这个函数的具体使用,所以就先只看这个了。我们得知circle()
函数的参数支持 和 两种数据结构,且两者都是可写可不写,但如果要写 ,那前面必须加一个at
④:首先看到 支持的属性是 (这个顾名思义就是<length>
和<percentage>
)、closest-side
、farthest-side
。而 数据类型的语法看起来就比较复杂了,我们单独来分析,因为真的非常非常长,我将 格式化并美化好给你展现出来,便于你们阅读(我也建议你们如果在学习某个属性的语法时遇到这么长的语法介绍,也像我一下把它格式化一下,这样方便你们阅读和理解)
如图可得,整体分为三大部分,且这三部分是互斥关系,即这三部分只能出现一个,再根据我们前面学习的CSS语法的符号,就可以知道怎么使用了,因为这里支持的写法太多了,我直接列个表格吧(其实就是排列组合)!如果还有不懂的,你们可以仔细阅读一下MDN的语法介绍或者也可以评论区留言问我,我看到会第一时间回复!
类型支持的写法
| 第一部分 | 第二部分 | 第三部分 |
| — | — | — |
| left
| left
| left 30px top 30px
或 top 30px left 30px
|
| center
| center
| left 30px top 30%
或 top 30% left 30px
|
| right
| right
| left 30px bottom 30px
或 bottom 30px left 30px
|
| top
| 30%
| left 30px bottom 30%
或 bottom 30% left 30px
|
| bottom
| 3px
或 3em
或 3rem
等长度值 | left 30% top 30px
或 top 30px left 30%
|
| left top
或 top left
| left top
| left 30% top 30%
或 top 30% left 30%
|
| left center
或 center left
| left center
| left 30% bottom 30px
或 bottom 30px left 30%
|
| left bottom
或 bottom left
| left bottom
| left 30% bottom 30%
或 bottom 30% left 30%
|
| center center
| left 30%
| right 30px top 30px
或 top 30px right 30px
|
| right top
或 top right
| left 30px
| right 30px top 30%
或 top 30% right 30px
|
| right center
或 center right
| center top
| right 30px bottom 30px
或 bottom 30px right 30px
|
| right bottom
或 bottom right
| center center
| right 30px bottom 30%
或 bottom 30% right 30px
|
| | center bottom
| right 30% top 30px
或 top 30px right 30%
|
| | center 30%
| right 30% top 30%
或 top 30% right 30%
|
| | center 30px
| right 30% bottom 30px
或 bottom 30px right 30%
|
| | right top
| right 30% bottom 30%
或 bottom 30% right 30%
|
| | right center
| |
| | right bottom
| |
| | right 30%
| |
| | right 30px
| |
| | 30% top
| |
| | 30% center
| |
| | 30% bottom
| |
| | 30% 30%
| |
| | 30% 30px
| |
| | 30px top
| |
| | 30px center
| |
| | 30px bottom
| |
| | 30px 30%
| |
| | 30px 30px
| |
嚯!累死我了,这支持的写法也太多太多了吧!
上一节,我们在学习clip-path
属性的语法以后,知道了我们想要的圆圈裁剪(circle()
)的语法怎么写,那么你就真的会了吗?可能你看了MDN给你举的例子,知道了circle(40%)
大致实现的效果是咋样的,如下图
如我前文说的一样,MDN只给你列举了circle()
这个函数最简单的写法,但我们刚刚学习了其语法,得知还有别的写法(例如circle(40% at left)
),而且MDN文档也只是告诉你支持哪些语法,它也并没有明确告诉你,哪个语法的作用是怎么样的,能实现什么样的效果。
此时就需要我们自己上手尝试了
看一下效果,嗯,跟MDN展示的是一样的
再修改一下值clip-path: circle(60%)
,看看效果
我似乎摸出了规律,看样子是以元素的中心为基准点,60%
的意思就是从中心到边缘长度的60%为半径画一个圆,裁剪掉该圆之外的内容。这些都是MDN文档里没有讲到的,靠我亲手实践验证出来的。
接下来我们来试试其它的语法~
试试将值改成clip-path: circle(40% at top)
诶?很神奇!为什么会变成这个样子,我似乎还没找到什么规律,再把值改一下试试clip-path: circle(80% at top)
最后
总的来说,面试官要是考察思路就会从你实际做过的项目入手,考察你实际编码能力,就会让你在电脑敲代码,看你用什么编辑器、插件、编码习惯等。所以我们在回答面试官问题时,有一个清晰的逻辑思路,清楚知道自己在和面试官说项目说技术时的话就好了
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
770954fc6e84c1124b57986635a06.png)
最后
总的来说,面试官要是考察思路就会从你实际做过的项目入手,考察你实际编码能力,就会让你在电脑敲代码,看你用什么编辑器、插件、编码习惯等。所以我们在回答面试官问题时,有一个清晰的逻辑思路,清楚知道自己在和面试官说项目说技术时的话就好了
[外链图片转存中…(img-w6mDazjR-1715466578136)]
[外链图片转存中…(img-yZaJQhpq-1715466578136)]