Fixed header
Iemand enig idee waarmee deze headerdeze header wordt vastgezet na scrollen? In de broncode kan ik het niet vinden. De oplossing die ik nu gebruik (scrolltofixed) werkt wel, maar er zit een vertraging in waardoor het menu verdwijnt en daarna pas gefixed terug komt. Zie wel iets van position:sticky staan, maar dat lijkt niet te werken, dit fixed namelijk meteen m'n menu en dat is natuurlijk niet de bedoeling.
Waar kijk ik over heen?
Waar kijk ik over heen?
Tja, ik keen dit in Chrome en ik begreep niet echt wat je bedoelde. Opende hem in Firefox na aanleiding van deze website:
http://caniuse.com/#feat=css-sticky
En toen werkte het. Dus dit word alleen ondersteund in Firefox, Safari en Opera.
Ik ben bang dat er geen andere uitweg is om jQuery hiervoor te gebruiken als je browser compatibility wil, maar dan krijg je inderdaad die vertraging.
Als je dat niets uitmaakt, zou je even kunnen kijken naar:
https://developer.apple.com/assets/scripts/global.js -> $(window).scroll(function() {
Het zou een combinatie kunnen zijn met jQuery & position: sticky.
http://caniuse.com/#feat=css-sticky
En toen werkte het. Dus dit word alleen ondersteund in Firefox, Safari en Opera.
Ik ben bang dat er geen andere uitweg is om jQuery hiervoor te gebruiken als je browser compatibility wil, maar dan krijg je inderdaad die vertraging.
Als je dat niets uitmaakt, zou je even kunnen kijken naar:
https://developer.apple.com/assets/scripts/global.js -> $(window).scroll(function() {
Het zou een combinatie kunnen zijn met jQuery & position: sticky.
Hoeft niet eens met sticky position, je kunt position: fixed gebruiken via een class die je toegvoegt/verwijdert afhankelijk van de scrollTop. Dat is een wat meer "pure" css/js oplossing die niet afhangt van position: sticky.
Probleem met scrollTop lijkt dus dat wanneer de header gefixed zou moeten worden, deze toch nog even door gaat om vervolgens weer (gefixed) terug te komen. Dit is althans het geval in Safari, in Firefox etc werkt het prima. Zou het echter ook graag goed zien werken op een iPad.
Dat ligt dan toch aan je CSS, dit lijkt prima te werken:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>sticky navigation</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<style type="text/css">
<!--
html { height: 100%; margin: 0; padding: 0; }
body { height: 100%; margin: 0; padding: 0; }
div.wrapper { margin: 0 auto; width: 850px; min-height: 100%; position: relative; background-color: #f0f0ff; }
div.header { width: 850px; height: 100px; background-color: #ffd0d0; }
div.nav-wrapper { min-height: 50px; } /* voor het tegengaan van het verspringen van #navigation */
div.navbox-1 { width: 850px; height: 25px; line-height: 25px; background-color: #d0ffd0; }
div.navbox-2 { width: 850px; height: 25px; line-height: 25px; background-color: #b0ffb0; }
div#navigation.sticky { position: fixed; top: 0; z-index: 1; }
//-->
</style>
</head>
<body>
<div class="wrapper">
<div class="header">
</div>
<div class="nav-wrapper">
<div id="navigation">
<div class="navbox-1">link 1 - link 2 - link 3</div>
<div class="navbox-2">link 4 - link 5 - link 6</div>
</div>
</div>
<div class="main">
content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />
content<br />content<br />content<br />content<br />content<br />
content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />
content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />
content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />
content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />
content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />
content<br />content<br />content<br />content<br />content<br />
</div>
</div>
<script type="text/javascript">
//<![CDATA[
$(document).ready(function() {
$(document).scroll(function(e) {
if ($(document).scrollTop() > 100) {
$('div#navigation').addClass('sticky');
} else {
$('div#navigation').removeClass('sticky');
}
});
});
//]]>
</script>
</body>
</html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>sticky navigation</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<style type="text/css">
<!--
html { height: 100%; margin: 0; padding: 0; }
body { height: 100%; margin: 0; padding: 0; }
div.wrapper { margin: 0 auto; width: 850px; min-height: 100%; position: relative; background-color: #f0f0ff; }
div.header { width: 850px; height: 100px; background-color: #ffd0d0; }
div.nav-wrapper { min-height: 50px; } /* voor het tegengaan van het verspringen van #navigation */
div.navbox-1 { width: 850px; height: 25px; line-height: 25px; background-color: #d0ffd0; }
div.navbox-2 { width: 850px; height: 25px; line-height: 25px; background-color: #b0ffb0; }
div#navigation.sticky { position: fixed; top: 0; z-index: 1; }
//-->
</style>
</head>
<body>
<div class="wrapper">
<div class="header">
</div>
<div class="nav-wrapper">
<div id="navigation">
<div class="navbox-1">link 1 - link 2 - link 3</div>
<div class="navbox-2">link 4 - link 5 - link 6</div>
</div>
</div>
<div class="main">
content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />
content<br />content<br />content<br />content<br />content<br />
content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />
content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />
content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />
content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />
content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />content<br />
content<br />content<br />content<br />content<br />content<br />
</div>
</div>
<script type="text/javascript">
//<![CDATA[
$(document).ready(function() {
$(document).scroll(function(e) {
if ($(document).scrollTop() > 100) {
$('div#navigation').addClass('sticky');
} else {
$('div#navigation').removeClass('sticky');
}
});
});
//]]>
</script>
</body>
</html>
Gewijzigd op 09/06/2015 13:55:01 door Thomas van den Heuvel
Das vreemd, dit voorbeeld werkt inderdaad als een trein. Zal het eens toe gaan passen op mijn project.
Oh, dat komt waarschijnlijk omdat op het moment dat je elementen "fixed" positioneert, je deze uit de "flow" van de rest van de pagina haalt, daardoor kunnen er dingen verspringen, omdat het element wat "fixed" is geworden op die plek geen ruimte meer inneemt.
Vandaar ook die div.nav-wrapper in het bovenstaande stuk code, zie ook de toelichting in CSS: /* voor het tegengaan van het verspringen van #navigation */
Laat die div maar eens weg, dan verspringt er dus wel het een en ander als je gaat scrollen.
Vandaar ook die div.nav-wrapper in het bovenstaande stuk code, zie ook de toelichting in CSS: /* voor het tegengaan van het verspringen van #navigation */
Laat die div maar eens weg, dan verspringt er dus wel het een en ander als je gaat scrollen.
Gewijzigd op 09/06/2015 22:43:33 door Thomas van den Heuvel




