2025年9月21日
# 技术
# CSS
# 效果——卡片链接
效果图

代码方案
利用mkdocs-material-for-docs的主题
- markdown侧的代码
<a href="https://www.bilibili.com/video/BV1Ce411D7rH/" target="_blank" class="alink">
<div class="video-container" markdown>

「坂本龙一」歌单 | 沉浸式进入他的音乐世界 | 值得无限循环的曲目 | 学习工作放松必备
十分令人有沉浸感的纯音乐,可以作为工作或写作时的背景音.
</div>
</a>
2
3
4
5
6
7
8
9
10
- css侧的代码
.video-container{
border-radius: 10px;
border-style: solid;
border-color: rgb(255, 255, 255);
border-width: 1px;
width: '100%';
height: 140px;
background-color: rgb(255, 255, 255);
display: grid;
align-content: center;
grid-template-columns: 200px 1fr; /* 两列:左边自适应宽度,右边占满剩余 */
grid-template-rows: 1fr 1fr;
column-gap: 40px; /* 左右列之间的间距 */
transition-duration: 0.2s;
box-shadow: 2px 2px 5px #9c9b9b7b;
color: black;
}
.video-container:hover{
transition-duration: 0.2s;
background-color: #f5f5f5;
}
.video-container p:first-child {
grid-column: 1 / 2; /* 占据所有行(不管右边多少个 <p>) */
grid-row: 1 / 3;
align-items: center;
text-align: center;
display: flex;
padding-left: 20px;
justify-items: center;
}
.video-container p:nth-child(2){
text-indent: 0px;
padding-right: 40px;
font-weight: 700;
}
.video-container p:last-child{
margin-top: 0px;
padding-right: 40px;
font-size: small;
color: #4c4d5f;
}
.video-container img{
border-radius: 9px;
height: 110px;
}
.alink{
text-decoration: none;
color: inherit;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# grid-template-columns
grid-template-columns: 1fr 2fr
- 将宽度划分为3个网格,第一个元素占一格大小,第二个元素占两格大小
grid-template-columns: 1fr 60px
- 将宽度划分为一个网格加60px的宽度,第二个元素占60px,第一个元素占剩下左侧的所有宽度.
grid-template-rows 可同样类比
参考资料
MMDN | grid-template-columns (opens new window)
# grid-column
grid-column: 1
- 占据一个列格子
grid-column: 1 / 3
- 从第一个网格线开始,占据到第3个网格线
grid-column: 1 / span 2
- 从第一个网格线开始,延伸占据两个网格
grid-column: 2 / -1
- 从第二个网格线开始,占据到最后一个网格线
参考资料
MMDN | grid-column (opens new window)
# align-content
- 表示子元素在弹性盒子布局的纵轴和网格布局的主轴,如何在内容项之间分配空间
justify-content 可同样类比
与align-items的区别
在 Flexbox 中,只有 justify-content,没有 justify-items。
在 Grid 中,两个都能用:
- justify-content → 控制整个网格在容器里的位置。
- justify-items → 控制网格里每个格子里的对齐方式。
参考资料
MMDN | align-content (opens new window)
# css选中子节点更改样式
.parent p:first-child / nth-child(n) /last-child{}
# 知识
# 拉格朗日乘子法(Lagrange multipliers)
目标: 寻找多元函数在一组约束下的极值的方法
作用: 可将有
等式约束的优化问题
假定
- 对于约束曲面上的任意点
,该点的梯度 正交于约束曲面 - 在最优点
,目标函数在该点的梯度 正交于约束曲面
若不正交,则仍然可以在约束曲面上继续移动使得函数值继续下降.
因此在最优点
此时的
可能为正,可能为负
分别对两个变量求偏导则可得到约束条件,于是原约束优化问题可转化为对拉格朗日函数的无约束优化问题,即在变量为
不等式约束的优化问题
对于约束
约束条件之所以不起作用,是因为
在约束范围内,只要优化到 点附近,则必然满足约束条件.
若
之所以两者方向必定相反,是因为如果两者方向相同,则可以往可行区域移动,且继续使得函数值下降.与最优点在
上矛盾
整合两种情形,必定满足
其中
上述做法可以推广到多个约束,可行域
引入拉格朗日乘子
由不等式约束引入的KKT条件
一个优化问题可以从两个角度来考察,即“主问题”(primal problem)和“对偶问题”(dual problem).对于主问题,基于拉格朗日函数,其拉格朗日“对偶函数”(dual function)
推导对偶问题时,通常将拉格朗日乘子对
求导,并令导数等于0,获得对偶函数的表达形式
若
表示 的分量均大于零
进而有
第一个不等式由下确界定义得到,第二个不等式由增加项为非正数得到。
若著问题的最优值为
对偶函数给出了主问题最优值的下界,其取决于
这就是主问题的对偶问题,其中
考虑对偶问题的最优值
但是若满足Slater条件:则此时强对偶性成立
主问题为凸优化问题,如
和 均为凸函数, 为仿射函数可行域中至少有一点使不等式约束严格成立.
值得注意的是,强对偶性成立时,将拉格朗日函数分别对原变量和对偶变量求导,再令导数等于零,即可得到原变量与对偶变量的数值关系.
# 项目
# 测试
- 只能使用BSDF的原理化着色器,其它节点无法在AGP中生效
- 可以使用骨骼动画和形变动画啊
- 无法使用粒子功能,必须要实体化出来单独进行动画设计,
一个场景,两个视角
排版问题
效果
- 雨滴飞溅(雨滴的下落动画+碰撞检测+2D粒子效果)
- 多云:(可以使用遮挡的形式,静态和动态窗口)
- 下雪:(雪花掉落动画+碰撞检测+2D绘图雪覆盖)
- 季节效果?
- 秋天:(树叶下落,可以全屏覆盖,然后启用点击从穿透)
整体功能待完成:(日期的信息 与笔记信息分离)
- 日期时间,及天气获取和存储到每一天的数据中
- 最重要的是笔记的数据存储结构(结构由功能决定)
- 首先要确定实现路径:canvas或是原生组件
- 字符串类型 + 图片类型 两类;不考虑多的
- 原生组件可以通过
foreach+if-else的条件渲染实现排版 - canvas则需要为每个类添加绘制的方法,然后还需要一个总体的协调的对象实例,来规划绘制. 滚动则是通过绘制的坐标来控制。
- 留言功能:和笔记功能一样的,只是时间戳上要区分。
- 定时留言功能:通过笔记的窗口编辑,然后存储,然后在对应的日期显示。