Skip to content

Commit 8c835e5

Browse files
committed
feat(ui): Use a better grid system for the big layout.
Because I know use `content-grid`, I can easily re-use it in expandable things and so on. It makes things much much cleaner and predictable.
1 parent f3c7c53 commit 8c835e5

File tree

2 files changed

+68
-53
lines changed

2 files changed

+68
-53
lines changed

hub/ui/index.html

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ <h3 class="thing--frame-name"><slot name="name">(unnamed)</slot></h3>
190190
</svg>
191191
</div>
192192
</div>
193-
<div slot="long-thing">
193+
<div slot="long-thing" class="content-grid">
194194
<div class="things">
195195
<div class="things--list">
196196
<div class="thing--frame thing--text">
@@ -278,7 +278,7 @@ <h3 class="thing--frame-name"><slot name="name">(unnamed)</slot></h3>
278278
</div>
279279
</div>
280280
</div>
281-
<div slot="long-thing">
281+
<div slot="long-thing" class="content-grid">
282282
<h4>Données actuelles</h4>
283283

284284
<my-unlocated-things>
@@ -379,26 +379,26 @@ <h4>Prévisions météorologiques</h4>
379379
<div class="thing--weather-one-forecast" data-bind-loop="forecast in forecasts" data-bind-attributes data-bind:data-temperature-category="forecast.temperature_category">
380380
<h5 class="thing--weather-one-forecast--datetime"><span data-bind="forecast.date_hour">(?)</span>h<span data-bind="forecast.date_extra">(?)</span></h5>
381381

382-
<h6 class="thing--weather-one-forecast--title"><span>Ciel</span></h6>
382+
<h6 class="thing--weather-one-forecast--title"><span><span>Ciel</span></span></h6>
383383

384384
<div class="thing--weather-one-forecast--condition-icon"><svg><use data-bind-attributes data-bind:href="forecast.condition_icon" /></svg></div>
385385
<div class="thing--weather-one-forecast--condition" data-bind="forecast.condition">(?)</div>
386386
<div class="thing--weather-one-forecast--cloudiness" data-bind="forecast.octas">(?)</div>
387387
<div class="thing--weather-one-forecast--precipitations"><span data-bind="forecast.precipitations">(?)</span>mm</div>
388388
<div class="thing--weather-one-forecast--uv-index"><span data-bind="forecast.uv_index">(?)</span>UV<sub>ix</sub></div>
389389

390-
<h6 class="thing--weather-one-forecast--title"><span>Températures</span></h6>
390+
<h6 class="thing--weather-one-forecast--title"><span><span>Températures</span></span></h6>
391391

392392
<div class="thing--weather-one-forecast--temperature"><span data-bind="forecast.temperature">(?)</span>°C</div>
393393
<div class="thing--weather-one-forecast--apparent-temperature">(<span data-bind="forecast.apparent_temperature">(?)</span>°C)</div>
394394

395-
<h6 class="thing--weather-one-forecast--title"><span>Air</span></h6>
395+
<h6 class="thing--weather-one-forecast--title"><span><span>Air</span></span></h6>
396396

397397
<div class="thing--weather-one-forecast--humidity"><span data-bind="forecast.humidity">(?)</span>%H</div>
398398
<div class="thing--weather-one-forecast--pressure"><span data-bind="forecast.pressure">(?)</span>hPa</div>
399399
<div class="thing--weather-one-forecast--dew-point"><span data-bind="forecast.dew_point">(?)></span>°C</div>
400400

401-
<h6 class="thing--weather-one-forecast--title"><span>Vent</span></h6>
401+
<h6 class="thing--weather-one-forecast--title"><span><span>Vent</span></span></h6>
402402

403403
<div class="thing--weather-one-forecast--wind-speed"><span data-bind="forecast.wind">(?)</span>m/s</div>
404404
<div class="thing--weather-one-forecast--wind-gust">(<span data-bind="forecast.wind_gust">(?)</span>m/s)</div>
@@ -431,7 +431,7 @@ <h6 class="thing--weather-one-forecast--title"><span>Vent</span></h6>
431431
<div slot="meter-gradient" class="gradient gradient--conic__yellow_to_green"></div>
432432
</my-meter-thing>
433433
</my-thing>
434-
<div slot="long-thing">
434+
<div slot="long-thing" class="content-grid">
435435
<h4><span data-bind="vehicle_nickname">?</span> <small class="label" data-bind="vehicle_vin">?</small></h4>
436436

437437
<svg viewBox="0 0 340 150.4" class="thing--car--car">
@@ -710,8 +710,8 @@ <h3 class="thing--frame-name">
710710
<script src="static/javascript/sunrise.js" defer></script>
711711
<script src="static/javascript/main.js" defer></script>
712712
</head>
713-
<body>
714-
<header class="header--container">
713+
<body class="content-grid">
714+
<header class="full-width content-grid header--container">
715715
<div class="header">
716716
<my-nav id="nav" role="nav">
717717
<span slot="root">La Maison Vivante</span>

hub/ui/static/style/main.css

Lines changed: 59 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -93,37 +93,59 @@ html {
9393
}
9494

9595
body {
96-
--body--gutter: var(--space);
96+
font: 1.1em/1.4em text;
97+
font-weight: 400;
98+
}
99+
100+
.content-grid {
101+
--padding-inline: var(--space);
102+
--content-max-width: 45rem;
103+
--breakout-max-width: 50rem;
104+
105+
--breakout-size: calc((var(--breakout-max-width) - var(--content-max-width)) / 2);
97106

98107
display: grid;
99-
grid-template: "header"
100-
"main";
101-
grid-template-rows: auto 1fr;
102-
margin: 0 auto;
103-
padding: 0 var(--body--gutter);
104-
min-height: 100%;
105-
max-width: 50rem;
108+
grid-template-columns:
109+
[full-width-start]
110+
minmax(var(--padding-inline), 1fr)
111+
[breakout-start]
112+
minmax(0, var(--breakout-size))
113+
[content-start]
114+
min(
115+
100% - (var(--padding-inline) * 2),
116+
var(--content-max-width)
117+
)
118+
[content-end]
119+
minmax(0, var(--breakout-size))
120+
[breakout-end]
121+
minmax(var(--padding-inline), 1fr)
122+
[full-width-end];
123+
}
106124

107-
font: 1.1em/1.4em text;
108-
font-weight: 400;
125+
.content-grid > * {
126+
grid-column: content;
127+
}
128+
129+
.content-grid > .breakout {
130+
grid-column: breakout;
131+
}
132+
133+
.content-grid > .full-width {
134+
grid-column: full-width;
109135
}
110136

111137
.header--container {
112138
position: sticky;
113-
z-index: 20;
139+
z-index: calc(infinity);
114140
top: 0;
115-
isolate: isolation;
116141
margin-bottom: var(--space-large);
117142
}
118143

119144
.header--container::before {
120145
content: '';
121146
position: absolute;
122147
z-index: -1;
123-
top: 0;
124-
right: calc(-1 * var(--body--gutter));
125-
bottom: 0;
126-
left: calc(-1 * var(--body--gutter));
148+
inset: 0;
127149
background: var(--color-light-000-transparent);
128150
}
129151

@@ -136,12 +158,9 @@ body {
136158
}
137159

138160
.header {
139-
grid-area: header;
140-
141161
display: grid;
142-
grid-template: "header-title header-details";
162+
grid-template: "title details";
143163

144-
max-width: 50rem;
145164
font-weight: 600;
146165
line-height: var(--space-very-large);
147166
}
@@ -151,7 +170,7 @@ body {
151170
}
152171

153172
.header--title {
154-
grid-area: header-title;
173+
grid-area: title;
155174
font-size: 120%;
156175
}
157176

@@ -171,7 +190,7 @@ body {
171190
}
172191

173192
.header--details {
174-
grid-area: header-details;
193+
grid-area: details;
175194
text-align: end;
176195
list-style: none;
177196
}
@@ -200,10 +219,6 @@ body {
200219
display: none;
201220
}
202221

203-
main {
204-
grid-area: main;
205-
}
206-
207222
.things--location {
208223
display: block;
209224
margin-block-end: var(--space-large);
@@ -341,22 +356,15 @@ main {
341356
}
342357

343358
.thing--expandable[aria-expanded = "true"] > .thing--expandable-long {
344-
--thing--expandable-long--gutter: var(--space-large);
345-
346359
position: fixed;
347360
z-index: 9;
348-
top: var(--space-very-large);
349-
right: 0;
350-
bottom: 0;
351-
left: 0;
361+
inset: var(--space-very-large) 0 0;
352362

353363
visibility: visible;
354364
opacity: 1;
355365
transform: translateY(0);
356366
overflow: auto;
357367

358-
padding: var(--space) var(--thing--expandable-long--gutter);
359-
360368
transition:
361369
transform var(--transition-duration) var(--transition-bezier),
362370
opacity var(--transition-duration) var(--transition-bezier);
@@ -611,13 +619,17 @@ main {
611619

612620
.thing--weather-forecast {
613621
--thing--weather-forecast--gutter: var(--space-large);
622+
--thing--weather-forecast--column-width: 6rem;
623+
624+
position: relative;
614625

615626
display: grid;
616627
grid-auto-flow: column;
617-
grid-auto-columns: 6rem;
628+
grid-auto-columns: var(--thing--weather-forecast--column-width);
618629
overflow-x: auto;
619630
overscroll-behavior-inline: contain;
620631
scroll-snap-type: x mandatory;
632+
isolation: isolate;
621633

622634
margin: var(--space-very-large) 0;
623635
border-radius: var(--space-small);
@@ -680,23 +692,26 @@ main {
680692
.thing--weather-forecast > .thing--weather-one-forecast > .thing--weather-one-forecast--title {
681693
flex: 2;
682694
font-size: var(--font-size-secondary);
695+
text-align: start;
683696
margin: var(--space) 0 var(--space-very-small);
684-
position: relative;
697+
transform: translateX(-.5rem) translateY(-.5rem);
698+
}
699+
700+
.thing--weather-forecast > .thing--weather-one-forecast:not(:first-child) > .thing--weather-one-forecast--title {
685701
visibility: hidden;
686702
}
687703

688704
.thing--weather-forecast > .thing--weather-one-forecast:first-child > .thing--weather-one-forecast--title > span {
689-
visibility: visible;
690-
position: fixed;
691-
transform: translateY(-.5rem);
692-
left: var(--thing--expandable-long--gutter);
693-
right: var(--thing--expandable-long--gutter);
694-
705+
position: absolute;
706+
left: 0;
707+
width: calc(48 * var(--thing--weather-forecast--column-width));
695708
padding: .2rem 0 .2rem .5rem;
696-
text-align: start;
697709
background: var(--color-light-000-transparent);
710+
}
698711

699-
pointer-events: none;
712+
.thing--weather-forecast > .thing--weather-one-forecast:first-child > .thing--weather-one-forecast--title > span > span {
713+
position: sticky;
714+
left: .5rem;
700715
}
701716

702717
.thing--weather-forecast .thing--weather-one-forecast--datetime {

0 commit comments

Comments
 (0)