tangled
alpha
login
or
join now
vielle.dev
/
site-archive
0
fork
atom
[Archived] Archived WIP of vielle.dev
0
fork
atom
overview
issues
pulls
pipelines
Refactor Post.astro to reduce calc calls in css
vielle.dev
10 months ago
e7c2a49a
f8cfccdf
+45
-57
2 changed files
expand all
collapse all
unified
split
src
components
blog
Post.astro
config.ts
+44
-56
src/components/blog/Post.astro
···
17
17
const { default: image } = await import(`../../posts/assets/${img[0]}.png`);
18
18
19
19
const positions: [number, number] = [Math.random(), Math.random()];
20
20
-
const offsets: [[number, number], [number, number], [number, number]] = [
20
20
+
const offsets: [number, number][] = [
21
21
+
[0, 0],
21
22
[
22
23
Math.random() * blog.post.drift[0] - blog.post.drift[0] / 2,
23
24
Math.random() * 0.5 * blog.post.drift[1] - blog.post.drift[1] / 2,
···
39
40
40
41
/* generated */
41
42
42
42
-
--x-offset: ${positions[0]};
43
43
-
--y-offset: ${positions[1]};
44
44
-
45
45
-
${offsets.map((x, i) => `--x-offset-${i}: ${x[0]}; --y-offset-${i}: ${x[1]};`).join("\n")}
43
43
+
${offsets
44
44
+
.map(
45
45
+
(x, i) =>
46
46
+
`--x-offset-${i}: calc((100svw - ${blog.post.width + 2 * blog.post.xPadding}rem) * ${positions[0] + x[0]} + ${blog.post.xPadding}rem);
47
47
+
--y-offset-${i}: ${blog.post.yLeeway * 2 * (positions[1] + x[1]) - blog.post.yLeeway}rem;`
48
48
+
)
49
49
+
.join("\n")}
46
50
47
51
--timing: ${
48
52
blog.post.timing.scale +
···
52
56
53
57
/* config */
54
58
55
55
-
--y-leeway: ${blog.post.yLeeway}rem;
56
56
-
${blog.post.size[0] ? `--width: ${blog.post.size[0]}rem;` : ""}
57
57
-
${blog.post.size[1] ? `--height: ${blog.post.size[1]}rem;` : ""}
59
59
+
--width: ${blog.post.width}rem;
58
60
--y-gap: ${blog.post.yGap}rem;
59
59
-
--x-padding: ${blog.post.xPadding}rem;
60
61
`}
61
62
href={`/blog/${id}/`}
62
63
>
···
70
71
71
72
<style>
72
73
@property --x-offset-0 {
73
73
-
syntax: "<number>";
74
74
+
syntax: "<length>";
74
75
inherits: false;
75
75
-
initial-value: 0;
76
76
+
initial-value: 0px;
76
77
}
77
78
78
79
@property --x-offset-1 {
79
79
-
syntax: "<number>";
80
80
+
syntax: "<length>";
80
81
inherits: false;
81
81
-
initial-value: 0;
82
82
+
initial-value: 0px;
82
83
}
83
84
84
85
@property --x-offset-2 {
85
85
-
syntax: "<number>";
86
86
+
syntax: "<length>";
87
87
+
inherits: false;
88
88
+
initial-value: 0px;
89
89
+
}
90
90
+
91
91
+
@property --x-offset-3 {
92
92
+
syntax: "<length>";
86
93
inherits: false;
87
87
-
initial-value: 0;
94
94
+
initial-value: 0px;
88
95
}
89
96
90
97
@property --y-offset-0 {
91
91
-
syntax: "<number>";
98
98
+
syntax: "<length>";
92
99
inherits: false;
93
93
-
initial-value: 0;
100
100
+
initial-value: 0px;
94
101
}
95
102
96
103
@property --y-offset-1 {
97
97
-
syntax: "<number>";
104
104
+
syntax: "<length>";
98
105
inherits: false;
99
99
-
initial-value: 0;
106
106
+
initial-value: 0px;
100
107
}
101
108
102
109
@property --y-offset-2 {
103
103
-
syntax: "<number>";
110
110
+
syntax: "<length>";
104
111
inherits: false;
105
105
-
initial-value: 0;
112
112
+
initial-value: 0px;
113
113
+
}
114
114
+
115
115
+
@property --y-offset-3 {
116
116
+
syntax: "<length>";
117
117
+
inherits: false;
118
118
+
initial-value: 0px;
106
119
}
107
120
108
121
@keyframes bob {
109
122
0%,
110
123
100% {
111
111
-
top: calc(var(--y-leeway) * 2 * var(--y-offset) - var(--y-leeway));
112
112
-
left: calc(
113
113
-
(100svw - var(--width) - 2 * var(--x-padding)) * var(--x-offset) +
114
114
-
var(--x-padding)
115
115
-
);
124
124
+
top: var(--y-offset-0);
125
125
+
left: var(--x-offset-0);
116
126
}
117
127
118
128
25% {
119
119
-
top: calc(
120
120
-
var(--y-leeway) * 2 * (var(--y-offset) + var(--y-offset-0)) -
121
121
-
var(--y-leeway)
122
122
-
);
123
123
-
left: calc(
124
124
-
(100svw - var(--width) - 2 * var(--x-padding)) *
125
125
-
(var(--x-offset) + var(--x-offset-0)) + var(--x-padding)
126
126
-
);
129
129
+
top: var(--y-offset-1);
130
130
+
left: var(--x-offset-1);
127
131
}
128
132
129
133
50% {
130
130
-
top: calc(
131
131
-
var(--y-leeway) * 2 * (var(--y-offset) + var(--y-offset-1)) -
132
132
-
var(--y-leeway)
133
133
-
);
134
134
-
left: calc(
135
135
-
(100svw - var(--width) - 2 * var(--x-padding)) *
136
136
-
(var(--x-offset) + var(--x-offset-1)) + var(--x-padding)
137
137
-
);
134
134
+
top: var(--y-offset-2);
135
135
+
left: var(--x-offset-2);
138
136
}
139
137
140
138
75% {
141
141
-
top: calc(
142
142
-
var(--y-leeway) * 2 * (var(--y-offset) + var(--y-offset-2)) -
143
143
-
var(--y-leeway)
144
144
-
);
145
145
-
left: calc(
146
146
-
(100svw - var(--width) - 2 * var(--x-padding)) *
147
147
-
(var(--x-offset) + var(--x-offset-2)) + var(--x-padding)
148
148
-
);
139
139
+
top: var(--y-offset-3);
140
140
+
left: var(--x-offset-3);
149
141
}
150
142
}
151
143
152
144
a {
153
145
width: var(--width);
154
154
-
height: var(--height);
155
146
background-color: white;
156
147
border: 0.5rem solid var(--colour, dodgerblue);
157
148
border-radius: 2.5rem;
···
162
153
margin-bottom: var(--y-gap);
163
154
164
155
/* default, overridden by reduced motion */
165
165
-
top: calc(var(--y-leeway) * 2 * var(--y-offset) - var(--y-leeway));
166
166
-
left: calc(
167
167
-
(100svw - var(--width) - 2 * var(--x-padding)) * var(--x-offset) +
168
168
-
var(--x-padding)
169
169
-
);
156
156
+
top: var(--x-offset-0);
157
157
+
left: var(--y-offset-0);
170
158
171
159
@media (prefers-reduced-motion: no-preference) {
172
160
animation: infinite var(--timing) bob;
+1
-1
src/config.ts
···
1
1
export const blog = {
2
2
post: {
3
3
yLeeway: 5,
4
4
-
size: [30, undefined],
4
4
+
width: 30,
5
5
yGap: 10,
6
6
xPadding: 15,
7
7
drift: [0.1, 1],