C3(一)

选择器

属性选择器

E[attr]查找拥有attr属性的E标签
E[attr=value]查找attr属性而且属性值相等的E标签
E[attr*=value]查找attr属性里面包含value的任意位置
E[attr^=value]查找attr属性里包含value的开始位置
E[attr$=value]查找attr属性里包含value的结束位置

伪类选择器

1.a:hover a:link a:active a:visited
2.结构伪类
兄弟伪类
/+ 相邻的元素
~ 获取当前满足的兄弟元素
E:first-child E:first-of-type
E:last-child
E:nth-child(n):第n个子元素,计算E元素的全部兄弟元素
E:nth-last-child(n):倒序
E:nth-child(even)
E:nth-child(odd)
E:nth-of-type(n):指定类型
E:empty:选中没有任何子节点的E元素,注意,空格也算子元素
E:target

伪元素选择器

实现DOM元素的功能 实际上不在文本中生成 虚假的元素

1.是一个行内元素
display:block /position/float:""
2.要添加content,没有内容也要设置content:""
3.无法通过JS操作

盒模型:

非标准
a)padding + border + width = 盒子的宽度
b)padding + border + height = 盒子的高度

box-sizing
a)content-box:对象的实际宽度等于设置的width值和border、padding之和
b)border-box: 对象的实际宽度就等于设置的width值,即使定义有border和padding也不会改变对象的实际宽度

box-shadow

box-shadow: h-shadow v-shadow blur spread color inset;

描述
h-shadow必需。水平阴影的位置,允许负值
v-shadow必需。垂直阴影的位置,允许负值
blur可选,模糊距离
spread可选。阴影的尺寸。值越大,阴影的扩散面积越大
color可选。阴影的颜色
inset可选。将外部阴影 (outset) 改为内部阴影
text-shadow

text-shadow:X-offset Y-offset blur color;

rgba hsla

rgba(255,255,255,Alpha)
hsla(360,100%,50%,Alpha)
使用rgba/hsla来控制颜色,相对opacity ,不具有继承性

边框图片

border-image-source
默认填充到容器的四个角点
border-image-slice: 10 fill;
边框向内剪裁10px
fill内部处理
.

渐变

线性渐变
background: linear-gradient();
0deg/to right/…

重复渐变加repeating
repeating-linear-gradient(150deg,
#fff 0%,#fff 10%,
#000 10%,#000 20%);

径向渐变
background: radial-gradient();
ellipse at center/px
circle

背景

background-sizing
cover
contain

background-repeat: round;
round会缩放在平铺
space会产生相等的间距值

background-attachment:fixed/scroll/local;

background-position:center/px;

background-origin

background-clip

过渡:

transition: property duration timing-function delay;
property:一定要给定一个具体的值

2D转换

transform:translate(x,y);
transform:scale(x,y);
transform:rotate(0deg);
transform:skew(xdeg,ydeg);倾斜
transform-origin: 允许你改变被转换元素的位置。默认中间

在这里插入图片描述用skew斜切可以做出3D效果

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<title></title>
	<style type="text/css">
        *{
        	margin: 0;
        	padding: 0;
        }
        .pkbox{
        	height:219px;
        	width: 155px;
        	padding: 0;
        	position: relative;
        	margin:270px auto;
        }
		.pkbox > img{
           width: 100%;
           height: 100%;
           position: absolute;
           /*transform-origin: top right;*/
           transition: transform 2s;
		}
		
		/*.pkbox:hover > img:nth-of-type(1){
          transform: rotate(60deg) scale(0.7);
		}
		.pkbox:hover > img:nth-of-type(2){
          transform: rotate(150deg) scale(0.7);
		}
		.pkbox:hover > img:nth-of-type(3){
          transform: rotate(240deg) scale(0.7);
		}
		.pkbox:hover > img:nth-of-type(4){
          transform: rotate(330deg) scale(0.7);
		}*/
		.pkbox:hover > img:nth-of-type(1){
			transform: translate(-30px);
			z-index: 5;
		}
		.pkbox:hover > img:nth-of-type(2){
			transform: translate(-60px);
			z-index: 4;
		}
		.pkbox:hover > img:nth-of-type(3){
			transform: translate(-90px);
			z-index: 3;
		}
		.pkbox:hover > img:nth-of-type(4){
			transform: translate(-120px);
			z-index: 2;
		}
		.pkbox:hover > img:nth-of-type(5){
			z-index: 6;
		}
	</style>
</head>
<body>
<div class="pkbox">
	<img src="images/pk1.png">
	<img src="images/pk1.png">
	<img src="images/pk1.png">
	<img src="images/pk1.png">
	<img src="images/pk3.png">
</div>
</body>
</html>

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,关于您的问题,我可以为您提供一些帮助。在 Arduino-ESP32-C3 中,可以使用两个不同的 Timer 来分别定时。以下是一个示例代码: ``` #include <esp_timer.h> // 定时器 1 的时间间隔为 1 秒 esp_timer_handle_t timer1_handle; void timer1_callback(void* arg) { Serial.println("Timer 1 expired!"); } int timer1_interval = 1000000; // 定时器 2 的时间间隔为 3 秒 esp_timer_handle_t timer2_handle; void timer2_callback(void* arg) { Serial.println("Timer 2 expired!"); } int timer2_interval = 3000000; void setup() { // 初始化串口 Serial.begin(115200); // 设置定时器 1 esp_timer_create_args_t timer1_args = { .callback = &timer1_callback, .arg = NULL, .name = "timer 1" }; esp_timer_create(&timer1_args, &timer1_handle); esp_timer_start_periodic(timer1_handle, timer1_interval); // 设置定时器 2 esp_timer_create_args_t timer2_args = { .callback = &timer2_callback, .arg = NULL, .name = "timer 2" }; esp_timer_create(&timer2_args, &timer2_handle); esp_timer_start_periodic(timer2_handle, timer2_interval); } void loop() { // 主循环 } ``` 在上面的示例代码中,我们使用 `esp_timer_create()` 函数和 `esp_timer_start_periodic()` 函数来设置定时器。`esp_timer_create()` 函数用于创建一个定时器句柄,然后使用 `esp_timer_start_periodic()` 函数来启动定时器。同时,我们定义了两个时间间隔变量 `timer1_interval` 和 `timer2_interval` 分别为 1 秒和 3 秒,并将它们传递到函数中来设置定时器的时间间隔。在回调函数中,我们可以编写一些逻辑代码来执行相应的操作。 希望这个回答能够帮助到您,如果您有任何其他问题,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值