aboutsummaryrefslogtreecommitdiff
path: root/examples/clock/style.css
blob: a6f8349538eb19de5fced8d54fb40bdd29a5a0ca (plain) (blame)
1
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
:root {
  --color-gray: #cccccc;
  --color-accent: #5180e9;

  font-size: 16px;
  font-family: sans-serif;
  color: #555;

  --cssx-children: div#digital div#analog;
}

body * { box-sizing: border-box; }

#digital {
  text-align: center;
  padding: 1rem;
  font-size: 1.5rem;

  --text: "hello";

  --js-expr:
    new Intl.DateTimeFormat('en-US', {
      hour: 'numeric',
      minute: 'numeric',
      second: 'numeric',
    }).format(new Date());
  --get-date: js-eval(get-var(--js-expr));

  --cssx-on-mount: update(--text, call(--get-date));
  --cssx-on-update: delay(1s) update(--text, call(--get-date));
}
#digital::after { content: var(--text); }

#analog {
  border: 1px solid red;
  width: 200px;
  height: 200px;
  margin: 1rem auto;
  border-radius: 50%;
  position: relative;

  --date: "";
  --get-date: js-eval("new Date()");

  --cssx-on-mount: update(--date, call(--get-date));
  --cssx-on-update:
    update('[data-element=seconds]', --angle, js-eval("360 * new Date().getSeconds() / 60 - 90"))
    update('[data-element=minutes]', --angle, js-eval("360 * new Date().getMinutes() / 60 - 90"))
    update('[data-element=hours]', --angle,
      js-eval("360 * (new Date().getHours() % 12) / 12 - 90 + (30 * new Date().getMinutes() / 60)")
    )
    delay(1s)
    update(--date, call(--get-date));

  --cssx-children:
    div#seconds.analog-clock-hand
    div#minutes.analog-clock-hand
    div#hours.analog-clock-hand
  ;
}

[data-element=seconds].analog-clock-hand {
  --color: pink;
  --size: 70px;
}
[data-element=minutes].analog-clock-hand {
  --color: red;
  --size: 60px;
}
[data-element=hours].analog-clock-hand {
  --color: blue;
  --size: 40px;
  height: 4px;
}

.analog-clock-hand {
  --angle: 0;
  --color: black;
  --size: 80px;

  width: var(--size);
  height: 2px;
  position: absolute;
  top: 50%;
  left: 50%;
  transform-origin: 0% 50%;
  transform: rotate(0deg);
  border-radius: 5px;

  --get-transform: string('rotate(', get-var(--angle), 'deg)');

  --cssx-on-mount:
    update(background-color, get-var(--color))
    update(transform, call(--get-transform))
  ;
  --cssx-on-update: update(transform, call(--get-transform));
}