nextcloud/core/css/header.scss
Ferdinand Thiessen 0885245235
refactor(styles): Make padding not a magic value
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2024-06-27 12:13:14 +02:00

271 lines
5.5 KiB
SCSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*!
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
@use 'variables';
/* prevent ugly selection effect on accidental selection */
#header,
#expanddiv {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
a:not(.button):focus-visible, button:not(.button-vue):focus-visible, div[role="button"]:focus-visible {
outline: none;
}
a:not(.button):focus-visible::after, .button-vue:focus-visible::after, div[role=button]:focus-visible::after {
content: " ";
position: absolute;
transform: translateX(-50%);
width: 12px;
height: 2px;
border-radius: 3px;
background-color: var(--color-background-plain-text);
left: 50%;
opacity: 1;
}
a:not(.button):focus-visible::after, .button-vue:focus-visible::after {
bottom: 2px;
}
.header-right {
// Add some spacing so the last entry looks ok
margin-inline-end: calc(3 * var(--default-grid-baseline));
a:not(.button):focus-visible::after, div[role=button]:focus-visible::after {
bottom: 4px;
}
#expand.menutoggle:focus-visible::after {
left: 40%;
}
}
}
/* HEADERS ------------------------------------------------------------------ */
#body-user #header,
#body-settings #header,
#body-public #header {
display: inline-flex;
position: absolute;
top: 0;
width: 100%;
z-index: 2000;
height: variables.$header-height;
box-sizing: border-box;
justify-content: space-between;
}
/* LOGO and APP NAME -------------------------------------------------------- */
#nextcloud {
padding: 5px 0;
padding-left: 86px; // logo width + 2* pa
position: relative;
height: calc(100% - 4px);
box-sizing: border-box;
opacity: 1;
align-items: center;
display: flex;
flex-wrap: wrap;
overflow: hidden;
margin: 2px;
&:hover, &:active {
opacity: 1;
}
}
@mixin header-menu-height() {
min-height: calc(44px * 1.5); // show at least 1.5 entries
max-height: calc(100vh - #{variables.$header-height} - 8px);
}
#header {
/* Header menu */
$header-menu-entry-height: 44px;
.header-right > div > .menu {
background-color: var(--color-main-background);
filter: drop-shadow(0 1px 5px var(--color-box-shadow));
border-radius: var(--border-radius-large);
box-sizing: border-box;
z-index: 2000;
position: absolute;
max-width: 350px;
@include header-menu-height();
right: 8px; // relative to parent
top: variables.$header-height;
margin: 0;
overflow-y: auto;
&:not(.popovermenu) {
display: none;
}
/* Dropdown arrow */
&:after {
border: 10px solid transparent;
border-bottom-color: var(--color-main-background);
bottom: 100%;
content: ' ';
height: 0;
width: 0;
position: absolute;
pointer-events: none;
right: 10px;
}
& > div,
& > ul {
-webkit-overflow-scrolling: touch;
@include header-menu-height();
}
}
.logo {
display: inline-flex;
background-image: var(--image-logoheader, var(--image-logo, url('../img/logo/logo.svg')));
background-repeat: no-repeat;
background-size: contain;
background-position: center;
width: 62px;
position: absolute;
left: 12px;
top: 1px;
bottom: 1px;
// Invert if not customized and background is bright
filter: var(--image-logoheader-custom, var(--background-image-invert-if-bright));
}
.header-appname-container {
display: none;
padding-right: 10px;
flex-shrink: 0;
}
#header-left, .header-left,
#header-right, .header-right {
display: inline-flex;
align-items: center;
}
#header-left, .header-left {
flex: 1 0;
white-space: nowrap;
min-width: 0;
}
#header-right, .header-right {
justify-content: flex-end;
flex-shrink: 1;
}
/* Right header standard */
.header-right {
> .header-menu__trigger img {
filter: var(--background-image-invert-if-bright);
}
> div,
> form {
height: 100%;
position: relative;
> .menutoggle {
display: flex;
justify-content: center;
align-items: center;
width: variables.$header-height;
height: 44px;
cursor: pointer;
opacity: 0.85;
padding: 0;
margin: 2px 0;
&:focus {
opacity: 1;
}
&:focus-visible {
outline: none;
}
}
}
}
}
/* hover effect for app switcher label */
.header-appname-container .header-appname {
opacity: .75;
}
/* TODO: move into minimal css file for public shared template */
/* only used for public share pages now as we have the app icons when logged in */
.header-appname {
color: var(--color-primary-element-text);
font-size: 16px;
font-weight: bold;
margin: 0;
padding: 0;
padding-right: 5px;
overflow: hidden;
text-overflow: ellipsis;
// Take full width to push the header-shared-by bellow (if any)
flex: 1 1 100%;
}
.header-info {
display: flex;
flex-direction: column;
overflow: hidden;
}
.header-title {
overflow: hidden;
text-overflow: ellipsis;
}
.header-shared-by {
color: var(--color-primary-element-text);
position: relative;
font-weight: 300;
font-size: 11px;
line-height: 11px;
overflow: hidden;
text-overflow: ellipsis;
}
/* Skip navigation links show only on keyboard focus */
#skip-actions {
position: absolute;
overflow: hidden;
z-index: 9999;
top: -999px;
left: 3px;
padding: 11px;
display: flex;
flex-wrap: wrap;
gap: 11px;
&:focus-within {
top: variables.$header-height;
}
}
/* Empty content messages in the header e.g. notifications, contacts menu, … */
header #emptycontent,
header .emptycontent {
h2 {
font-weight: normal;
font-size: 16px;
}
[class^='icon-'],
[class*='icon-'] {
background-size: 48px;
height: 48px;
width: 48px;
}
}