基础知识整理-2-CSS
CSS 表示层叠样式表(Cascading Style Sheet)。
MDN 中的解释:CSS 不是真正的编程语言,也不是标记语言,它是一门样式表语言。
CSS 提供了三种方法,可以将 CSS 样式应用到元素上:
内联样式(inline style)
内部样式表(internal style sheet)
外部样式表(external style sheet)
注释:/* 注释内容 */
内嵌式:在 head 标签对中通过在 style 标签里写样式。
外链式:将 css 存储为单独的 css 文件,通过 link 标签引入。ref=“stylesheet"
导入式:@import url(css/css.css),导入式不会等待 css 文件加载完毕,而是会立即渲染 html 结构,所以页面会有几秒钟的“素面朝天”。
行内式:直接通过 style 属性写在标签上,没有批量设置能力。使用 link 链入外部样式,页面加载时,会同时加载页面,保证页面的内容和样式同时展现。
使用导入式,页面加载完后,才会加载样式,所以再打开页面时会先看到页面内容,才看到被渲染样式的内容。
css 选择器:传统 css2.1 选择器:标签和 id 选择器、class 选择器、复合选择器、伪类
css3 新增选择器:元素关系选择器、序号选择器、属性选择器、css3 新增伪类、伪元素
text-decoration 用于设置文字的装饰线。
text-transform 用于设置文字的大小写转换
text-indent 用于设置第一行内容的缩进,块级元素可用
text-align 定义行内内容(例如文字)如何相对它的块级父元素对齐
letter-spacing 设置字母之间的间隙
word-spacing 设置单词之间的间隙
解决图片下边缘间隙:
1.vertical-align 设置成 top/middle/bottom 2.将图片设置为 block 元素
ul {
list-style: none;
} // 去掉无序列表的小圆点。
a {
text-decoration: none;
} // 去掉超级连接的下划线。
id 属性,只能由字母、数字、下划线、短横构成。数字不能开头
复合选择器:
| 后代选择器 | .box .spec | 选择类名为 box 的标签内部的类名为 spec 的标签 |
| 交集选择器 | li.spec | 选择既是 li 标签,又有 spec 类名的标签 |
| 并集选择器 | ul, ol | 选择所有 ul 和 ol 标签 |
伪类是指定要选择的元素的特殊状态。a 标签有四个:
| a:link | 没有被访问的超链接 |
| a:visited | 被访问过的超链接 |
| a:hover | 正在被鼠标悬停的超链接 |
| a:active | 正在被激活的超链接(按下按键但还没有松开) |
链接伪类的顺序,a:hover 必须置于 a:link 和 a:visited 之后,才有效,a:active 必须在 a:hover 之后,才有效。
而 link、visited 两个伪类之间顺序无所谓,谁在前都可以。
| 子选择器 | div>p | div 的子标签 p |
| 相邻兄弟选择器 | img+p | 图片后面紧跟着的段落将被选中 |
| 通用兄弟选择器 | p⁓span | p 元素之后的所有同层级 span 元素 |
序号选择器:
| :first-child | 第一个子元素 | IE7 |
| :last-child | 最后一个子元素 | IE9 |
| :nth-child(3) | 第三个子元素 | IE9 |
| :nth-of-type(3) | 第三个某类型子元素 | IE9 |
| :nth-last-child(3) | 倒数第三个子元素 | IE9 |
| :nth-last-of-type(3) | 倒数第三个某类型子元素 | IE9 |
nth-child()可以写成 an+b 的形式,表示从 b 开始每 a 个选一个。不能写成 b+an2n+1 等于 odd,表示奇数。2n 等价于 even,表示偶数
属性选择器:
| img[alt] | 选择有 alt 属性的 img 元素 |
| img[alt="故宫"] | 选择 alt 属性是“故宫”的 img 元素 |
| img[alt^="北京"] | 选择 alt 属性以北京开头的 img 元素 |
| img[alt$="夜景"] | 选择 alt 属性是以“夜景”结尾的 img 元素 |
| img[alt*="美"] | 选择 alt 属性中含有“美”字的 img 标签 |
| img[alt⁓="手机拍摄"] | 选择 alt 属性中有空格隔开的“手机拍摄”字样的 img 标签 |
| img[alt|="参赛作品"] | 选择 alt 属性以“参赛作品-”开头的 img 标签 |
新增伪类:
| :empty | 选择空标签 |
| :focus | 选择当前获得焦点的表单元素 |
| :enabled | 选择当前有效的表单元素 |
| :disabled | 选择当前无效的表单元素 |
| :checked | 选择当前已经勾选的单选按钮或者复选框 |
| :root | 选择根元素,即 html 标签 |
伪元素:伪元素用双冒号表示,IE8 兼容单冒号。
::before 和 ::after 常用于清除浮动或者一些小图标
::selection 文档中被高亮的部分(被圈住的)
::first-letter 会选中某元素中(必须是块级元素)第一行的第一个字母
::first-line 会选中第一行的全部文字。
层叠性:多个选择器可以同时作用于同一个标签,效果叠加。
权重:id 权重>clss 权重>标签权重
!important 提升权重
可通过(id 的个数,class 的个数,标签的个数)组成三位数比大小。
img 标签属于行内可替换元素,并不是 inline-block。
不要在 p 元素中放 div 元素
行内元素内不要放块级元素
块级元素的默认 width 是 auto 并非 100%
outline 表示元素外轮廓,在 border 外边,不占空间。
行内元素设置 margin-top/bottom 无效,left/right 有效
行内元素的 padding 上下会被撑开但不占空间。
line-height 无法撑起行内非替换元素。
设置 color 时,rgba 表示法兼容到 IE9,不如 16 进制和 rgb 兼容好。
text-decoration:line-through
删除线
font-style:italic
字体倾斜
font-family
设置字体,英语字体放前面,汉语放后面。
@font-face
定义字体
line-height
行高 可以是 px 的数值,也可以是 1.5 这种代表字号的倍数。
也可以是百分数 150%等于 1.5,都是字号的 1.5 倍。
line-height 继承:写具体数值比如 30px 就继承该值、如果是小数(比例)1.5 或者 2,就继承比例,最终行高是子元素的 fontsize 乘比例。
百分比的话就是继承百分比计算出来的值,200% x 父元素的 fontsize 。
单行文本垂直居中设置行高等于盒子高。
font
属性是合写属性:font-style、font-weight、font-size/line-height、font-family 使用合写属性时必须设置 font-size 和 font-family 才能生效。
有继承性的:color、font-开头的、list-开头的、text-开头的、line-开头的继承的情况下有个就近原则,选择器权重计算会失效。(离目标越近的会生效)
盒模型:盒子默认的宽高是盒子内容的宽高,设置box-sizing:border-box;
就是以边框为宽高
padding 用三个数值的时候是上、左右、下。
box-sizing 属性兼容到 IE9
margin 在竖直方向有塌陷现象,小的 margin 会塌陷到大的 margin 里,从而 margin 不叠加,只以大值为准。
margin 传递问题,(子元素有 margin-top 父元素也被带下来了)如果底部和父元素重合并且父高度 auto,会产生 margin-bottom 传递。
建议父子之间使用 padding,兄弟之间使用 margin
怎么解决:
1 给父元素设置padding-top
替代子元素的 margin-top
2 给父元素设置overflow:hidden
3 父元素加上border
4 子元素设置浮动
5 父元素设置浮动
6 子绝父相定位
块级元素:不并排显示、能设置宽高、width 自动撑满
行内元素:并排显示、不能设置宽高、width 自动收缩
行内块:并排显示、能设置宽高
display:none
可以将元素隐藏,元素会放弃位置,跟没写一样,但在 DOM 中是存在的
visibility:hidden
隐藏元素,不放弃位置
浮动的最本质功能就是来实现并排。要浮动都要浮动,父盒子要有足够的宽度,否则子元素会掉下去。
浮动的元素不在区分块级元素、行内元素,已经脱离了标准文档流,一律能够设置宽度和高度,即使它是 span 或者 a 标签等。
右浮动会倒叙显示。
BFC 规范:块级格式化上下文,是页面上一个独立的容器,里面的元素不会影响外面的,外面的也不会影响里面的。
例子:如果一个盒子不设置 height,当他的子元素都浮动时,无法撑起他自身。是因为这个盒子没有形成 bfc
怎么形成 BFC:
1 让盒子浮动(float 的值不是 none)
2position 的值不是 static 或 relative(设置成 flex 固定定位或 absolute 绝对定位)
3display 的值是 inline-block、flex 或者 inline-flex
4overflow:hidden(溢出边框才会隐藏)
IE6、7 浏览器使用 haslayout 机制,和 BFC 规范略有差异,比如 IE 浏览器可以用zoom:1
属性“让盒子拥有 layout”
BFC 可以取消盒子 margin 塌陷、可以阻止元素被浮动元素覆盖。
清除浮动的方法:
1 让内部有浮动的父盒子形成 BFC,他就能关住内部的浮动,此时最好的办法就是overflow:hidden
2 给后面的父盒子设置clear:both
属性。clear 表示清除浮动对自己的影响,both 表示左右浮动都清除
(缺点,margin-top 会失效,因为会往上踹一个没有高度的盒子)
3 使用::after 伪元素给盒子添加最后一个子元素,并且给 after 设置clear:both
,注意要给 after 转为块级元素。
绝对定位不会影响其他元素,但是会对其他元素形成压盖。
脱离标准文档流的方法:浮动、绝对定位、固定定位绝对定位的盒子会以自己祖先元素中,离自己最近的拥有定位属性的盒子作为基准。
绝对定位脱离文档流后就不能用 margin:0 auto 的方式水平居中了
通过绝对定位让盒子垂直居中:
position: absolute;
top: 50%;
margin-top: -自己高度的一半;
border 线形:solid 实线、dashed 虚线、dotted 点状线
border-radius 的值通常是 px 代表圆的半径,百分号时代表从一条边的百分之多少的地方开始
border-radius 有三个值得话,第一个值表示对左上角的设置,第二个值表示对右上角和左下角的设置,第三个值表示对右下角的设置。
border-radius 有两个属性值的话,第一个值表示左上角和右下角,第二个值表示右上角和左下角。
盒子阴影:box-shadow:x 偏移 y 偏移 模糊量 【可选延展值(向四个方向扩散)】颜色内阴影:在 x 偏移前加 inset 即可。用逗号隔开就可以多阴影了。
在线测试阴影:https://html-css-js.com/css/generator/box-shadow/
text-shadow 文本阴影
背景与渐变:padding 区域有背景颜色 background-size 用来设置背景图片的尺寸兼容到 IE9,之前的 bgc 和 bgr 可以到 IE6
background-size 属性用来设置背景图片的尺寸,兼容到 IE9
background-size: 100px 200px 宽度 高度;
值也可以用百分数来设置,表示为盒子宽、高的百分之多少,需要等比例设置的值写 auto
背景裁切:
background-clip 属性用来设置元素的背景裁切到哪个盒子,兼容到 IE9
默认值是 border-box 背景延伸到边框。
padding-box 背景延伸至内边(padding)不会绘制到边框处,仅在 dotted、dashed 边框可察觉。
content-box 背景被裁剪到内容区
背景起源:background-origin
背景固定:background-attachment 它决定背景图像的位置是在视口内固定,或者随着包含它的区块滚动。
| fixed | 自己滚动条不动,外部滚动条不动 |
| local | 自己滚动条动,外部滚动条动 |
| scroll | 自己滚动条不动,外部滚动条动(默认值) |
overflow:scroll
超出部分有滚动条
background-position 可以设置背景图片出现的位置。
合写属性:background:背景颜色 背景图片 背景重复 背景位置 线性渐变
background-image 属性可以用 linear-gradient()创建线性渐变背景
background-image: linear-gradient(to right, blue, red) 渐变方向 开始颜色 结束颜色;
也可以写成度数,比如将 to right 替换成 180deg
可以有多个颜色值,并用百分数来定义它们出现的位置
linear-gradient(to bottom, blue, yellow 20%, red) //在20%处变黄色
径向渐变:
radial-gradient(50% 50%, red,blue) 【圆心坐标】
2d 与 3d 变形transform:rotate(45deg)
平面的盒子旋转 45 度,正值顺时针,负值逆时针
transform-origin:设置变换的原点,0 0 意思是左上角。
transform:scale(3)
缩放属性,大于一放大、小于一缩小。
transform:skew(x斜切角度,y斜切角度)
斜切变形
transform:translate(向右移动多少,向下移动多少)
位移,和相对定位类似,老家留坑形影分离相对定位兼容到 ie6 这个兼容到 ie9
不同浏览器的私有前缀,用来对实验性质的 CSS 属性加以标识
| Chrome | -webkit- |
| Firefox | -moz- |
| IE、Edge | -ms- |
| 欧朋 | -o- |
3D 旋转
将 transform 属性的值设置为 rotateX()或者 rotateY(),即可实现绕横轴、纵轴旋转
perspective 属性用来定义透视强度,可以理解为“人眼到舞台的距离”单位是 px
一定记住,空间移动要添加在 3D 旋转之后
transform: rotateX(30deg) translateX(30px) translateZ(100px);
CSS3 新增 transition,自动添加补间动画,从 IE10 开始兼容,内存开销小
transition: 需要过渡的属性 动画时长 速度变化曲线 延迟时间;
哪些属性可以参加过渡:
所有数值类型的属性都可以参加过渡,比如 width、height、left、top、bofder-radius 等
背景颜色和文字颜色都可以参加过渡
所有变形(2D、3D)
网站https://cubic-bezier.com 可以生成贝塞尔曲线,自定义动画缓动参数
动画的定义:
可以使用@keyframes 来定义动画,keyframes 表示“关键帧”,在项目上线前,要补上@-webkit-这样的私有前缀
@keyframes r {
// 动画的名字
from {
// 初始状态
transform: rotate(0);
}
to {
// 结束状态
transform: rotate(360deg);
}
}
/* 调用动画 */
animation: r 1s linear 0s 可选次数; // 如果希望永远执行填写infinite
如果需要动画偶数次自动逆向执行,加上 alternate 参数即可。
animation: movelr 2s linear 0s infinite alternate;
如果需要动画停在最后结束状态,加 forwards
animation: movelr 2s linear 0s forwards;
offsetWidth = 内容宽度+内边距+边框
当设置了box-sizing:border-box
时 设置的 width 就等于 offsetWidth(一个元素的总宽度)
margin 负值:
margin-top 和 margin-left 负值,元素向上、向左移动
margin-right 负值,右侧元素左移,元素自身不受影响
margin-bottom 负值,下方元素上移,自身不受影响
圣杯布局和双飞翼布局的目的:
三栏布局,中间一栏最先加载和渲染,两侧内容固定,中间内容随宽度自适应,一般用于 PC 网页
// 圣杯 .container
父元素,设置padding-left是left的宽度、padding-right是right的宽度
设置最小宽度两个padding和一个盒子的 center 宽度100% left 宽度固定px
margin-left:-100%
这里是父元素的宽度哦,这样它就移动到和center同样的位置了。然后再设置position:relative
right:left的宽度 right 宽度固定px margin-right:-自身宽度 相当于它没有宽度了
全部float:left // 双飞翼 center with100%
【它里面有个wrap无float,左右margin是下面两个的宽】 left 固定宽
margin-left:-100% right 固定宽 margin-left:-自身宽度 所有float:left
clearfix 清除浮动,写在有浮动的父元素中,用来封住浮动
.clearfix::after{ content:''; display:table; clear:both; } .clearfix{ *zoom:1;
兼容IE低版本 }
一些题目:
FC - Formatting Context,元素在标准流里面都是属于一个 FC 的
块级元素都是在 BFC 中布局的。行内元素在 IFC。
BFC 可以看作是一个独立的容器,其中的元素布局和渲染遵循特定的规则,与外部的元素相互独立。
MDN 上整理出在哪些具体的情况下会创建 BFC:
根元素(html)
浮动元素(元素的 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(分别是 HTML table、row、tbody、thead、tfoot 的默认属性)或 inline-table)
overflow 计算值(Computed)不为 visible 的块元素
弹性元素(display 为 flex 或 inline-flex 元素的直接子元素)
网格元素(display 为 grid 或 inline-grid 元素的直接子元素)
display 值为 flow-root 的元素
BFC 的作用:
在 BFC 中,box 会在垂直方向上一个挨着一个的排布
垂直方向的间距由 margin 属性决定
在同一个 BFC 中,相邻两个 box 之间的 margin 会折叠
在 BFC 中,每个元素的左边缘是紧挨着包含块的左边缘
1.解决 margin 折叠问题,让两个 box 所属于不同的 BFC 即可。 2.解决浮动高度塌陷(但不能解决绝对定位元素的高度塌陷),事实上要使用 BFC 解决高度塌陷需要满足两个条件:
浮动元素的父元素触发 BFC,形成独立的块级格式化上下文
浮动元素的父元素的高度是 auto(默认就是 auto)
原因解析,根据官方文档所述,当 BFC 的高度是 auto 时,它的高度是如下计算的: 1.如果子元素只有 inline-level,它的高度是行高的顶部和底部的距离 2.如果有 block-level,它的高度是由最底层的块上边缘和下边缘之间的距离 3.如果子元素是绝对定位元素,它的高将被忽略 4.如果有浮动元素,那么增加高度以包含这些浮动元素的下边缘
CSS3 并不是一个单一的规范,而是一系列独立模块的集合,这些模块扩展了 CSS 的功能。
选择器:属性选择器、结构性伪类(nth-child、nth-last-child、first-of-type)
背景和边框:边框图片(border-image 允许使用图片创建边框)、多重背景(在单个元素上使用多个背景图片)
文本效果:文本阴影(text-shadow)、文本溢出(text-overflow)
转换和动画:2D/3D 转换(transform)、CSS 动画(animation)
通常会采取哪些措施来确保网站或者应用在不同浏览器上的兼容性?
在现代工程化的开发架构下,大多数的浏览器兼容性问题是通过工程化中的配置项来解决的。
比如 browserslist 可以配置目标的浏览器或者 node 环境,然后在不同的工具中起作用。比如 autoprefixer/babel/postcss-preset-env 等,在进行正确配置后,打包时会自动根据目标环境添加 css 前缀、babel 代码转换等。
如果我们想要额外的适配,通常在项目中还会引入 normalize.css 和 polyfills 来添加特定的 CSS、JS 适配问题
还有一些针对移动端的比如移动端点击 300 毫秒延迟、移动端 1px 边框问题,都可以在特定的环境或需求下解决。
多查询 caniuse 网站
使用比如 BrowserStack 来测试
当我们浮动多个盒子时,为了让盒子有间距通常 margin-right,但因为最右侧的盒子也有外边距,就导致一行放不下,此时我们可以在所有盒子外面包一层并设置 margin-right 负值即可。
z-index 生效的条件需要元素的 position 属性设置为 absolute、fixed 或 relative
编码时可参考凹凸实验室代码规范:https://guide.aotu.io/
类名:公共类使用_
隔开单词,专属类使用-
隔开单词。
meta 标签有 charset(字符编码)、http-equiv、name 三种属性。
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
作用:
告知 IE 浏览器去模仿哪一个浏览器的行为
IE=edge,告知 IE8 去使用最高有效模式来模仿
name 属性值很多,具体可查看 MDN 文档
white-space 用于设置空白处理和换行规则。
text-overflow 用于设置文本溢出时行为,生效前提是 overflow 不为 visible
CSS 中的函数
比如常见的:rgb/rgba/translate/rotate/scale 等
还有一些:var 定义变量 /calc 计算 css 值 / blur 毛玻璃效果 / gradient 颜色渐变
媒体查询,提供给开发者针对不同设备需求进行定制化开发的一个接口。
物理像素(又称设备像素)
屏幕的硬件属性,每个像素都是一个真实的物理像素点
逻辑像素(又称设备独立像素)
因为不同屏幕的物理像素不同,操作系统为开发者抽象出的概念,便于开发。
CSS 像素
默认等于逻辑像素,可通过 screen.width 和 screen.height 获取电脑的逻辑像素
DPR
device pixel ratio 设备像素比,物理像素 / 逻辑像素 在 iPhone 的高清显示屏中这个比例可能是 2 或者 3。可通过 window.devicePixelRatio 获取
视口 viewport,在浏览器中可以看到的区域就是视口,fixed 就是相对视口定位的,在 PC 端中,不需要对视口进行区分,因为布局视口和视觉视口是同一个。
默认情况下,移动端的布局视口会大于视觉视口
在移动端可以将视口分为三种情况:布局视口、视觉视口、理想视口(概念来自 ppk)
https://www.quirksmode.org/mobile/viewports2.html
默认情况下,一个在 PC 端的网页在移动端会按照宽度 980px 来布局内容(布局视口),然后为了显示整个页面,它会将整个网页缩放。
当布局视口=视觉视口时,就是理想视口
为什么在移动端使用@2x、@3x 的图片?
有很多高分辨率的设备,比如 iphone15promax,为了适应不同的像素密度,UI 会提过多个版本的图像资源
@1x 基本尺寸、@2x 适用于 DPR=2 的设备、@3x 适用于 DPR=3 的设备
可通过媒体查询来设置不同的图像。
/* 针对2x屏幕 */
@media only screen and (min-device-pixel-ratio: 2) {
.box {
}
}
/* 针对3x屏幕 */
@media only screen and (min-device-pixel-ratio: 3) {
.box {
}
}
-webkit-min-device-pixel-radio 的问题:非标准特性,不建议生产环境使用。(MDN)
推荐使用另一个特性:resolution
resolution 媒体特性是 CSS 标准中用于查询设备显示密度的推荐方式
它支持多种单位,我们通常使用 dppx,1dppx 就相当于 1 逻辑像素对应一个物理像素。
/* 针对2x屏幕 */
@media only screen and (min-resolution: 2dppx) {
.box {
}
}
/* 针对3x屏幕 */
@media only screen and (min-resolution: 3dppx) {
.box {
}
}
移动端适配的目的是让页面元素,能够根据屏幕的大小而动态改变自身的大小,让整体比例相同。
常用的一些方案:rem 单位+动态 html 的 font-size、vw 单位、flex 弹性布局
// lib-flexible
// 拿到屏幕宽度(理想视口)html.clientWidth
window.addEventListener("resize", function () {
// htmlFontSize = 屏幕宽度 / 10
});
推荐使用 webpack 插件:postcss-pxtorem
记得把根元素字体大小配置成设计稿/10 例如 75px 这样配合动态修改 htmlFontSize 就可实现与设计稿同样效果
10vw 就等于 75px,就可以省略 lib-flexible 的操作。
既然 vw 单位可用,那就不需要再使用 rem 单位。
推荐使用 webpack 插件:postcss-px-to-viewport-8-plugin
vscode 插件需要配置设计稿尺寸(cssrem)
在开发底部 tabbar 时,手机底部可能存在“安全区域”。通过 env(safe-area-inset-bottom)拿到,叠加底部 tabbar 高度。
什么是 1px 问题,如何解决,如何画出 0.5px 边框?
在移动端的设计稿中,通常宽度是 750px,设计稿中的 1px 在 375px 的设备内,应该是 0.5px
但是如果直接设置 0.5px 的话,一些设备特别是旧版本浏览器是不支持的。
目前常见的两种解决方式:
1.viewport+rem+div(淘宝)不推荐 2.伪类+transform(京东)推荐
.box {
width: 100px;
height: 100px;
position: relative;
}
.box::before {
content: "";
position: absolute;
left: 0;
top: 0;
width: 200%;
height: 200%;
border: 1px solid #000;
transform-origin: 0 0;
transform: scale(0.5);
}
移动端的一些事件:Touch 事件 touchstart touchmove touchend touchcancel
手势库:hammers.js
touch 事件点击穿透:原因就是 touch 事件会立刻触发而 click 会延迟 100 毫秒左右
解决方案,让遮罩层不要立即消失 ,消失的时候可以添加动画
click 事件 300ms 延迟:原因:double-tap to zoom
双击缩放解决方案:
1 不使用 click 事件,把 click 事件中要处理的放到 touchstart 或 touchend 中做
2 touch-action:manipulation
3 写完整 viewport,新的浏览器基本都支持了
<meta
name="viewport"
content="width=device-width,initial-scale=1.0,minimum-scale=1,maximum-scale=1,user-scalable=no"
/>
4 针对老版本浏览器使用 Fastclick 库
css 预处理器 Less
@xxx 变量
& and 符号 代表当前选择器父级
mixins,还可以像 js 一样传参,并有参数默认值
.b_border(@bWidth:2px) {
border: @bWidth solid #ccc;
}
.box {
width: 100px;
height: 100px;
.b_border(4px);
}
.box2 {
width: .box() [width] // 拿某一个属性,比如宽度
;
}
继承:与 mixins 相比,继承代码最终会转化成并集选择器
.bordered {
border-bottom: 1px solid #ccc;
}
.box {
&:extend(.bordered);
}
// 转化成css代码后是并集选择器的状态
.bordered,
.box {
border-bottom: 1px solid #ccc;
}
Less 内置函数:
.box {
color:color(red) // 将red转换成RGB的值
width:convert(100px, "in") // 单位转换 px 转 in
font-size:ceil(18.5px) // 数学 向上取整 19px
}
作用域,变量向上查找。
导入,和 css 一样的。
flex 有两个重要的概念:
开启 flex 布局的元素叫 flex 容器 flex container
flex 里面的直接子元素叫 flex item
现象解释:flex 容器中的 item 自动将高度拉伸至容器高度,因为容器默认 align-items 的值为 normal,效果就等于 stretch(伸展)
flex item 是受 flex container 属性的设置来进行控制和布局,flex item 不再严格区分块级元素和行内元素,flex item 默认包裹内容,可设置宽高。
容器属性:
flex-direction 设置主轴方向,默认 row。从左往右横向。其他可选 row-reverse、column、column-reverse
flex-wrap 设置子元素是否可换行,默认 nowrap,可选 wrap、wrap-reverse
flex-flow 是上面两个属性的简写,任意顺序并且都可省略。
justify-content 设置子元素在主轴上的对齐方式,默认 flex-start 和主轴开始处对齐,可选 flex-end、center、space-between、space-around、space-evenly
align-items 设置子元素在交叉轴的对齐方式,具体可选参数可见图:
align-content 设置多行子元素在交叉轴上的对齐方式,与justify-content类似
子元素属性:
order 设置 item 的顺序,可设置任意整数,越小越靠前
align-self 设置单独子元素在交叉轴的对齐方式,可覆盖容器的 align-items
flex-grow 设置子元素如何拉伸,当在主轴上有空余空间时有效。
flex-shrink 默认值 1,决定子元素如何缩小,当子元素在主轴上的宽度超过了主轴长度才有效。值为 0 不压缩
flex-basis 用于设置元素在主轴方向上的基础尺寸,默认 auto
flex 是上方三个属性的缩写。 * 单值:当值是一个无单位的数字,会被当作 grow 的值,当值是一个有效宽度时,会被当作 basis 的值。none 时相当于 0 0 auto,auto 相当于 1 1 auto
grid 概念
grid container 容器
grid item (grid cell) 容器的直接子元素(又称单元格)
grid line (网格线)
grid track 两条相邻网格线之间的空间
grid area 由四条网格线包围的空间,比单元格的范围更广。
grid container 常用属性:
display
grid-template-columns
grid-template-rows
grid-template-areas
grid-template
grid-column-gap
grid-row-gap
grid-gap
justify-items
align-items
place-items
justify-content
align-content
place-content
grid-auto-columns
grid-auto-rows * grid-auto-flow
grid
grid item 常用属性:
grid-column-start
grid-column-end
grid-row-start
grid-row-end
grid-column
grid-row
grid-area
justify-self
align-self
place-self
fr 是分配剩余可用空间 auto 先于 fr 计算,获取必要的最小空间 repeat()简化重复的值