SELF-Treffen in Mannheim 2025

SELFHTML wird 30 Jahre alt!
Die Mitgliederversammlung findet am 24.05.2025 um 10:00 statt. Alle Mitglieder und Interessierte sind herzlich eingeladen.
Davor und danach gibt es Gelegenheiten zum gemütlichen Beisammensein. → Veranstaltungs-Ankündigung.

Beispiel:Beispiel Menue mit popover.html

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche
<!DOCTYPE html>
	<html lang='de'>
	<head>
		<meta charset='UTF-8'>
		<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<!--		<link rel='stylesheet' type='text/css' media='screen' href='./Beispiel:SELFHTML-Beispiel-Grundlayout.css'>  -->
<!--		<link rel='stylesheet' type='text/css' media='screen' href='https://wiki.selfhtml.org/extensions/Selfhtml/example.php/Beispiel:SELFHTML-Beispiel-Grundlayout.css'> -->
		<title>Beispiel: Seitennavigation mit popover</title>

		<style>
/* menu.css */

body {
	margin: 0em; padding: 0;  
	--bodyTop: 2em; 
	margin-top: var(--bodyTop); 
}
main {
	padding: .5em;
}
/* Position der Navigation */
#sitenav {
	position: absolute;
	top: 1em; 
	left: 2em;
	button {
		font-size: 1em;
		margin: .2em;
		line-height: 1.2;
		&:first-child {
			border: none;
			padding:0;
			&:hover { font-weight: bold;}
		}
	}
	a { 
		text-decoration: none; 
		margin: .2em;
		line-height: 1.6;
		&:hover { font-weight: bold; }
	}
	li {
			list-style: none;
	}
/* Farben */
*, a { 
		background-color: lightgray; 
		color: black;
	}
/* Sprachicon */
	.langselect img { 
		height: 1.5em;
	}
	*:focus {
		font-weight: bold;
	}
	[popover] {
		position-anchor: auto;
		top: anchor(bottom);
		left: anchor(left);
		margin: 0;
		border: none;
		& [popover] {
			top: calc(anchor(bottom) - 1.8em);
			left: anchor(right);
		}
	}
	@media (min-width: 55em) {
		top: 0;
		left: 0;
		z-index: 10;
		li, button {
			min-width: 7em;
			text-align: center;
		}
		& > [popover] {
				/*position: absolute;*/
				display: flex;
				padding-left: 5em;
				left: 0;
				top: 0;
				width: 100vw;
				&  [popover] {
					top: anchor(bottom);
					left: anchor(left);
					&  [popover] {
						top: calc(anchor(bottom) - 1.8em);
						left: anchor(right);
					}
				}
			}
	}
}

/* Skip-Link */
#skip-link { 
	position: absolute; 
	left: 0; top: 0em; 
	background: black; 
	color: white; 
	padding: 0.25em; 
	transform: translateY(-100%);
	transition: 0.2s transform; 
	z-index: 1001; 
	&:focus { 
		transform: translateY(0); 
	}			
} 

/* Für AT */
.visually-hidden {
	position: absolute !important; 
	clip: rect(1px, 1px, 1px, 1px) !important; 
	padding: 0 !important; 
	border: 0 !important; 
	height: 1px !important; 
	width: 1px !important; 
	overflow: hidden !important; 
	white-space: nowrap !important; 
}

/* Ende menu.css */
		</style>
	
		<script type="module">
			// Polyfill für anchor()
			if (!("anchorName" in document.documentElement.style)) {
				console.log('Polyfill laden');
//				const { default: polyfill } = await import("https://unpkg.com/@oddbird/css-anchor-positioning");
					const { default: polyfill } = await import("https://unpkg.com/@oddbird/css-anchor-positioning/dist/css-anchor-positioning-fn.js");
					polyfill(true);
				console.log(polyfill);
			}
		</script>				
		<script>
// menu.js
	'use strict';
// Ende menu.js
		</script>

	</head>

	<body>

		<a id='skip-link' href='#main'>zum Hauptinhalt</a>
		<nav id='sitenav' aria-labelledby='sitenav-label'>
			<h2 id='sitenav-label' class='visually-hidden'>Site-Navigation</h2>
			<button id="level1-toggle" popovertarget="level1" popovertargetaction="toggle">Menü</button>
			<ul id="level1" popover anchor="level1-toggle">
				<li><a href='/'>Startseite</a></li>
				<li>
					<button id="level11-toggle" popovertarget="level11" popovertargetaction="toggle">Bereich 1</button>
					<ul id="level11" popover anchor="level11-toggle">
						<li><a href=''>Seite 1.1</a></li>
						<li><a href=''>Seite 1.2</a></li>
						<li><a href=''>Seite 1.3</a></li>
					</ul>						
				</li>
				<li aria-current='page'>
					<button id="level12-toggle" popovertarget="level12" popovertargetaction="toggle">Bereich 2</button>
					<ul id="level12" popover anchor="level12-toggle">
						<li><a href=''>Seite 2.1</a></li>
						<li><a href=''>Seite 2.2</a></li>
						<li><a href=''>Seite 2.3</a></li>
						<li aria-current='page'>
							<button id="level24-toggle" popovertarget="level24" popovertargetaction="toggle">Bereich 2.4</button>
							<ul id="level24" popover anchor="level24-toggle">
								<li><a href=''>Seite 2.4.1</a></li>
								<li><a href=''>Seite 2.4.2</a></li>
								<li aria-current='page'><a tabindex=0>aktuelle Seite</a></li>
								<li><a href=''>Seite 2.4.4</a></li>
							</ul>
						</li>
						<li>
							<button id="level25-toggle" popovertarget="level25" popovertargetaction="toggle">Bereich 2.5</button>
							<ul id="level25" popover anchor="level25-toggle">
								<li><a href=''>Seite 2.5.1</a></li>
								<li><a href=''>Seite 2.5.2</a></li>
								<li><a href=''>Seite 2.5.3</a></li>
							</ul>
						</li>
						<li><a href=''>Seite 2.6</a></li>
					</ul>
				</li>
				<li><a href=''>Seite 3</a></li>
				<li><a href=''>Seite 4</a></li>
				<li><a href=''>Impressum</a></li>
				<li class='langselect'>
					<button  id="langselect-toggle" popovertarget="langselect" popovertargetaction="toggle"><img src='https://wiki.selfhtml.org/images/8/87/Language-Icon.svg' alt='Sprachwahl, Language selection, Sélection de la langue, Selección de idioma'></button>
					<ul id="langselect" popover anchor="langselect-toggle">
						<li><a href=''>Deutsch</a></li>
						<li><a href=''>English</a></li>
						<li><a href=''>Francais</a></li>
						<li><a href=''>Español</a></li>
					</ul>
				</li>
			</ul>
		</nav>

		<main id='main'>
			<h1>Beispiel: Seitennavigation mit popover</h1>
			<p>Funktioniert z.Zt. (April 2025) nur im Chrome (und Edge?)</p>
			<section>
				<h2>Was?</h2>
				<p>Die Navigation soll folgende Eigenschaften haben:</p>
				<ul>
					<li>Bis zu drei Ebenen.</li>
					<li>Auf schmalen Viewports vertikal angeordnet.</li>
					<li>Auf genügend breiten Viewports horizontal angeordnet.</li>
					<li>Bedienung mit Maus, Touch und Tastatur.</li>
				</ul>
			</section>
			<section>
				<h2>Wie?</h2>
				<p>Basis der Navigation ist eine verschachtelte Liste. Das Öffnen der erfolgt über einen Button vor den UL und die popover-Technik. Die Positionierung der Untermenüs erfolgt über die anchor-Technik.</p>
				<p>Vor die Navigation wird noch ein Skip-Link gesetzt, um Tastatur-Benutzern sowie Besuchern mit assistiven Techniken zu ermöglichen, direkt zum Inhalt zu springen. Per css wird dieser Link aus dem Viewport geschoben und nur bei Focus sichtbar.</p>
				<p>Um Besucher mit assistiven Techniken zu informieren, erhält die Navigation noch eine visuell versteckte Überschrift.</p>
				<p>Per css wird die Navigationsliste je nach Seitenbreite im Quer- oder Hochformat angeordnet.</p>
				<p>Auf schmalen Viewports wird die Navigation hinter einem Menü-Button versteckt. Bei Klick öffnet sich die erste Ebene nach unten und die zweite und dritte nach rechts. Auf genügend breiten Viewports ist der Menü-Button versteckt und die erste Ebene ist immer sichtbar und waagrecht angeordnet. Die zweite Ebene öffnet nach unten, die dritte nach rechts.</p>
				<p>In die Navigation wurde auch ein Untermenü für die Sprachwahl eingebaut. Damit das Sprachwahlmenü unabhängig von der Sprache erkannt wird, wurde hier das durch die „Language Icon Initiative” vorgeschlagene Standard-Icon für Sprachwahlmenüs gewählt.</p>
				<p>In der Beispieldatei sind HTML, CSS und Javascript für das Menü in einer Datei zusammengefasst. Im Einsatz sollten die Teile in getrennten Dateien untergebracht werden.</p>
		  </section>
		</main>

	</body>
</html>