diff --git a/pass/public/images/hamburger-menu.svg b/pass/public/images/hamburger-menu.svg new file mode 100644 index 0000000000000000000000000000000000000000..f1ffc2aa4148837ef59d3c04d86b27d895ca5b49 --- /dev/null +++ b/pass/public/images/hamburger-menu.svg @@ -0,0 +1,8 @@ +<svg width="15px" height="15px" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg"> + <path + fill-rule="evenodd" + clip-rule="evenodd" + d="M1.5 3C1.22386 3 1 3.22386 1 3.5C1 3.77614 1.22386 4 1.5 4H13.5C13.7761 4 14 3.77614 14 3.5C14 3.22386 13.7761 3 13.5 3H1.5ZM1 7.5C1 7.22386 1.22386 7 1.5 7H13.5C13.7761 7 14 7.22386 14 7.5C14 7.77614 13.7761 8 13.5 8H1.5C1.22386 8 1 7.77614 1 7.5ZM1 11.5C1 11.2239 1.22386 11 1.5 11H13.5C13.7761 11 14 11.2239 14 11.5C14 11.7761 13.7761 12 13.5 12H1.5C1.22386 12 1 11.7761 1 11.5Z" + fill="currentColor" + /> +</svg> diff --git a/pass/public/styles/base.less b/pass/public/styles/base.less index 1270bebbea67955e75f6e8a3a3e9f404d0be2440..9f900c9aa5f4ca0d047f594d95daf24568c5e800 100644 --- a/pass/public/styles/base.less +++ b/pass/public/styles/base.less @@ -38,6 +38,7 @@ html { body { margin: 0; padding: 0; + min-width: @body-scroll-break-point; } } @@ -50,12 +51,16 @@ button { } nav { + @logo-break-point: 720px; // Breakpoint when nav items won't fit besides logo + @nav-items-break-point: 560px; // Breakpoint when nav items won't fit into their own row + background-color: @color-main; color: @color-main-font-color; display: flex; + flex-wrap: wrap; + position: relative; align-items: center; - gap: 2rem; - padding: 0 1rem; + gap: 0 2rem; #page-logo a { display: flex; @@ -63,13 +68,21 @@ nav { gap: 0.5rem; text-decoration: none; color: inherit; + padding-left: 1rem; > img { - width: 2.5rem; + width: 1.7rem; filter: brightness(0) invert(1); } } + > input#nav-opener { + display: none; + } + > label[for="nav-opener"] { + display: none; + } + ul { list-style-type: none; margin: 0; @@ -93,4 +106,54 @@ nav { } } } + + @media (max-width: @logo-break-point) { + > ul { + max-height: 0; + visibility: hidden; + transition: max-height 0.5s, padding 0.5s; + } + + > input#nav-opener { + display: block; + visibility: hidden; + flex-grow: 1; + &:checked { + + label { + transform: rotate(90deg); + } + ~ ul { + max-height: 500px; + padding: 1rem 0; + visibility: visible; + } + } + } + //display: none; + > label[for="nav-opener"] { + display: flex; + margin: 1rem; + align-items: center; + transition: transform 1s; + cursor: pointer; + + > img { + width: 1.5em; + } + } + } + + @media (max-width: @nav-items-break-point) { + > ul { + flex-direction: column; + width: 100%; + gap: 1rem; + > li { + text-align: center; + &.whitespace { + display: none; + } + } + } + } } diff --git a/pass/public/styles/misc/vars.less b/pass/public/styles/misc/vars.less index 06b5e9c47947f77a56871a557033c15829ddb16a..825c2290aee22e59581d2f847b89d4001eaec7fe 100644 --- a/pass/public/styles/misc/vars.less +++ b/pass/public/styles/misc/vars.less @@ -1,3 +1,7 @@ @color-main: rgb(255, 127, 0); @color-main-hover: lighten(@color-main, 5%); @color-main-font-color: white; + +@body-scroll-break-point: 320px; +@logo-break-point: 720px; // Breakpoint when nav items won't fit besides logo +@nav-items-break-point: 560px; // Breakpoint when nav items won't fit into their own row diff --git a/pass/views/templates/page_header.ejs b/pass/views/templates/page_header.ejs index cdefd1ce1806ae600a683f19700f9f645cdce8b8..f620a862d9d75d3af50f3b1cda644754cc66a40d 100644 --- a/pass/views/templates/page_header.ejs +++ b/pass/views/templates/page_header.ejs @@ -2,6 +2,7 @@ <html> <head> <title>MetaGer - Pass</title> + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <link rel='stylesheet' href='/styles/base.css' /> <%_ if (typeof css !== 'undefined') { -%> <%_ css.forEach(css_file => { -%> @@ -22,6 +23,8 @@ <h1>Pass</h1> </a> </div> + <input type="checkbox" name="nav-opener" id="nav-opener" aria-hidden="true"> + <label for="nav-opener"><img src="/images/hamburger-menu.svg" alt="Open Menu"></label> <ul> <li><a href="#">Informationen</a></li> <li><a href="#">Preise</a></li>