开启定时器
作用:
- 每隔一段时间调用这个函数
- 间隔时间单位是毫秒
setInterval(函数名,间隔时间)
// 注意:
1. 函数名字不需要加括号
2. 定时器返回的是一个id数字
关闭定时器
let 变量名 = setInterval(函数名,间隔时间)
clearInterval(变量名)
// 注意:
1. 函数名字不需要加括号
2. 定时器返回的是一个id数字
setInterval(函数名,间隔时间)
// 注意:
1. 函数名字不需要加括号
2. 定时器返回的是一个id数字
let 变量名 = setInterval(函数名,间隔时间)
clearInterval(变量名)
// 注意:
1. 函数名字不需要加括号
2. 定时器返回的是一个id数字
if(条件1){ //先判断条件1,若满足条件1则执行语句1,其他都不执行
语句1
} else if(条件2){ //条件1不满足则向下判断,若满足条件2则执行语句2,其他都不执行
语句2
} else if(条件3){ //依此类推
语句3
} else { //若以上条件都不满足,则执行else中的语句n
语句n
} //可以写N个条件
//条件 ? 满足条件执行的代码 : 不满足条件执行的代码
条件 ? 1 : 2
//结果为真返回1 为假返回2
switch (1) { //找到和小括号里!!全等!!的case值,并执行代码
case 1:
alert(1)
break
case 2:
alert(2)
break
case 3:
alert(3)
break
default: //若没找到,则执行default里的代码
alert("没有数据")
}
number
数字型string
字符串型boolean
布尔型undefined
未定义型null
空类型null 和 undefined 区别:
undefined
表示没有赋值null
表示赋值了,但是内容为空null 开发中的使用场景:
官方解释:把 null
作为尚未创建的对象
大白话: 将来有个变量里面存放的是一个对象,但是对象还没创建好,可以先给个
null
object
对象function
函数array
数组//查看数据类型
typeof 值
//typeof运算符的返回类型为字符串,值包括如下几种:
1. 'undefined' --未定义的变量或值
2. 'boolean' --布尔类型的变量或值
3. 'string' --字符串类型的变量或值
4. 'number' --数字类型的变量或值
5. 'object' --对象类型的变量或值,或者null(这个是js历史遗留问题,将null作为object类型处理)
6. 'function' --函数类型的变量或值
+
号两边只要有一个是字符串,都会把另外一个转成字符串+
以外的算术运算符 比如 -
*
/
等都会把数据转成数字类型+
号作为正号解析可以转换成Number
let a = 124144
String(a)
a.toString(进制) //括号内填写进制数
Number('21')
parseInt('10.12234') //10 转换为数字型 只保留整数部分
parseFloat('10.3')//10.3 转换为数字型 保留小数部分
Number('10px') //得到的值为NaN Number里面只能加数字
parseFloat('10px')//10 保留数字部分 过滤其他(开头必须是数字)
NaN //not A number
NaN也是number类型的数据,代表非数字
隐式转换
前置自增:++i // 自己先计算 后进行运算
//例如
let i = 1
计算:++i + 3
// 2 + 3 = 5
后置自增:i++ // 先进行运算 后自己计算
//例如
let i = 1
计算:i++ + 3
// 1 + 3 = 4
let i = 1
计算:i++ + ++i +i
//1 + 2 + 3
1.i++ 此时i = 1
2.i++ + ++i 此时i = 2
3.i++ + ++i + i 此时i = 3
返回值 boolean
类型
比较运算符有隐式转换
最终把数据隐式转换转成number类型再比较
console.log(3 > 5) // false
console.log(5 >= 5) // true
// console.log(5 = 5)
console.log(5 == 5)
// == 只要值一样就是true 不管数据类型
console.log(5 == '5')
console.log(5 == 'pink')
// === 以后判断要用三等 === 开发常用 要求值和数据类型都一样
console.log(5 === 5)
console.log(5 === '5')
// 特殊情况
console.log('pink' > 'red') //false 比较对应ASCII码
console.log('pink' > 'pin') // true 从左往右一位一位开始比较 得出结果停止
console.log(1 === NaN) //NaN不等于任何值 包括它本身
console.log(NaN === NaN)
//尽量不要比较小数
console.log(0.1 + 0.2 === 0.3) // 0.1 + 0.2 = 0.3000···004 小数精度问题
console.log(0.1 + 0.2)
console.log(3 > '2')
短路:只存在于 && 和 || 中,当满足一定条件会让右边代码不执行
符号 | 短路条件 |
---|---|
&& | 左边为false就短路 |
|| | 左边为true就短路 |
原因:通过左边能得到整个式子的结果,因此没必要再判断右边
运算结果:无论 && 还是 || ,运算结果都是最后被执行的表达式值,一般用在变量赋值
false 数字0 '' undefined null
在less文件中可以写两种注释
1.可以直接用CSS注释(最后会编译展示在CSS文件中)
/* 注释内容 */
,最后会编译展示在css文件中
2.Less注释(只在less中使用,不会编译展示在css文件中)
// 注释的内容
变量:可以变化的量
语法:@变量名:变量值;
作用:编译的时候会把less中所有的变量名替换成变量值,这样可以统一修改某一个值(如主题色)
@mainColor:#e92322; //@变量名:变量值;
.box {
width: 100px;
height: 100px;
background-color: @mainColor;
}
// less中的嵌套:less中选择器可以嵌套
// 1、后代选择器,选择器嵌套即可
// 2、子代选择器,前面使用>
// 3、并集选择器,前面直接写,
// 4、交集选择器,前面使用&(&表示上一级选择器)
// 5、伪元素,前面使用&(&表示上一级选择器)
.father {
width: 300px;
height: 300px;
background-color: red;
// 后代选择器:通过嵌套表示后代关系
.son {
width: 100px;
height: 100px;
background-color: blue;
}
// 子代选择器:通过嵌套 + > 表示
>.son {
background-color: red;
}
// 并集选择器:通过嵌套可以省略父级选择器
.one,
.two {
background-color: yellow;
}
// 交集选择器:&表示上一级选择器
&.red {
background-color: red;
}
// 结构伪类选择器:&表示上一级选择器
&:nth-child(1) {
background-color: red;
}
// 链接伪类选择器:&表示上一级选择器
&:hover {
background-color: green;
}
// 伪元素:&表示上一级选择器
&::after { content: '';
}
}
.box {
width: 200px;
height: 200px;
background-color: pink;
// 伪类的写法
&:hover {
// less中可以直接计算加减乘除计算的,编译之后会把计算的结果直接显示在css文件中。之后学习的rem布局中需要使用到less运算的功能
width: 200px * 2;
width: (200px / 3);
width: 200px + 100;
width: 200px - 100;
}
}
注意点: 在 less 4.0
版本之后, 除法运算/
如果在括号 ()
外,不会执行除法,推荐使用 ()
包裹即可
语法:.函数名() { 重复的样式 }
// 针对于页面中重复的代码
// 1、之前:抽取出公共类——》给需要的标签加类名
.common {
width: 300px;
height: 300px;
}
// 2、现在:less中的函数——》在选择器中调用
// 语法:.函数名() { 重复的代码 }
// 定义函数
.common() {
width: 300px;
height: 300px;
}
.red {
// 使用函数
.common();
background-color: red;
}
(例:将base.less引入index.less,可以直接编译成一个css文件,减少html标签)
@import '需要引入的less文件的路径';
//注意点:一般引入的文件写在最前面,保证自己的样式写在后,优先
例:
@import 'base.less';
设置了 display:flex;
的盒子会变成一个弹性盒子。弹性盒子会多出了主轴和侧轴的概念。
注意点: 弹性盒子内部的子元素会默认沿着主轴方向排布!
在flex布局中一般会把父元素称之为:flex容器,子元素称之为:flex项目
flex布局是css3中新出的布局方式,存在一定的兼容性问题
传统布局 | 弹性布局 |
---|---|
兼容性好 | css3新布局,PC端中存在兼容性问题(如:IE) |
布局繁琐 | 布局方便 |
常用于PC端布局 | 常用于移动端布局 |
布局方法的原则:
flex-direction
弹性盒子中主轴方向默认是水平向右的。
但是其实可以通过
flex-diretion
属性修改主轴的方向
取值 | 效果(主轴方向) |
---|---|
row | 水平向右(默认) |
row-reverse | 水平向左 |
column | 垂直向下 |
column-reverse | 垂直向上 |
justify-content
效果 | 取值 |
---|---|
向主轴开始方向对齐 | flex-start |
向主轴结束方向对齐 | flex-end |
居中对齐 | center |
让空白环绕盒子显示 | space-around |
空白只在两者之间显示 | space-between |
空白均分 | space-evenly |
align-items
效果 | 属性名 |
---|---|
向侧轴开始方向对齐 | flex-start |
向侧轴结束方向对齐 | flex-end |
居中对齐 | center |
拉伸显示(默认值) | stretch |
stretch:让子盒子在侧轴方向拉伸显示
只有当子元素在侧轴方向没有设置宽度或者高度时,才会有拉伸效果(否则以设置的值为准)
注意点:
flex-wrap
flex布局中,默认是单行显示的,如果子元素的宽度之和超出了父元素的宽度,此时子盒子会默认压缩显示。
此时,如果需要设置子元素换行显示,可以使用属性
flex-wrap
属性值 | 效果 |
---|---|
nowrap | 不换行(默认值) |
wrap | 换行 |
align-content
取值 | 效果 |
---|---|
flex-start | 向侧轴的开始位置对齐 |
flex-end | 向侧轴的结束位置对齐 |
center | 居中对齐 |
stretch | 子元素高度拉伸显示(只有没设高才有效果) |
space-around | 空白环绕盒子显示 |
space-between | 空白只在盒子之间显示 |
align-items与align-content的区别:
align-items
align-content
flex
作用: 按照份数分配父元素主轴(宽度)的剩余空间
优先分配具体的宽度,剩余的空间再按照份数分配。
代码: flex:份数(数字);
order
作用: 设置弹性盒子中子元素的排列顺序,数值越小,排列靠前,默认是0
代码: order:数字;
align-self
取值 | 效果 |
---|---|
flex-start | 向侧轴的开始位置对齐(默认相当于顶部对齐) |
flex-end | 向侧轴的结束位置对齐(默认相当于底部对齐) |
center | 居中对齐 |
stretch | 子元素高度拉伸显示(只有没设高才有效果) |
一、前言
三角形实现原理:
border-方向:长度 solid red
,这个画的就是底部的直线。其他边使用border-方向:长度 solid transparent
。二、实现
#triangle-up {
width: 0;
height: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-bottom: 100px solid red;
}
#triangle-down {
width: 0;
height: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-top: 100px solid red;
}
#triangle-left {
width: 0;
height: 0;
border-top: 50px solid transparent;
border-right: 100px solid red;
border-bottom: 50px solid transparent;
}
#triangle-right {
width: 0;
height: 0;
border-top: 50px solid transparent;
border-left: 100px solid red;
border-bottom: 50px solid transparent;
}
#triangle-topleft {
width: 0;
height: 0;
border-top: 100px solid red;
border-right: 100px solid transparent;
}
#triangle-topright {
width: 0;
height: 0;
border-top: 100px solid red;
border-left: 100px solid transparent;
}
#triangle-bottomleft {
width: 0;
height: 0;
border-bottom: 100px solid red;
border-right: 100px solid transparent;
}
#triangle-bottomright {
width: 0;
height: 0;
border-bottom: 100px solid red;
border-left: 100px solid transparent;
}
一、须知
placeholder属性是CSS3中新增加的属性,IE9和Opera12以下版本的CSS选择器均不支持占位文本。
二、设置placeholder文字颜色、字号
方式1:因为每个浏览器的CSS选择器都有所差异,所以需要针对每个浏览器做单独的设定(可以在冒号前面写input和textarea)。
::-webkit-input-placeholder { /* WebKit browsers */
color: #999;
font-size: 16px;
}
::-moz-placeholder { /* Mozilla Firefox 19+ */
color: #999;
font-size: 16px;
}
:-ms-input-placeholder { /* Internet Explorer 10+ */
color: #999;
font-size: 16px;
}
方式2:建议使用该方式 如果是在手机客户端webview 只使用-webkit内核方式即可。
input::-webkit-input-placeholder, textarea::-webkit-input-placeholder {
color: #666;
font-size: 16px;
}
input:-moz-placeholder, textarea:-moz-placeholder {
color: #666;
font-size: 16px;
}
input::-moz-placeholder, textarea::-moz-placeholder {
color: #666;
font-size: 16px;
}
input:-ms-input-placeholder, textarea:-ms-input-placeholder {
color: #666;
font-size: 16px;
}
/* 1.文本不换行 */
white-space:nowrap;
/* 2.溢出隐藏 */
overflow:hidden;
/* 4.加省略号 */
text-overflow:ellipsis;
场景:垂直布局的块级元素,上下的margin会合并
结果:最终两者距离为margin的最大值
解决方法:避免就好
• 只给其中一个盒子设置margin即可
场景:互相嵌套的块级元素,子元素的 margin-top 会作用在父元素上
结果:导致父元素一起往下移动
解决方法:
场景:给行内元素设置margin和padding时
结果: