\documentclass[a4paper, 11pt]{article}
\renewcommand{\familydefault}{\sfdefault}
\usepackage{a4wide}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{color}
\usepackage{graphicx}
\usepackage{setspace}
\usepackage{ulem}
\usepackage{listings}
\usepackage{float}
\usepackage[rflt]{floatflt}
\usepackage{tabularx}
\setlength{\parindent}{0pt}
\title{Sticky (Header) - Vanilla JS}
\usepackage[
pdftitle={Sticky (Header) - Vanilla JS}
pdfsubject={Sticky Header / Elements realisiert im Stylesheet und als JavaScript Fallback}
pdfauthor={}
pdfkeywords={StyleSheet, JavaScript, CSS, Sticky Header}
]{hyperref}
\definecolor{darkblue}{rgb}{0,0,.5}
\hypersetup{pdftex=true, colorlinks=true, breaklinks=true, linkcolor=darkblue, menucolor=darkblue, pagecolor=darkblue, urlcolor=darkblue}
\begin{document}Sticky (Header) - Vanilla JS
\singlespacing
{\LARGE \textbf{\label{sec:title}Sticky Header / Elements}}

\singlespacing
{\large \textbf{\label{sec:subtitle}StyleSheet und JavaScript Fallback}}

Seit einiger Zeit wird in den Browsern das Verhalten Sticky bereits durch CSS unterstützt, wo bei alten Browserern noch ein JavaScript erforderlich war. Wenn man alte Browser vernachlässigen kann reichen also nur ein paar Zeilen CSS, auch wenn man alte Browser unterstützen möchte reicht ein kleines JavaScript. Wo im JavaScript noch jeweils ein Eventlistener auf Scroll und Resize benötigt wird, hat man in der nativen CSS Variante natürlich in Sachen Performance einiges gewonnen.

Das Setzen des Attributes position: sticky und der Angabe des Wertes für top an dem das Element \&quot;einrasten\&quot; soll reich bereits aus, alternativ wird dem Element im Augenblick wenn es das Verhalten \&quot;Sticky\&quot; einnehmen soll, also wiederum an der in top angegeben Position, die Klasse sticky hinzugefügt, wird diese Position unterschritten, wird natürlich diese Klasse auch wieder entfernt.

\singlespacing
{\small \textbf{StyleSheet:}}
\begin{lstlisting}[breaklines]@media screen \{\newline
  \#toolbar \{\newline
    position: sticky;\newline
    position: -webkit-sticky;\newline
    top: 0;\newline
  \}\newline
  \#toolbar.sticky \{\newline
    position: fixed;\newline
  \}\newline
\}\newline
@media screen and (min-width:768px) \{\newline
  \#nav-container \{\newline
    position: sticky;\newline
    position: -webkit-sticky;\newline
    top: 40px;\newline
  \}\newline
  \#nav-container.sticky \{\newline
    position: fixed;\newline
  \}\newline
\}\end{lstlisting}

Zur Identifizierung des Elementes oder der Elemente welches ich als sticky behandeln möchete, füge ich dem Tag das Attribut data-type=\&quot;sticky\&quot; hinzu.

\singlespacing
{\small \textbf{JavaScript:}}

\href{http://www.gocher.me/code/sticky.js}{sticky.js}
\end{document}