【CSS】CSS3从入门到深入(复习查漏向
CSS3从入门到深入(复习查漏向
pre_section
CSS:层叠样式表,决定网页表现
网页为多层结构,CSS为每一层设置样式,最后显示最上一层
CSS语句 = 选择器 + 声明块
形式
内联样式
style="CSS语句"
作为标签属性,仅本标签可以使用内部样式表
head标签
中使用style标签+CSS语句
,仅当前文件可以使用外部样式表
CSS语句作为独立文件,HTML需要使用时通过
<link rel="stylesheet" href="CSS文件位置">
常用选择器
元素选择器
根据标签选择元素,如,
p{}、h1{}、div{}
id选择器
根据
id
属性值选择元素,如,#key{}
类选择器
根据
class
属性选择元素,如,.key{}
通配选择器
全部元素,
*{}
属性选择器
[attribute=value]
,attribute
为value
的元素[attribute^=value]
,attribute
以value
开头的元素[attribute$=value]
,attribute
以value
结尾的元素[attribute*=value]
,attribute
含有value
的元素xx[attribute]
,含有attribute
的xx
元素
复合选择器
交集选择器
div.class
,div
标签的有class
的元素分组选择器
key1,key2
多个选择器如果相同则组合
关系选择器(父子祖先关系
子元素选择器
div > span{}
后代选择器
div span{}
兄弟选择器
p + span{}
p
下一个span
元素p ~ span{}
p
下面所有span
元素
伪类选择器
:first-child
第一个且是某个标签的元素
:last-child
最后一个且是某个标签的元素
xx:only-child
选择xx
是其他元素的唯一孩子
:nth-child(n,2n,2n+1,even,odd)
第n个且是某个标签的元素
相对元素的所有子元素中的指定位置
:first-of-type
第一个是某个标签的元素
xx xxx:only-of-type
选择xx
内存在xxx
唯一的元素
相对所有指定类型的指定位置
xx:empty
无后代的xx
标签
xx:not(选择器kk)
除kk
以外的xx
元素
伪元素选择器
::first-letter
第一个字母
::first-line
第一行
::selection
选中部分
::before
元素开始,结合content
属性
::after
元素结束,结合content
属性
超链接选择器
a:link{}
链接未访问过的
a:visited{}
链接访问过的
a:hover{}
鼠标移入时
a:active{}
链接点击未释放时
建议顺序:LVHA
选择器练习
选择器优先级
选择器 | 权重 |
---|---|
内联样式 | 1000 |
id 选择器 |
0100 |
类 伪类 选择器 |
0010 |
元素选择器 | 0001 |
通配选择器 | 0000 |
继承样式 | 无 |
比较优先级时会将选择器权重累加,如div#id > #id,(但始终不会越级
同等优先级后者有效
声明块
长度单位
像素px
:固定像素点数,20px
百分比:相对于父元素属性的百分比
em
:$ \text(x)em = \text(x)*fontsize(父) px$
rem
:$ \text(x)em = \text(x)*fontsize() px$
颜色单位
颜色英文名:red
···
RGB值:rgb(255,255,255)-白
RGBA值:rgb+不透明度
,rgb(255,255,255,255)
16进制:rgb
16进制表示,#xxyyzz
HSL值:hsl(277,50%,50%)
,H:色相(0 - 360)
,S:饱和度(0% - 100%)
,L:亮度(0% - 100%)
盒子模型
CSS将任何元素视为矩形,盒子由内容区(content)
、内边距(padding)
、边框(border)
、外边距(margin)
内容区由width
和height
决定
边框(border-width
、border-color
、border-style
)
border-width
:默认3px
border-color
:默认黑色
border-style
:线性solid
、点状虚线dotted
、线状虚线dashed
、双线double
或 border: 10px red solid
内边距
与边框和内容区共同决定可见区大小,背景颜色会延伸至内边距上
padding: xx xx xx xx
外边距
margin-top
- 上外边距,设置一个正值,元素会向下移动
margin-right
- 默认情况下设置margin-right不会产生任何效果
margin-bottom
- 下外边距,设置一个正值,其下边的元素会向下移动
margin-left
- 左外边距,设置一个正值,元素会向右移动
margin - 类似于 padding
- margin也可以设置负值,如果是负值则元素会向相反的方向移动
外边距不会影响盒子可见框的大小,margin会影响到盒子实际占用空间
水平布局
元素的水平方向的布局:
元素在其父元素中水平方向的位置由以下几个属性共同决定
margin-left
border-left
padding-left
width
padding-right
border-right
margin-right
一个元素在其父元素中,水平布局必须要满足以下的等式
margin-left+border-left+padding-left+width+padding-right+border-right+margin-right = 其父元素内容区的宽度 (必须满足)
- 如果相加结果使等式不成立,则称为过度约束,则等式会自动调整
- 调整的情况:
- 如果这七个值中没有为 auto 的情况,则浏览器会自动调整margin-right值以使等式满足
- 这七个值中有三个值和设置为auto
width
margin-left
maring-right
- 如果某个值为auto,则会自动调整为auto的那个值以使等式成立
- 如果将一个宽度和一个外边距设置为auto,则宽度会调整到最大,设置为auto的外边距会自动为0
- 如果将三个值都设置为auto,则外边距都是0,宽度最大
- 如果将两个外边距设置为auto,宽度固定值,则会将外边距设置为相同的值
垂直布局
子元素是在父元素的内容区中排列的,
如果子元素的大小超过了父元素,则子元素会从父元素中溢出
使用 overflow 属性来设置父元素如何处理溢出的子元素
可选值:
visible 默认值 子元素会从父元素中溢出,在父元素外部的位置显示
hidden 溢出内容将会被裁剪不会显示
scroll 生成两个滚动条,通过滚动条来查看完整的内容
auto 根据需要生成滚动条
overflow: auto
margin折叠
垂直外边距的重叠(折叠)
- 相邻的垂直方向外边距会发生重叠现象
- 兄弟元素
- 兄弟元素间的相邻垂直外边距会取两者之间的较大值(两者都是正值)
- 特殊情况:
如果相邻的外边距一正一负,则取两者的和
如果相邻的外边距都是负值,则取两者中绝对值较大的
- 父子元素
- 父子元素间相邻外边距,子元素的会传递给父元素(上外边距)
行内元素盒模型
行内元素的盒模型
- 行内元素不支持设置宽度和高度
- 行内元素可以设置padding,但是垂直方向padding不会影响页面的布局
- 行内元素可以设置border,垂直方向的border不会影响页面的布局
- 行内元素可以设置margin,垂直方向的margin不会影响布局
display 用来设置元素显示的类型
可选值:
inline 将元素设置为行内元素
block 将元素设置为块元素
inline-block 将元素设置为行内块元素
行内块,既可以设置宽度和高度又不会独占一行
table 将元素设置为一个表格
none 元素不在页面中显示
visibility 用来设置元素的显示状态
可选值:
visible 默认值,元素在页面中正常显示
hidden 元素在页面中隐藏 不显示,但是依然占据页面的位置
box-sizing 盒子大小
默认情况下,盒子可见框的大小由内容区、内边距和边框共同决定
box-sizing 用来设置盒子尺寸的计算方式(设置width和height的作用)
可选值:
content-box 默认值,宽度和高度用来设置内容区的大小
border-box 宽度和高度用来设置整个盒子可见框的大小
width 和 height 指的是内容区 和 内边距 和 边框的总大小
即 width*height就是整个盒子大小
盒子轮廓圆角及阴影
轮廓:
outline 用来设置元素的轮廓线,用法和border一模一样
轮廓和边框不同的点,就是轮廓不会影响到可见框的大小
阴影:
box-shadow 用来设置元素的阴影效果,阴影不会影响页面布局
box-shadow: 10px 10px 10px 颜色
第一个值 水平偏移量 设置阴影的水平位置 正值向右移动 负值向左移动
第二个值 垂直偏移量 设置阴影的水平位置 正值向下移动 负值向上移动
第三个值 阴影的模糊半径
第四个值 阴影的颜色
圆角:
border-radius: 用来设置圆角 圆角设置的圆的半径大小
border-top-left-radius:
border-top-right-radius
border-bottom-left-radius:
border-bottom-right-radius:
border-top-left-radius:50px 100px;
border-radius 可以分别指定四个角的圆角
四个值 左上 右上 右下 左下
三个值 左上 右上/左下 右下
两个个值 左上/右下 右上/左下
border-radius: 20px / 40px; 设置椭圆 //横向 - 纵向
将元素设置为一个圆形
border-radius: 50%;
浮动
通过浮动可以使一个元素向其父元素的左侧或右侧移动
使用 float 属性来设置于元素的浮动
可选值:
none 默认值 ,元素不浮动
left 元素向左浮动
right 元素向右浮动
注意,元素设置浮动以后,水平布局的等式便不需要强制成立
元素设置浮动以后,会完全从文档流中脱离,不再占用文档流的位置,
所以元素下边的还在文档流中的元素会自动向上移动
浮动的特点:
1、浮动元素会完全脱离文档流,不再占据文档流中的位置
2、设置浮动以后元素会向父元素的左侧或右侧移动,
3、浮动元素默认不会从父元素中移出
4、浮动元素向左或向右移动时,不会超过它前边的其他浮动元素
5、如果浮动元素的上边是一个没有浮动的块元素,则浮动元素无法上移
6、浮动元素不会超过它上边的浮动的兄弟元素,最多最多就是和它一样高
脱离文档流的特点:
块元素:
1、块元素不在独占页面的一行
2、脱离文档流以后,块元素的宽度和高度默认都被内容撑开
行内元素:
行内元素脱离文档流以后会变成块元素,特点和块元素一样
另外,CSS貌似默认会将字体独立出来,效果同块元素特性
可结合上图分析
浮动的高度坍塌及BFC
高度塌陷的问题:
在浮动布局中,父元素的高度默认是被子元素撑开的,
当子元素浮动后,其会完全脱离文档流,子元素从文档流中脱离
将会无法撑起父元素的高度,导致父元素的高度丢失
父元素高度丢失以后,其下的元素会自动上移,导致页面的布局混乱
BFC(Block Formatting Context) 块级格式化环境
- BFC是一个CSS中的一个隐含的属性,可以为一个元素开启BFC
开启BFC该元素会变成一个独立的布局区域
- 元素开启BFC后的特点:
1.开启BFC的元素不会被浮动元素所覆盖
2.开启BFC的元素子元素和父元素外边距不会重叠
3.开启BFC的元素可以包含浮动的子元素
- 可以通过一些特殊方式来开启元素的BFC:
1、设置元素的浮动(不推荐)
2、将元素设置为行内块元素(不推荐)
3、将元素的overflow设置为一个非visible的值
- 常用的方式 为元素设置 overflow:hidden 开启其BFC 以使其可以包含浮动元素
clear
如果我们不希望某个元素因为其他元素浮动的影响而改变位置,
可以通过clear属性来清除浮动元素对当前元素所产生的影响
clear
- 作用:清除浮动元素对当前元素所产生的影响
- 可选值:
left 清除左侧浮动元素对当前元素的影响
right 清除右侧浮动元素对当前元素的影响
both 清除两侧中最大影响的那侧
原理:
设置清除浮动以后,浏览器会自动为元素添加一个上外边距,
以使其位置不受其他元素的影响
防止高度坍塌的最优法
高度塌陷块选择器::after{
content: '';
clear: both;
display: block;
}
// 推荐-经典
.clearfix::before,
.clearfix::after{
content: '';
display: table;
clear: both;
}
只需在需要防止度塌陷和外边距重叠的元素加上这个类 - clearfix
定位-position
定位(position)
- 定位是一种更加高级的布局手段
- 通过定位可以将元素摆放到页面的任意位置
- 使用position属性来设置定位
可选值:
static 默认值,元素是静止的没有开启定位
relative 开启元素的相对定位
absolute 开启元素的绝对定位
fixed 开启元素的固定定位
sticky 开启元素的粘滞定位
偏移量(offset)
left - right - top - bottom
相对定位
相对定位: position: relative;
- 相对定位的特点:
1.元素开启相对定位以后,如果不设置偏移量元素不会发生任何的变化
2.相对定位是参照于元素在文档流中的位置进行定位的
3.相对定位会提升元素的层级
4.相对定位不会使元素脱离文档流
5.相对定位不会改变元素的性质块还是块,行内还是行内
包含块
包含块( containing block )
- 正常情况下:
包含块就是离当前元素最近的祖先块元素
- 绝对定位的包含块:
包含块就是离它最近的开启了定位的祖先元素,
如果所有的祖先元素都没有开启定位则根元素就是它的包含块
- html(根元素、初始包含块)
绝对定位
绝对定位: position: absolute;
-绝对定位的特点:
1.开启绝对定位后,如果不设置偏移量元素的位置不会发生变化
2.开启绝对定位后,元素会从文档流中脱离
3.绝对定位会改变元素的性质,行内变成块,块的宽高被内容撑开
4.绝对定位会使元素提升一个层级
5.绝对定位元素是相对于其包含块进行定位的
固定定位
固定定位: position: fixed;
- 固定定位也是一种绝对定位,所以固定定位的大部分特点都和绝对定位一样
唯一不同的是固定定位永远参照于浏览器的视口进行定位
固定定位的元素不会随网页的滚动条滚动
粘滞定位
粘滞定位: position: sticky;
- 粘滞定位和相对定位的特点基本一致,
不同的是粘滞定位可以在元素到达某个位置时将其固定
如:
position: sticky;
top: 10px;
定位下布局规则
水平布局
left + margin-left + border-left + padding-left + width +
padding-right + border-right + margin-right + right = 包含块父元素的内容区的宽度
当发生过度约束:
如果9个值中没有 auto 则自动调整right值以使等式满足
如果有auto,则自动调整auto的值以使等式满足
- 可设置auto的值
margin width left right
- 因为left 和 right的值默认是auto,所以如果不指定left和right
则等式不满足时,会自动调整这两个值
垂直方向布局的等式的也必须要满足
top + margin-top/bottom + padding-top/bottom + border-top/
bottom + height = 包含块的高度
定位下层级
对于开启了定位元素,可以通过z-index属性来指定元素的层级
z-index需要一个整数作为参数,值越大元素的层级越高
元素的层级越高越优先显示
如果元素的层级一样,则优先显示靠下的元素
祖先的元素的层级再高也不会盖住后代元素
字体-font
color 字体颜色
font-size 字体大小
相关单位
em 相当于当前元素的一个font-size
rem 相对于根元素的一个font-size
font-family 字体族(字体的格式)
serif 衬线字体
sans-serif 非衬线字体
monospace 等宽字体
- 指定字体的类别,浏览器会自动使用该类别下的字体
- font-family 可以同时指定多个字体,多个字体间使用,隔开
字体生效时优先使用第一个,第一个无法使用则使用第二个 以此类推
===========================
@font-face {
/* 指定字体的名字 */
font-family:'myfont' ;
/* 服务器中字体的路径 */
src: url('···'); //format("truetype")
}
引用: font-family: myfont;
line height
- 行高指的是文字占有的实际高度
- 可以通过line-height来设置行高
行高可以直接指定一个大小(px em)
也可以直接为行高设置一个整数
如果是一个整数的话,行高将会是字体的指定的倍数
- 行高经常还用来设置文字的行间距
行间距 = 行高 - 字体大小
字体框
- 字体框就是字体存在的格子,设置font-size实际上就是在设置字体框的高度
行高会在字体框的上下平均分配
font: font-weight font-style font-size/font-height font-family
font-weight 字重 字体的加粗
可选值:
normal 默认值 不加粗
bold 加粗
100-900 九个级别 ···
font-style 字体的风格
normal 正常的
italic 斜体 ···
文本
text-align 文本的水平对齐
可选值:
left 左侧对齐
right 右对齐
center 居中对齐
justify 两端对齐
vertical-align 设置元素垂直对齐的方式(子元素相对父元素
可选值:
baseline 默认值 基线对齐
top 顶部对齐
bottom 底部对齐
middle 居中对齐
img{
vertical-align: !baseline; //消除底部缝隙
}
text-decoration 设置文本修饰
可选值:
none 什么都没有
underline 下划线
line-through 删除线
overline 上划线
text-decoration: overline red dotted;
white-space 设置网页如何处理空白
可选值:
normal 正常
nowrap 不换行
pre 保留空白
overflow: hidden;
text-overflow: ellipsis;
背景
background-color 设置背景颜色
background-image 设置背景图片
- 可以同时设置背景图片和背景颜色,这样背景颜色将会成为图片的背景色
- 如果背景的图片小于元素,则背景图片会自动在元素中平铺将元素铺满
- 如果背景的图片大于元素,将会一个部分背景无法完全显示
- 如果背景图片和元素一样大,则会直接正常显示
background-repeat 用来设置背景的重复方式
可选值:
repeat 默认值 , 背景会沿着x轴 y轴双方向重复
repeat-x 沿着x轴方向重复
repeat-y 沿着y轴方向重复
no-repeat 背景图片不重复
background-position 用来设置背景图片的位置
设置方式:
通过 top left right bottom center 几个表示方位的词来设置背景图片的位置
使用方位词时必须要同时指定两个值,如果只写一个则第二个默认就是center
通过偏移量来指定背景图片的位置:
水平方向的偏移量 垂直方向变量
background-clip
可选值:
border-box 默认值,背景会出现在边框的下边
padding-box 背景不会出现在边框,只出现在内容区和内边距
content-box 背景只会出现在内容区
background-origin 背景图片的偏移量计算的原点
padding-box 默认值,background-position从内边距处开始计算
content-box 背景图片的偏移量从内容区处计算
border-box 背景图片的变量从边框处开始计算
background-size 设置背景图片的大小
第一个值表示宽度
第二个值表示高度
- 如果只写一个,则第二个值默认是 auto
cover 图片的比例不变,将元素铺满
contain 图片比例不变,将图片在元素中完整显示
===========================
background-color
background-image
background-repeat
background-position
background-size
background-origin
background-clip
background-attachment
- backgound 背景相关的简写属性,所有背景相关的样式都可以通过该样式来设置
并且该样式没有顺序要求,也没有哪个属性是必须写的
注意:
background-size必须写在background-position的后边,并且使用/隔开
background-position/background-size
background-origin background-clip 两个样式 ,orgin要在clip的前边
渐变
线性渐变
linear-gradient()
linear-gradient(red,yellow) 红色在开头,黄色在结尾,中间是过渡区域
- 线性渐变的开头,我们可以指定一个渐变的方向
to left
to right
to bottom
to top
deg deg表示度数
turn 表示圈
- 渐变可以同时指定多个颜色,多个颜色默认情况下平均分布,
也可以手动指定渐变的分布情况
repeating-linear-gradient() 可以平铺的线性渐变
// 例:
background-image: linear-gradient(red,yellow,#bfa,orange);
background-image: linear-gradient(red 50px,yellow 100px, green 120px, orange 200px);
background-image: repeating-linear-gradient(to right ,red, yellow 50px);
径向渐变
radial-gradient(大小 at 位置, 颜色 位置 ,颜色 位置 ,颜色 位置)
大小:
circle 圆形
ellipse 椭圆
closest-side 近边
closest-corner 近角
farthest-side 远边
farthest-corner 远角
位置:
top right left center bottom
//background-image: radial-gradient(farthest-corner at 100px 100px, red , #bfa)
表格样式
border-spacing: 指定边框之间的距离
border-spacing: 0px;
border-collapse: collapse; 设置边框的合并
如果表格中没有使用tbody而是直接使用tr,
那么浏览器会自动创建一个tbody,并且将tr全都放到tbody中
tr不是table的子元素
// 如:
tbody > tr:nth-child(odd){
background-color: #bfa;
}
过渡(transition)
- 通过过渡可以指定一个属性发生变化时的切换方式
- 通过过渡可以创建一些非常好的效果,提升用户的体验
transition-property: 指定要执行过渡的属性
多个属性间使用,隔开 如:transition-property: height , width;
如果所有属性都需要过渡,则使用all关键字
大部分属性都支持过渡效果,注意过渡时必须是从一个有效数值向另外一个有效数值进行过渡(ps: auto -> xx 过渡失效)
transition-duration: 指定过渡效果的持续时间
transition-timing-function: 过渡的时序函数
指定过渡的执行的方式
可选值:
ease 默认值,慢速开始,先加速,再减速
linear 匀速运动
ease-in 加速运动
ease-out 减速运动
ease-in-out 先加速 后减速
cubic-bezier() 来指定时序函数
https://cubic-bezier.com
steps() 分步执行过渡效果
可以设置第二个值:
end , 在时间结束时执行过渡(默认值)
start , 在时间开始时执行过渡
transition-delay: 过渡效果的延迟,等待一段时间后在执行过渡
transition 可以同时设置过渡相关的所有属性,只有一个要求,如果要写延迟,则两个时间中第一个是持续时间,第二个是延迟
例:transition:2s margin-left 1s cubic-bezier(.24,.95,.82,-0.88);
动画
动画和过渡类似,都可以实现动画效果
不同的是过渡需要在某个属性发生变化时才会触发
动画可以自动触发动态效果
# 关键帧
设置动画效果,必须先要设置一个关键帧,关键帧设置了动画执行每一个步骤
例:
@keyframes test {
/* from表示动画的开始位置 也可以使用 0% */
from{
margin-left: 0;
background-color: orange;
}
/* to动画的结束位置 也可以使用100%*/
to{
background-color: red;
margin-left: 700px;
}
}
# 给元素设置动画
animation-name: 要对当前元素生效的关键帧的名字
animation-duration: 动画的执行时间
animation-delay: 动画的延时
animation-timing-function: ease-in-out; 同过渡时序函数
animation-iteration-count:(n 次数|infinite 无限执行) 动画执行的次数
animation-direction 指定动画运行的方向
可选值:
normal 默认值 从 from 向 to运行 每次都是这样
reverse 从 to 向 from 运行 每次都是这样
alternate 从 from 向 to运行 重复执行动画时反向执行
alternate-reverse 从 to 向 from运行 重复执行动画时反向执行
animation-play-state: 设置动画的执行状态
可选值:
running 默认值 动画执行
paused 动画暂停
animation-fill-mode: 动画的填充模式
可选值:
none 默认值 动画执行完毕元素回到原来位置
forwards 动画执行完毕元素会停止在动画结束的位置
backwards 动画延时等待时,元素就会处于开始位置
both 结合了forwards 和 backwards
animation: name duration timing-function delay iteration-count direction fill-mode;
变形
变形指通过CSS来改变元素的形状或位置
- 变形不会影响到页面的布局,不会脱离文档流
transform 设置元素的变形效果
- 平移:
translateX() 沿着x轴方向平移
translateY() 沿着y轴方向平移
translateZ() 沿着z轴方向平移
- 平移元素,百分比是相对于自身计算的
- z轴平移,调整元素在z轴方向的位置,z轴平移属于立体效果(近大远小),默认情况下网页不支持透视,
可以通过设置网页的视距呈现效果,
/* 设置当前网页的视距为800px,即人眼距离网页的距离 */
perspective: 800px;
- 旋转:使元素沿着 x y 或 z 旋转指定的角度
rotateX()、rotateY()、rotateZ()
`n`deg `n`turn
transform: rotateY(180deg) translateZ(400px); 先转后平移
transform: translateZ(400px) rotateY(180deg); 先平移后转
- 缩放:对元素进行缩放
scaleX() 水平方向缩放
scaleY() 垂直方向缩放
scale() 双方向的缩放
transform-origin: 20px 20px; 变形的原点
默认:center
CSS预处理-less
# css原生也支持变量的设置
/* html根元素样式中设置变量 */
html{
--color:#ff0;
--length:200px;
}
变量使用:
/* calc()计算函数 */
width: calc(200px*2);
height: var(--length);
background-color: var(--color);
/* css原生变量设置兼容性差 */
# less是一门css的预处理语言
- less是一个css的增强版,通过less可以编写更少的代码实现更强大的样式
- 在less中添加了许多的新特性:像对变量的支持、对mixin的支持... ...
- less的语法大体上和css语法一致,但是less中增添了许多对css的扩展,
所以浏览器无法直接执行less代码,要执行必须向将less转换为css,然后再由浏览器执行
less语法
# 直接利用层级关系
body{
width: 100px;
height: 100px;
div{
color: red;
}
> .box{}
&:hover{} // &表示外层父元素名字,这里即 &=body
}
# 注释
/**/ 会被解析到css文件中
// less注释,不会解析到css文件中
# 变量
@color: red;
.box{
color: @color;
}
@classname: boxclass;
.@{classname}{
background-image: url("@{name}···");
}
div{
width: 300px;
height: $width;
}
# extend 扩展
.p1{
width: 100px;
height: 200px;
}
//:extend() 对当前选择器扩展指定选择器的样式(选择器分组)
.p2:extend(.p1){
color: red;
}
# mixin 混合
.p3{
//直接对指定的样式进行引用,这里就相当于将p1的样式在这里进行了复制
//mixin 混合
.p1();
}
// 在选择器后边添加一个括号,这时我们就创建了一个mixins:混合函数
.p4(){
width: 100px;
height: 100px;
}
.p5{
.p4;
}
//混合函数 在混合函数中可以直接设置变量
.test(@w:100px,@h:200px,@bg-color:red){
width: @w;
height: @h;
border: 1px solid @bg-color;
}
div{
//调用混合函数,按顺序传递参数
// .test(200px,300px,#bfa);
.test(300px);
// .test(@bg-color:red, @h:100px, @w:300px);
}
// less内部定义好的原生函数 ···
span{
color: average(red,blue);
}
span:hover{
background-color: darken(#bfa,50%);
}
# 运算
- 在less中所有的数值都可以直接进行运算( + - * / )
width: 100px + 100px;
height: 100px/2;
# 导入less进行合并
- import用来将其他的less引入到当前的less
@import "xxx.less";
# 配置less.map.css
- 将以下文件写入less配置文件settings.json中
"editor.minimap.enabled": true,
"less.compile": {
"compress": true, // true => remove surplus whitespace
"sourceMap": true, // true => generate source maps (.css.map files)
"out": true // false => DON'T output .css files (overridable per-file, see below)
}
flex-弹性盒
pre
flex是CSS3新的布局手段,兼容性比浮动差,但减少了很多浮动带来的问题
但随着微软首先提出放弃IE支持,相信以后前端会紧跟这种趋势,flex会用的越来越多
简介
flex使元素具有弹性,让元素可以跟随页面的大小的改变而改变
- 弹性容器
- 要使用弹性盒,必须先将一个元素设置为弹性容器
- 我们通过 display 来设置弹性容器
display:flex 设置为块级弹性容器
display:inline-flex 设置为行内的弹性容器
- 弹性元素
- 弹性容器的子元素是弹性元素(弹性项)
- 弹性元素可以同时是弹性容器
属性
# flex-direction 指定容器中弹性元素的排列方式
可选值:
row 默认值,弹性元素在容器中水平排列(左向右)
- 主轴 自左向右
row-reverse 弹性元素在容器中反向水平排列(右向左)
- 主轴 自右向左
column 弹性元素纵向排列(自上向下)
column-reverse 弹性元素方向纵向排列(自下向上)
主轴:
弹性元素的排列方向称为主轴
侧轴:
与主轴垂直方向的称为侧轴
# flex-grow 指定弹性元素的增长系数
- 当父元素有多余空间的时,子元素如何伸展
- 父元素的剩余空间,会按照比例进行分配
# flex-shrink 指定弹性元素的收缩系数
- 当父元素中的空间不足以容纳所有的子元素时,如果对子元素进行收缩
# flex-wrap:
设置弹性元素是否在弹性容器中自动换行
可选值:
nowrap 默认值,元素不会自动换行
wrap 元素沿着辅轴方向自动换行
wrap-reverse 元素沿着辅轴反方向换行
# flex-flow: wrap 和 direction 的简写属性
- flex-flow: row wrap;
# justify-content(主轴
- 如何分配主轴上的空白空间(主轴上的元素如何排列)
- 可选值:
flex-start 元素沿着主轴起边排列
flex-end 元素沿着主轴终边排列
center 元素居中排列
space-around 空白分布到元素两侧
space-between 空白均匀分布到元素间
space-evenly 空白分布到元素的单侧
# align-items(辅轴
- 元素在辅轴上如何对齐
- 元素间的关系
- 可选值:
stretch 默认值,将元素的长度设置为相同的值
flex-start 元素不会拉伸,沿着辅轴起边对齐
flex-end 沿着辅轴的终边对齐
center 居中对齐
baseline 基线对齐
# align-content: 辅轴空白空间的分布,属性类比justify-content
# align-self: 用来覆盖当前弹性元素上的align-items
# flex-basis 指定的是元素在主轴上的基础长度
如果主轴是 横向的 则 该值指定的就是元素的宽度
如果主轴是 纵向的 则 该值指定的是就是元素的高度
- 默认值是 auto,表示参考元素自身的高度或宽度
- 如果传递了一个具体的数值,则以该值为准
# flex 可以设置弹性元素所有的三个样式
flex 增长 缩减 基础;
initial "flex: 0 1 auto".
auto "flex: 1 1 auto"
none "flex: 0 0 auto" 弹性元素没有弹性
# order 决定弹性元素的排列顺序
移动端适配
pre
# 分辨率:1920 x 1080 屏幕中像素点的数量
# 物理像素,上述所说的点就属于物理像素
# CSS像素,编写网页时,我们所用像素都是CSS像素
- 浏览器在显示网页时,需要将CSS像素转换为物理像素然后再呈现
- 一个css像素最终由几个物理像素显示,由浏览器决定:
默认情况下在pc端,一个css像素 = 一个物理像素
# 视口(viewport)
- 视口就是屏幕中用来显示网页的区域
- 可以通过查看视口的大小,来观察CSS像素和物理像素的比值
例 - 默认情况下:
视口宽度 1920px(CSS像素)
1920px(物理像素)
- 此时,css像素和物理像素的比是 1:1
- 放大两倍的情况:
视口宽度 960px(CSS像素)
1920px(物理像素)
- 此时,css像素和物理像素的比是1:2
- 我们可以通过改变视口的大小,来改变CSS像素和物理像素的比值
完美适配
每一款移动设备设计时,都会有一个最佳的像素比
https://material.io/resources/devices/
设置视口大小 device-width表示设备的(完美视口)宽度
<meta name="viewport" content="width=device-width">
# vm、vh
100vw = 一个视口的宽度
1vw = 1%视口宽度
# rem
1 rem = 1 html的字体大小
响应式布局-RWD
RWD - 即网页可以根据不通的设备或窗口大小呈现出不同的效果
网页在不同设备上会响应式布局以呈现出最好的视觉效果。
# 媒体查询
语法: @media 查询规则{}
媒体类型:
all 所有设备
print 打印设备
screen 带屏幕的设备
speech 屏幕阅读器
- 可以使用,连接多个媒体类型,这样它们之间就是一个或的关系
可以在媒体类型前添加一个only,表示只有。
only的使用主要是为了兼容一些老版本浏览器
# 媒体特性:
width 视口的宽度
height 视口的高度
min-width 视口的最小宽度(视口大于指定宽度时生效)
max-width 视口的最大宽度(视口小于指定宽度时生效)
网格系统
# 设置
display: grid|inline-grid;
# 属性
网格列(Grid Columns)
网隔行(Grid Rows)
网格间隙(Grid Gaps)
- 设置网格间隙
grid-column-gap
grid-row-gap
grid-gap
网格行(Grid Lines)
- 设置网格元素大小范围
grid-column-start: 1;
grid-column-end: 3;
grid-row-start: 1;
grid-row-end: 3;
- 定义网格布局中的列数,并可定义每列的宽度
grid-template-columns
- 定义每列的高度
grid-template-rows
- 在容器内对齐整个网格
justify-content
- 垂直对齐容器内的整个网格
align-content
- 将元素放置在哪些列上
grid-column
- grid-column: 1 / 5; 第 1 列开始并在第 5 列之前结束
- grid-column: 1 / span 3; 第 1 列开始,并跨越 3 列
grid-row 同 grid-column
grid-area: grid-row-start、grid-column-start、grid-row-end 和 grid-column-end 属性的简写属性。
- grid-area: 1 / 2 / 5 / 6;
grid-area/grid-template-area 命名网格项
- grid-area: myArea;
- grid-template-areas: 'myArea myArea myArea myArea myArea';
- grid-template-areas: 'myArea myArea . . .';
- grid-template-areas:
'header header header header header header'
'menu main main main right right'
'menu footer footer footer footer footer';
元素顺序
grid-area: 1 / 3 / 2 / 4; row-start/column-start/row-end/column-end
计数器
counter-reset - 创建或重置计数器
counter-increment - 递增计数器值
content - 插入生成的内容
counter() 或 counters() 函数 - 将计数器的值添加到元素
示例
# example-1
body {
counter-reset: section;
}
h1::before {
counter-increment: section;
content: "Section " counter(section) ": ";
}
嵌套计数器
body {
counter-reset: section;
}
h1 {
counter-reset: subsection;
}
h1::before {
counter-increment: section;
content: "Section " counter(section) ". ";
}
h2::before {
counter-increment: subsection;
content: counter(section) "." counter(subsection) " ";
}
# 为页面(section)创建一个计数器,为每个 <h1> 元素(subsection)创建一个计数器。
【CSS】CSS3从入门到深入(复习查漏向的更多相关文章
- 《CSS权威指南》基础复习+查漏补缺
前几天被朋友问到几个CSS问题,讲道理么,接触CSS是从大一开始的,也算有3年半了,总是觉得自己对css算是熟悉的了.然而还是被几个问题弄的"一脸懵逼"... 然后又是刚入职新公司 ...
- 【JavaScript】JS从入门到深入(复习查漏向
[JavaScript]JS从入门到深入(复习查漏向 pre 精细得学过一遍JS后才发现,原来之前CTF中有些nodejs的题目以及一些游戏题的payload就变得很好理解了. 基础知识 ECMASc ...
- 【HTML】HTML5从入门到深入(复习查漏向
HTML5从入门到深入(复习查漏向 冷知识 万维网之始:第一个网站·蒂姆伯纳斯-李 HTML5 html5文档类型声明: 头部: <!doctype html> 字符集(charset): ...
- CSS基础面试题,快来查漏补缺
本文大部分问题来源:50道CSS基础面试题(附答案),外加一些面经. 我对问题进行了分类整理,并给了自己的回答.大部分知识点都有专题链接(来源于本博客相关文章),用于自己前端CSS部分的查漏补缺.虽作 ...
- CSS3基础入门03
CSS3 基础入门03 线性渐变 在css3当中,通过渐变属性实现之前只能通过图片实现的渐变效果.渐变分为线性渐变和径向渐变以及重复渐变三种.线性渐变的模式主要是颜色从一个方向过渡到另外一个方向,而径 ...
- CSS3基础入门02
CSS3 基础入门02 边框相关属性 border-radius 通过这个属性我们可以设置边框圆角,即可以将四个角设置为统一的圆角,也可以单独的设置具体的某一个角的圆角. grammer: borde ...
- CSS3基础入门01
CSS3 基础入门 01 前言 相对于css2来说,css3更新了很多的内容,其中包括选择器.颜色.阴影.背景.文本.边框.新的布局方案.2d.3d.动画等等. 而如果想要学习css3的诸多部分,不妨 ...
- HTML5+CSS3从入门到精通随书光盘 ISO 镜像视频教程
HTML5+CSS3从入门到精通(清华社“视频大讲堂”大系)通过基础知识+中小实例+综合案例的方式,讲述了用HTML5+ CSS3设计构建网站的必备知识,相对于权威指南.高级程序设计.开发指南同类图书 ...
- HTML5+CSS3从入门到精通 中文pdf版
HTML5+CSS3从入门到精通是通过基础知识+中小实例+综合案例的方式,讲述了用HTML5+ CSS3设计构建网站的必备知识,相对于专业指南.高级程序设计.开发指南同类图书,本书是一本适合快速入手的 ...
随机推荐
- 运用arcgis将标签图片(栅格图)转换为shp矢量文件
最近在做图像分割校正,需要将ecognition分割好的shp文件做优化,但是如果直接对shp文件修改非常不友好,可以先对导出的tif标签图进行修改,然后将修改后的标签图转换为新的shp文件进行输出. ...
- golang实现已知三角形三点坐标,求三角形面积
代码如下: func GetTriangleAreaByVector(x vector.Vector3,y vector.Vector3,z vector.Vector3) float64 { //根 ...
- imagemagick 之 Fred's ImageMagick Scripts 在Ubuntu 下的实践
Fred's ImageMagick Scripts 官网:http://www.fmwconcepts.com/imagemagick/index.php Windows 10 (64-bit) u ...
- Nodejs学习笔记(3) 创建服务器:Web 模块(http)与 express 框架
目录 参考资料 1. 使用 http 模块创建服务器 1.1 实现思路及代码 1.2 HTTP 结构 1.2.1 Request中的重要字段 1.2.2 Response 头信息:文件类型.状态码.连 ...
- 在C#中使用 CancellationToken 处理异步任务
在 .NET Core 中使用异步编程已经很普遍了, 你在项目中随处可见 async 和 await,它简化了异步操作,允许开发人员,使用同步的方式编写异步代码,你会发现在大部分的异步方法中,都提供了 ...
- 利用matplotlib和cmaps根据已有的colormap,重新定义colormap
算法网上这哥们总结的还可以[1] ,但是使用matplotlib自定义colormap自己掌握的还不够,写在这里 希望达到的目标 使用什么样的颜色,可以自己定义 方便的调用其他人的色标, 使用一部分c ...
- 通过《第一行代码》学习 Android 开发
第一行代码 Android --第 2 版-- 郭霖 著 第 1 章:开始启程--你的第一行 Android 代码 •1.2 手把手带你搭建开发环境 Android Studio 的安装及配置 A ...
- Day1---Java 基本数据类型 - 四类八种 --九五小庞
一.Java四大数据类型分类 1.整型 byte .short .int .long 2.浮点型 float . double 3.字符型 char 4.布尔型 boolean 二.八种基本数据类型 ...
- Kafka 消息存储机制
Kafka 消息以 Partition 作为存储单元,那么在 Partition 内消息是以什么样的格式存储的呢,如何处理 Partition 中的消息,又有哪些安全策略来保证消息不会丢失呢,这一篇我 ...
- SpringBoot+Dubbo+Zookeeper 实例
前言 当下Java 生态环境里面,微服务占据了非常大的份额,现在大部分新开发的 Java选型的后台程序都很奇妙的会跟微服务发生一些关系.那目前市面上主流的微服务方向主要有 Spring 家族推出的Sp ...