style desktop nav panel

This commit is contained in:
isUnknown 2024-04-15 13:43:57 +02:00
parent 57e9ca74da
commit 81454b3e4e
16 changed files with 157 additions and 136 deletions

View file

@ -23,6 +23,6 @@
@media screen and (min-width: 640px) { @media screen and (min-width: 640px) {
#main-footer { #main-footer {
padding: calc(var(--unit--horizontal) / 2) var(--unit--horizontal); display: none;
} }
} }

View file

@ -79,21 +79,21 @@ body {
} }
/* ================= BUTTONS ================= */ /* ================= BUTTONS ================= */
.toggle-btn.left::after { .toggle-btn--left::after {
margin-left: var(--unit--horizontal); margin-left: var(--unit--horizontal);
} }
.toggle-btn.left::after { .toggle-btn--left::after {
content: "+"; content: "+";
} }
.toggle-btn.left.open::after { .toggle-btn--left.open::after {
content: "-"; content: "-";
} }
.toggle-btn.right::before { .toggle-btn--right::before {
margin-right: var(--unit--horizontal); margin-right: var(--unit--horizontal);
} }
.toggle-btn.right::before { .toggle-btn--right::before {
content: "+"; content: "+";
} }
.toggle-btn.right.open::before { .toggle-btn--right.open::before {
content: "-"; content: "-";
} }

View file

@ -5,13 +5,19 @@
left: 0; left: 0;
box-sizing: border-box; box-sizing: border-box;
width: 100vw; width: 100vw;
height: calc(var(--unit--vertical) * 4); height: calc(var(--unit--vertical) * 4.5);
padding: var(--unit--vertical) var(--unit--horizontal); padding: var(--unit--vertical) var(--unit--horizontal);
padding-bottom: 0; padding-bottom: 0;
transition: height 0.2s ease-in-out; transition: height 0.2s ease-in-out;
} }
#logo { #logo {
position: relative; position: relative;
height: 100%;
}
#logo__link {
display: block;
height: 100%;
} }
#main-header.open #actuel { #main-header.open #actuel {
@ -24,13 +30,13 @@
} }
#logo #inactuel { #logo #inactuel {
position: absolute; position: absolute;
bottom: 0;
z-index: 0; z-index: 0;
color: var(--color-secondary); color: var(--color-secondary);
bottom: -48%;
transition: bottom 0.2s ease-in-out; transition: bottom 0.2s ease-in-out;
} }
#main-header.minimized #logo #inactuel { #main-header.minimized {
bottom: 0%; height: 5.6rem;
} }
body { body {
@ -63,7 +69,7 @@ body[data-template="home"] {
#entry-btns { #entry-btns {
position: sticky; position: sticky;
position: -webkit-sticky; position: -webkit-sticky;
top: calc(var(--unit--vertical) * 3); top: calc(var(--unit--vertical) * 4);
height: var(--entry-btns-height); height: var(--entry-btns-height);
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
@ -143,11 +149,12 @@ button.toggle.right::before {
font-size: 11vw; font-size: 11vw;
} }
#main-header.minimized {
height: calc(var(--unit--vertical) * 4.3);
}
.page-cover { .page-cover {
height: 100vh;
padding: calc(10 * var(--unit--vertical)) 0; padding: calc(10 * var(--unit--vertical)) 0;
} }
#entry-btns {
display: none;
}
} }

View file

@ -61,7 +61,11 @@ html {
} }
@media screen and (min-width: 640px) { @media screen and (min-width: 640px) {
:root {
--padding-body: calc(12 * var(--unit--horizontal));
}
body { body {
padding: 0 calc(6 * var(--unit--horizontal)); padding-left: var(--padding-body);
max-width: calc(17 * var(--unit--horizontal));
} }
} }

View file

@ -1,4 +1,7 @@
/* ================= PANELS ================= */ /* ================= PANELS ================= */
#desktop-nav {
display: none;
}
.panel { .panel {
position: fixed; position: fixed;
width: 100%; width: 100%;
@ -8,7 +11,6 @@
outline: 1px solid #fff; outline: 1px solid #fff;
transition: all 0.5s var(--curve-sine); transition: all 0.5s var(--curve-sine);
z-index: 2; z-index: 2;
padding: 0 var(--unit--horizontal);
padding-top: calc(var(--unit--vertical) * 5); padding-top: calc(var(--unit--vertical) * 5);
box-sizing: border-box; box-sizing: border-box;
@ -16,6 +18,11 @@
flex-direction: column; flex-direction: column;
} }
.search,
.panel__items {
padding: 0 var(--unit--horizontal);
}
.panel--left { .panel--left {
left: calc(-100vw - 1px); left: calc(-100vw - 1px);
} }
@ -36,6 +43,7 @@
background-color: #000; background-color: #000;
z-index: 1; z-index: 1;
top: 0; top: 0;
box-sizing: border-box;
} }
.search__input { .search__input {
all: unset; all: unset;
@ -59,8 +67,8 @@
height: 1.2rem; height: 1.2rem;
padding: 0.5rem; padding: 0.5rem;
bottom: 0; bottom: 0;
right: calc(var(--unit--horizontal) / 6); right: var(--unit--horizontal);
transform: translateX(0.5rem); transform: translateX(0.5rem) translateY(-0.2rem);
} }
button.search__icon { button.search__icon {
cursor: pointer; cursor: pointer;
@ -76,12 +84,11 @@ button.search__icon {
.panel-close { .panel-close {
justify-content: center; justify-content: center;
width: calc(100% - 2 * var(--unit--horizontal)); width: calc(100% - 2 * var(--unit--horizontal));
bottom: 0;
outline: none; outline: none;
border-top: 1px solid #fff; border-top: 1px solid #fff;
font-size: var(--font-size-m); font-size: var(--font-size-m);
background-color: #000; background-color: #000;
padding: calc(var(--unit--vertical) / 2) 0; padding: calc(var(--unit--vertical) / 2) var(--unit--horizontal);
margin-bottom: env(safe-area-inset-bottom); margin-bottom: env(safe-area-inset-bottom);
} }
@ -119,3 +126,38 @@ button.search__icon {
.text { .text {
margin-bottom: var(--unit--vertical); margin-bottom: var(--unit--vertical);
} }
@media screen and (min-width: 640px) {
#desktop-nav {
display: block;
position: fixed;
box-sizing: border-box;
z-index: 3;
top: 0;
left: 0;
width: var(--padding-body);
height: 100vh;
padding: var(--unit--vertical) var(--unit--horizontal);
}
#desktop-nav .empty {
height: calc(3 * var(--unit--vertical));
}
.panel {
z-index: 4;
width: var(--padding-body);
padding-top: var(--unit--vertical);
}
.panel-close {
display: none;
}
.panel--right {
right: auto;
left: calc(-100vw - 1px);
}
.panel--right.open {
left: 0;
}
}

View file

@ -20,7 +20,6 @@
#logo * { #logo * {
font-size: 25vw; font-size: 25vw;
line-height: 4rem; line-height: 4rem;
transform: translate(-2px, -13px);
font-weight: var(--font-weight-extra-bold); font-weight: var(--font-weight-extra-bold);
} }

View file

@ -1,53 +0,0 @@
:root {
--color-background: #000;
--color-primary: #ffffff;
--color-primary--transparent: rgba(255, 255, 255, 0.86);
--color-secondary: rgb(120, 171, 150, 0.86);
--color-secondary--light: rgb(119, 177, 157, 0.2);
--color-secondary--x-light: rgb(119, 177, 157, 0.1);
--unit--horizontal: 5vw;
--unit--vertical: 1.7rem;
--unit--vertical-relative: calc(
var(--unit--vertical) * var(--window-height-factor)
);
--font-size-s: 0.8rem;
--font-size-sm: calc(var(--font-size-s) * 1);
--font-size-m: calc(var(--font-size-s) * 1.5);
--font-size-l: calc(var(--font-size-m) * 1.5);
--font-size-xl: calc(var(--font-size-l) * 1.5);
--font-size-xxl: calc(var(--font-size-xl) * 1.5);
--font-weight-light: 200;
--font-weight-bold: 400;
--font-weight-extra-bold: 550;
--opacity-light: 0.6;
--curve-sine: cubic-bezier(0.445, 0.05, 0.55, 0.95);
}
@media screen and (min-width: 640px) {
:root {
--color-background: #000;
--color-primary: #ffffff;
--color-primary--transparent: rgba(255, 255, 255, 0.86);
--color-secondary: rgb(120, 171, 150, 0.86);
--color-secondary--light: rgb(119, 177, 157, 0.25);
--color-secondary--x-light: rgb(119, 177, 157, 0.15);
--unit--horizontal: 5vw;
--unit--vertical: 1.7rem;
--font-size-s: 0.9rem;
--font-size-m: calc(var(--font-size-s) * 1.5);
--font-size-l: calc(var(--font-size-m) * 1.5);
--font-size-xl: calc(var(--font-size-l) * 1.5);
--font-size-xxl: calc(var(--font-size-xl) * 1.5);
--font-weight-light: 200;
--font-weight-bold: 400;
--font-weight-extra-bold: 550;
}
}

View file

@ -47,7 +47,7 @@
--color-secondary--light: rgb(119, 177, 157, 0.25); --color-secondary--light: rgb(119, 177, 157, 0.25);
--color-secondary--x-light: rgb(119, 177, 157, 0.15); --color-secondary--x-light: rgb(119, 177, 157, 0.15);
--unit--horizontal: 5vw; --unit--horizontal: 2.5vw;
--unit--vertical: 1.7rem; --unit--vertical: 1.7rem;
--font-size-s: 0.9rem; --font-size-s: 0.9rem;

View file

@ -22,36 +22,6 @@ function throttle(callback, limit) {
}; };
} }
function toggleTab(data, tab) {
if (data.activeTab === tab) {
window.scrollTo({
top: 0,
behavior: "smooth",
});
setTimeout(() => {
data.isOpen = false;
data.activeTab = "";
}, 500);
} else {
data.activeTab = tab;
data.isOpen = true;
scrollToElem(".active-tab");
}
}
function scrollToElem(selector) {
document.querySelector(".active-tab").scrollTop = 0;
setTimeout(() => {
const yOffset = -7 * verticalUnit;
const elem = document.querySelector(selector);
const top = elem.getBoundingClientRect().top;
window.scrollTo({
top: top + window.scrollY + yOffset,
behavior: "smooth",
});
}, 100);
}
function setWindowHeightFactor() { function setWindowHeightFactor() {
const windowHeight = window.innerHeight; const windowHeight = window.innerHeight;
const min = 650; const min = 650;
@ -111,7 +81,8 @@ function toggleLogoState() {
} }
} }
function togglePanel(side) { function togglePanel(side, event) {
event.stopPropagation();
document.querySelector(`.panel--${side}`).classList.toggle("open"); document.querySelector(`.panel--${side}`).classList.toggle("open");
const isOpen = document const isOpen = document
.querySelector(`.panel--${side}`) .querySelector(`.panel--${side}`)
@ -120,9 +91,11 @@ function togglePanel(side) {
const scrollY = window.scrollY || window.pageYOffset; const scrollY = window.scrollY || window.pageYOffset;
if (isOpen) { if (isOpen) {
document.querySelector("html").style.overflowY = "hidden"; if (window.innerWidth < 640) {
document.querySelector("#main-header").classList.remove("minimized"); document.querySelector("html").style.overflowY = "hidden";
} else { document.querySelector("#main-header").classList.remove("minimized");
}
} else if (window.innerWidth < 640) {
document.querySelector("html").style.overflowY = ""; document.querySelector("html").style.overflowY = "";
if (scrollY > 10) { if (scrollY > 10) {
document.querySelector("#main-header").classList.add("minimized"); document.querySelector("#main-header").classList.add("minimized");
@ -130,6 +103,12 @@ function togglePanel(side) {
} }
} }
function closePanels() {
document.querySelectorAll(".panel").forEach((panel) => {
panel.classList.remove("open");
});
}
function fixFootNotes() { function fixFootNotes() {
const footnotes = document.querySelectorAll('a[href^="#sdfootnote"]'); const footnotes = document.querySelectorAll('a[href^="#sdfootnote"]');
@ -163,4 +142,18 @@ document.addEventListener("DOMContentLoaded", () => {
setTimeout(() => { setTimeout(() => {
enableToggleEntriesVisibility(); enableToggleEntriesVisibility();
}, 100); }, 100);
window.addEventListener("click", () => {
closePanels();
});
window.addEventListener("keyup", (event) => {
if (event.key === "Escape") {
closePanels();
}
});
document.querySelectorAll(".panel").forEach((panel) => {
panel.addEventListener("click", (event) => {
event.stopPropagation();
});
});
}); });

View file

@ -1,12 +1,12 @@
<?php <?php
return [ return array(
'debug' => true, 'debug' => true,
'panel' => [ 'panel' => array(
'menu' => require __DIR__ . '/menu.php', 'menu' => require __DIR__ . '/menu.php',
], ),
'routes' => [ 'routes' => array(
require __DIR__ . '/routes/virtual-author.php', require __DIR__ . '/routes/virtual-author.php',
require __DIR__ . '/routes/virtual-category.php', require __DIR__ . '/routes/virtual-category.php',
] ),
]; );

View file

@ -16,11 +16,11 @@ $isOpen = isset($isOpen) ? $isOpen : false;
</header> </header>
<div id="entry-btns"> <div id="entry-btns">
<button <button
class="entry-btn entry-btn--left toggle-btn left" class="entry-btn entry-btn--left toggle-btn--left"
onclick="togglePanel('left')" onclick="togglePanel('left', event)"
>années</button> >années</button>
<button <button
class="entry-btn entry-btn--right toggle-btn right" class="entry-btn entry-btn--right toggle-btn--right"
onclick="togglePanel('right')" onclick="togglePanel('right', event)"
>categories</button> >categories</button>
</div> </div>

View file

@ -7,16 +7,19 @@ $entryTopPos = $entryTopPos ?? 20;
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title><?= $site->title() ?><?= e($page->url() !== $site->url(), '-' . $page->title()) ?></title> <title><?= $site->title() ?><?= e($page->url() !== $site->url(), '-' . $page->title()) ?></title>
<link rel="stylesheet" href="<?= url('assets/css/style.css') . '?version-cache-prevent' . rand(0, 1000) ?>" /> <link rel="stylesheet" href="<?= url('assets/css/style.css') . '?version-cache-prevent' . rand(0, 1000) ?>" />
<script src="<?= url('assets') ?>/js/script.js?version-cache-prevent<?= rand(0, 1000)?>" defer></script> <script src="<?= url('assets') ?>/js/script.js?version-cache-prevent<?= rand(0, 1000)?>" defer></script>
<script defer src="<?= url('assets/js/alpine.min.js') ?>"></script> <script defer src="<?= url('assets/js/alpine.min.js') ?>"></script>
<script defer src="<?= url('assets/js/ragadjust.js') ?>"></script> <script defer src="<?= url('assets/js/ragadjust.js') ?>"></script>
<meta name="robots" content="noindex, nofollow, noarchive"> <meta name="robots" content="noindex, nofollow, noarchive">
</head> </head>
<body class="grid" data-template="<?= $page->template() ?>" > <body class="grid" data-template="<?= $page->template() ?>" >
<header id="main-header"> <header id="main-header">
<div id="logo" > <div id="logo" >
<a href="/" class="no-line"> <a id="logo__link" href="/" class="no-line">
<h1 id="actuel">actuel</h1> <h1 id="actuel">actuel</h1>
<h1 id="inactuel">inactuel</h1> <h1 id="inactuel">inactuel</h1>
</a> </a>

View file

@ -1,3 +1,29 @@
<sidebar id="desktop-nav">
<ul>
<li class="left top" style="--left: <?= rand(0, 4) ?>; --top: <?= rand(0, 6) ?>">
<button class="toggle-btn toggle-btn--left" onclick="togglePanel('left', event)">
années
</button>
</li>
<li class="left top" style="--left: <?= rand(0, 4) ?>; --top: <?= rand(0, 6) ?>">
<button class="toggle-btn toggle-btn--left" onclick="togglePanel('right', event)">
catégories
</button>
</li>
<li class="empty
"></li>
<li class="left top" style="--left: <?= rand(0, 4) ?>; --top: <?= rand(0, 6) ?>">
<a href="#">
s'abonner
</a>
</li>
<li class="left top" style="--left: <?= rand(0, 4) ?>; --top: <?= rand(0, 6) ?>">
<a href="<?= $site->find('a-propos')->url() ?>">
à propos
</a>
</li>
</ul>
</sidebar>
<nav <nav
class="panel panel--left" class="panel panel--left"
@ -7,7 +33,7 @@
<input <input
class="search__input" class="search__input"
type="text" type="text"
placeholder="titre / auteur / année / catégorie" placeholder="titre / auteur / année / catégor"
x-model="search" x-model="search"
> >
<img <img
@ -58,7 +84,7 @@
<button <button
:class="edito ? 'open' : 'close'" :class="edito ? 'open' : 'close'"
x-show="search.length === 0" x-show="search.length === 0"
class="see-more toggle left" class="see-more toggle-btn toggle-btn--left"
@click="edito = !edito" @click="edito = !edito"
>Lire</button> >Lire</button>
<ul class="panel-item-content__texts"> <ul class="panel-item-content__texts">
@ -111,7 +137,7 @@
<input <input
class="search__input" class="search__input"
type="text" type="text"
placeholder="titre / auteur / année / catégorie" placeholder="titre / auteur / année / catégor"
x-model="search" x-model="search"
> >
<img <img
@ -131,8 +157,8 @@
<ul class="panel__items"> <ul class="panel__items">
<?php <?php
$categories = $kirby->collection('categories'); $categories = $kirby->collection('categories');
shuffle($categories); shuffle($categories);
foreach($categories as $category): ?> foreach($categories as $category): ?>
<li <li
class="panel__item " class="panel__item "
x-data='{ isOpen: false }' x-data='{ isOpen: false }'
@ -156,8 +182,8 @@
> >
<ul class="panel-item-content__texts"> <ul class="panel-item-content__texts">
<?php <?php
shuffle($category['texts']); shuffle($category['texts']);
foreach($category['texts'] as $article): ?> foreach($category['texts'] as $article): ?>
<li <li
class="text" class="text"
x-data="{ x-data="{

View file

@ -25,7 +25,7 @@ $activeTab = isset($activeTab) ? Str::slug($activeTab) : '';
><?= $left['label'] ?></button> ><?= $left['label'] ?></button>
<?php endif ?> <?php endif ?>
<button <button
class="toggle right" class="toggle-btn toggle-btn--right"
:class="activeTab === 'texts' ? 'open' : 'close'" :class="activeTab === 'texts' ? 'open' : 'close'"
title="Voir tous les textes" title="Voir tous les textes"
@click="toggleTab($data, 'texts')" @click="toggleTab($data, 'texts')"
@ -69,9 +69,9 @@ $activeTab = isset($activeTab) ? Str::slug($activeTab) : '';
<?php if (!$authorFilter || $authorFilter == $article->author()->toUser()->name()->value()) : ?> <?php if (!$authorFilter || $authorFilter == $article->author()->toUser()->name()->value()) : ?>
<?php snippet( <?php snippet(
'text-item', 'text-item',
[ array(
'article' => $article 'article' => $article
] )
) ?> ) ?>
<?php endif ?> <?php endif ?>
<?php endforeach ?> <?php endforeach ?>

View file

@ -10,7 +10,7 @@
> >
<h2 class="main-title <?= setTitleFontSizeClass($site->subtitle()) ?>"><?= $site->subtitle() ?></h2> <h2 class="main-title <?= setTitleFontSizeClass($site->subtitle()) ?>"><?= $site->subtitle() ?></h2>
<p <p
class="main-edito-btn | toggle-btn left" class="main-edito-btn | toggle-btn toggle-btn--left"
>édito</p> >édito</p>
</a> </a>
<?php endslot() ?> <?php endslot() ?>

View file

@ -2,11 +2,11 @@
<main id="<?= $page->template() ?>"> <main id="<?= $page->template() ?>">
<div id="entry-btns"> <div id="entry-btns">
<button <button
class="entry-btn entry-btn--left toggle-btn left" class="entry-btn entry-btn--left toggle-btn toggle-btn--left"
onclick="togglePanel('left')" onclick="togglePanel('left')"
>années</button> >années</button>
<button <button
class="entry-btn entry-btn--right toggle-btn right" class="entry-btn entry-btn--right toggle-btn toggle-btn--right"
onclick="togglePanel('right')" onclick="togglePanel('right')"
>categories</button> >categories</button>
</div> </div>