Page 1 of 1
CSS sticky header
Posted: Mon 8. May 2017, 18:13
by kukki
Wie sollte es auch anders sein, neben dem Internet Explodierer unterstützt MS EGDE die Option nicht. Es gibt da zwar ein
, was mich aber nicht so richtig von Hocker haute, weil das nicht
position: sticky ist.
Ergo habe ich
folgendes Plugin benutzt, das auf Anhieb funktionierte:
Code: Select all
<script src="jquery.sticky.js"></script>
.....
<script>
$(document).ready(function(){
$("#sticker").sticky({topSpacing:0});
});
</script>
Den Nav-Bereich mit 'nem <div id="sticker"> ummanteln, JScript per <!-- JS: ...--> als Plugin laden (kann man noch durch Verschlüsseln auf Byte-Verbrauch von 25% runterdrücken)
Eventuelle Anpassungen sind notwendig in der CSS bei Text mit Bild/ Formular, aber das wird wohl jeder selber hinkriegen. Mein FlexBox-Layout hat das alles gut gefrssen und funktioniert wie gewollt.
Re: CSS sticky header
Posted: Tue 9. May 2017, 07:51
by Oliver Georgi
Warum sollte Edge position: fixed
nicht unterstützen?
Re: CSS sticky header
Posted: Tue 9. May 2017, 12:28
by kukki
Überschrift: sticky header
Sorry wenn dass nicht sofort ersichtlich war, hab's oben geändert
Re: CSS sticky header
Posted: Tue 9. May 2017, 12:51
by Oliver Georgi
wo ist der Unterschied für Deinen Einsatzzeck?
Re: CSS sticky header
Posted: Tue 9. May 2017, 14:55
by top
Kannte ich bis eben auch noch nicht.
Zur besseren Erklärung habe ich hier mal damit etwas gespielt:
https://jsfiddle.net/3uku4oL7/
Die fehlende IE- und Edge-Unterstützung ist mal wieder ärgerlich.
Sollte ich mal auf die Idee kommen so was zu brauchen, werde ich mich hoffentlich an das angepriesene javascript erinnern.
Re: CSS sticky header
Posted: Tue 9. May 2017, 15:24
by Oliver Georgi
Im Moment noch experimentell und man muss aufpassen, es nicht mit dem Einsatzzweck von fixed zu verwechseln. Aus meiner Sicht hat Kukki das getan.
In Boostrap existiert für sowas z.B. affix. Siehe
Demo
Re: CSS sticky header
Posted: Wed 10. May 2017, 10:59
by update
Was dabei immer ein bisschen zu kurz kommt, ist die Überlegung, was man macht, wenn man ein sehr umfangreiches Menü dieser Art hat. Dann kann's passieren, dass das untere Ende bei kleineren Bildschirmen "out of sight" ist und man nicht mehr an diese Menüpunkte rankommt.
Re: CSS sticky header
Posted: Wed 10. May 2017, 12:28
by top
Elemente die ich mit "fixed" festgetackert habe und bei denen die Gefahr besteht, dass wichtige Elemente am Ende unerreichbar abgeschnitten werden, verpasse ich meistens noch ein "max-height: 100%;" und "overflow-y: auto;".
So bekommt der Block dann bei Bedarf einen eigenen Scrollbalken.
Re: CSS sticky header
Posted: Wed 10. May 2017, 12:50
by kukki
Oliver Georgi wrote: .... von fixed zu verwechseln. Aus meiner Sicht hat Kukki das getan.
Kann ich nicht folgen, ist aber auch wurscht. STICKY wir nicht unterstützt- "fertich" und da nutzt die MS-Notaion auch nicht viel weiter.
Das Script habe ich erst einmal im Einsatz, bringt aber mit dem neuen FlexBox-Modell ein paar Hürden mit. Ich schaue mal nach einer passableren und einfachen Lösung. Bei "floating"-Lösungen klappt as super!
Re: CSS sticky header
Posted: Wed 10. May 2017, 12:54
by kukki
update wrote:... untere Ende bei kleineren Bildschirmen "out of sight" ist und man nicht mehr an diese Menüpunkte rankommt.
Habe ich schon mit einigen Anwendern diskutiert. Für diese Option habe ich die Redakteure/ Admins verantwortlich gemacht. Und hat geholfen, da man sich
dann einfach auch Gedanken machte, wie weit man ein Menü aufdröselt oder lieber doch nicht.
Re: CSS sticky header
Posted: Thu 11. May 2017, 16:51
by kukki
Nach einigen Probieren, Lesen und wieder Probieren bin ich bei jQuery Script hängengeblieben, zumal das obige Script easy aber nicht ganz sauber bei Flexbox-Modell funktioniert. Ergo habe ich folgendes eingesetzt, was man(n) noch jederzeit modifizieren kann, aber den billigen Plätzen die beste Aussicht gibt:
Code: Select all
<!-- JS:
$(document).on("scroll", function()
{
if (($(document).scrollTop() >= 'xxx') && ($(window).width() >= 'yyy' ))
{
$(".clearHeader").addClass("fixHeader");
$("header img").css({ "max-width" : "0", "transition" : "all 0s" });
else
{
$(".clearHeader").removeClass("fixHeader");
$("header img").css({ "max-width" : "33%", "transition" : "all .5s ease 0s" });
}
});
-->
<!-- CSS:
.fixHeader { height:35px; position:fixed; top:0; padding: 15px;}
.fixHeader img{ margin:0;}
-->
Schon hat man auch im MS Egde einen "sticky header." Da kann man noch einiges dran machen, aber der Sinn des Ganzen ist erfüllt, die Website mit Flexbox-Modell funktioniert auch jetzt wie gewollt unter MS Egde
Re: CSS sticky header
Posted: Thu 11. May 2017, 17:10
by Oliver Georgi
absolute ineffizient, Wahnsinn!
Re: CSS sticky header
Posted: Fri 12. May 2017, 06:00
by Oliver Georgi
Um das ein wenig aufzulösen, solltest man grundsätzlich folgende Überlegungen anstellen:
- Wann soll das initialisiert werden, hier ist OnReady empfohlen!
- Dann cachen, also die zu benutzenden Elemente in einer Variablen außerhalb der Funktion speichern! So wichtig! Und wann immer möglich, mit
id
statt class
statt <tag>
arbeiten!
- Du möchtest exakt 1 Element ansprechen, außerdem ist dann
id
am schnellsten und effizient
- Gefräßige Selektoren wie
'element children'
vermeiden, präziser definieren, id
nehmen, denn es kann wie im Bsp. theoretisch n <header>
mit n <img>
darin geben
- Nicht unnütz Stile definieren, wenn eine Elternklasse bereits alle Eigenschaften mitbringen kann
- Immer prüfen, ob eine abzufragende Bedingung bereits erfüllt ist – dann abbrechen und nicht immer und immer wieder neu anwenden
- Versuche aufwendige Funktionen zu vermeiden, wenn man z.B. durch Abfragen der zu setzenden Bedingung alles abkürzen könnte
Code: Select all
<!-- JS:ready
$document.on('scroll', function() {
var $header = $('.clearHeader'),
$headerImg = $('img', $header),
$document = $(document)
$window = $(window)
$scrollTop = 123
$winWidth = 123;
$document.on('scroll', function() {
var $isFixed = $header.hasClass('fixHeader');
if(!$isFixed && $document.scrollTop() >= $scrollTop && $window.width() >= $winWidth) {
$header.addClass('fixHeader');
} else if($isFixed) {
$header.removeClass('fixHeader');
}
});
});
-->
<!-- CSS:
.clearHeader img {max-width: 33%; transition: all .5s ease 0s;}
.clearHeader.fixHeader {height:35px; position:fixed; top:0; padding: 15px;}
.clearHeader.fixHeader img {margin:0; max-width: 0; transition: all 0s;}
-->
Das obige ist natürlich ungetestet und soll die Richtung zeigen.