diff --git a/lib/html_body.typ b/lib/html_body.typ index cbb8431..2653552 100644 --- a/lib/html_body.typ +++ b/lib/html_body.typ @@ -28,6 +28,10 @@ theme-picker { margin-left: auto; } + & > * { + margin-left: 0.25rem; + margin-right: 0.25rem; + } } site-container { diff --git a/lib/nav_menu.typ b/lib/nav_menu.typ index 4de0593..1bccf4c 100644 --- a/lib/nav_menu.typ +++ b/lib/nav_menu.typ @@ -1,7 +1,48 @@ #import "./custom_html.typ" as chtml +// Need inline svg for css color control, so no `image` element :( +#let menu-icon = html.elem( + "svg", + attrs: ( + //width: "24", + //height: "24", + style: "width: 2em; height: 2em;", + fill: "currentcolor", + viewBox: "0 0 24 24", + xmlns: "http://www.w3.org/2000/svg" + ), + html.elem("path", attrs: ( + clip-rule: "evenodd", + fill-rule: "evenodd", + d: "M3 6.75A.75.75.0 013.75 6h16.5a.75.75.0 010 1.5H3.75A.75.75.0 013 6.75zM3 12a.75.75.0 01.75-.75h16.5a.75.75.0 010 1.5H3.75A.75.75.0 013 12zm0 5.25a.75.75.0 01.75-.75h16.5a.75.75.0 010 1.5H3.75A.75.75.0 013 17.25z" + )) +) +#let close-icon = html.elem( + "svg", + attrs: ( + //width: "24", + //height: "24", + style: "width: 2em; height: 2em;", + fill: "currentcolor", + viewBox: "0 0 24 24", + xmlns: "http://www.w3.org/2000/svg" + ), + html.elem("path", attrs: ( + clip-rule: "evenodd", + fill-rule: "evenodd", + d: "M5.47 5.47a.75.75.0 011.06.0L12 10.94l5.47-5.47a.75.75.0 111.06 1.06L13.06 12l5.47 5.47a.75.75.0 11-1.06 1.06L12 13.06l-5.47 5.47a.75.75.0 01-1.06-1.06L10.94 12 5.47 6.53a.75.75.0 010-1.06z" + )) +) + /// Buttons to toggle the navigation menu. +/// aria-label is the accessibility label for the toggle. +/// menu-icon and close-icon are the content of the toggle deppending on +/// its state. Be carefull to keep it compatible with both light and dark +/// theme. #let nav-menu-toggle( + aria-label: "Menu Toggle", + menu-icon: menu-icon, + close-icon: close-icon, ) = { ```raw-css body:has(#nav-menu-toggle:checked) #icon-nav-menu { display: none; } @@ -9,6 +50,10 @@ body:has(#nav-menu-toggle:not(:checked)) #icon-nav-menu { display: block; } body:has(#nav-menu-toggle:not(:checked)) #icon-nav-menu-close { display: none; } #nav-menu-toggle-label { + display: flex; + justify-content: center; + align-items: center; + input { opacity: 0; position: absolute; @@ -16,10 +61,10 @@ } } ``` - html.label(id: "nav-menu-toggle-label", { + html.label(id: "nav-menu-toggle-label", aria-label: aria-label, { html.input(type: "checkbox", name: "nav-menu-toggle", id: "nav-menu-toggle") - chtml.icon-container(id: "icon-nav-menu", sym.eq.triple) - chtml.icon-container(id: "icon-nav-menu-close")[X] + chtml.icon-container(id: "icon-nav-menu", menu-icon) + chtml.icon-container(id: "icon-nav-menu-close", close-icon) }) /*