CSS Header effect (change background and color) when scrolling down
I am trying to do a nice effect when the header leaves the current block. I want the background color and the color of the text to change when scrolling down.
html:
<header class="green">Logo</header>
<header class="red">Logo</header>
<section id='content1'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
<section id='content2'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
css:
*
box-sizing: border-box;
margin: 0;
padding: 0;
header
width: 100%;
position: fixed;
display: block;
top: 0;
font-size: 20pt;
padding: 15px 10px
.green
background: green;
color: #000;
z-index: 2
.red
background: red;
color: #fff;
z-index: 1
section
position: relative;
height: 500px;
padding: 100px 10px
#content1
background: #D9D9D9;
z-index: 1
#content2
background: #9FDAD0;
z-index: 2
An example serves best, something like this https://www.dropbox.com/
Thanks!
javascript html css
|
show 2 more comments
I am trying to do a nice effect when the header leaves the current block. I want the background color and the color of the text to change when scrolling down.
html:
<header class="green">Logo</header>
<header class="red">Logo</header>
<section id='content1'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
<section id='content2'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
css:
*
box-sizing: border-box;
margin: 0;
padding: 0;
header
width: 100%;
position: fixed;
display: block;
top: 0;
font-size: 20pt;
padding: 15px 10px
.green
background: green;
color: #000;
z-index: 2
.red
background: red;
color: #fff;
z-index: 1
section
position: relative;
height: 500px;
padding: 100px 10px
#content1
background: #D9D9D9;
z-index: 1
#content2
background: #9FDAD0;
z-index: 2
An example serves best, something like this https://www.dropbox.com/
Thanks!
javascript html css
iám pretty sure they also used javascript to pull it off, so i've editted the tag javascript into the question.
– Raymond Nijland
Nov 15 '18 at 17:21
Check this it might help: stackoverflow.com/questions/44032900/…
– Julian Espinosa
Nov 15 '18 at 17:25
So onscroll check position and apply a class
– epascarello
Nov 15 '18 at 17:27
I dont want to change the color of the hole header. Want the header to be smooth and to fit the background 100%. I think this is possible with eg z-index and two headers like the code above, but I am missing something :P
– LonniE
Nov 15 '18 at 17:30
It seams W3C is working on it to make this part of css drafts.csswg.org/css-scroll-snap ... it's seams to be supported by Firefox and some other browser looking into this developer.mozilla.org/en-US/docs/Web/CSS/scroll-snap-type ... here is a "polyfill" hospodarets.com/css-scroll-snap
– Raymond Nijland
Nov 15 '18 at 17:30
|
show 2 more comments
I am trying to do a nice effect when the header leaves the current block. I want the background color and the color of the text to change when scrolling down.
html:
<header class="green">Logo</header>
<header class="red">Logo</header>
<section id='content1'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
<section id='content2'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
css:
*
box-sizing: border-box;
margin: 0;
padding: 0;
header
width: 100%;
position: fixed;
display: block;
top: 0;
font-size: 20pt;
padding: 15px 10px
.green
background: green;
color: #000;
z-index: 2
.red
background: red;
color: #fff;
z-index: 1
section
position: relative;
height: 500px;
padding: 100px 10px
#content1
background: #D9D9D9;
z-index: 1
#content2
background: #9FDAD0;
z-index: 2
An example serves best, something like this https://www.dropbox.com/
Thanks!
javascript html css
I am trying to do a nice effect when the header leaves the current block. I want the background color and the color of the text to change when scrolling down.
html:
<header class="green">Logo</header>
<header class="red">Logo</header>
<section id='content1'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
<section id='content2'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
css:
*
box-sizing: border-box;
margin: 0;
padding: 0;
header
width: 100%;
position: fixed;
display: block;
top: 0;
font-size: 20pt;
padding: 15px 10px
.green
background: green;
color: #000;
z-index: 2
.red
background: red;
color: #fff;
z-index: 1
section
position: relative;
height: 500px;
padding: 100px 10px
#content1
background: #D9D9D9;
z-index: 1
#content2
background: #9FDAD0;
z-index: 2
An example serves best, something like this https://www.dropbox.com/
Thanks!
javascript html css
javascript html css
edited Nov 15 '18 at 17:21
Raymond Nijland
8,93621329
8,93621329
asked Nov 15 '18 at 17:17
LonniELonniE
646
646
iám pretty sure they also used javascript to pull it off, so i've editted the tag javascript into the question.
– Raymond Nijland
Nov 15 '18 at 17:21
Check this it might help: stackoverflow.com/questions/44032900/…
– Julian Espinosa
Nov 15 '18 at 17:25
So onscroll check position and apply a class
– epascarello
Nov 15 '18 at 17:27
I dont want to change the color of the hole header. Want the header to be smooth and to fit the background 100%. I think this is possible with eg z-index and two headers like the code above, but I am missing something :P
– LonniE
Nov 15 '18 at 17:30
It seams W3C is working on it to make this part of css drafts.csswg.org/css-scroll-snap ... it's seams to be supported by Firefox and some other browser looking into this developer.mozilla.org/en-US/docs/Web/CSS/scroll-snap-type ... here is a "polyfill" hospodarets.com/css-scroll-snap
– Raymond Nijland
Nov 15 '18 at 17:30
|
show 2 more comments
iám pretty sure they also used javascript to pull it off, so i've editted the tag javascript into the question.
– Raymond Nijland
Nov 15 '18 at 17:21
Check this it might help: stackoverflow.com/questions/44032900/…
– Julian Espinosa
Nov 15 '18 at 17:25
So onscroll check position and apply a class
– epascarello
Nov 15 '18 at 17:27
I dont want to change the color of the hole header. Want the header to be smooth and to fit the background 100%. I think this is possible with eg z-index and two headers like the code above, but I am missing something :P
– LonniE
Nov 15 '18 at 17:30
It seams W3C is working on it to make this part of css drafts.csswg.org/css-scroll-snap ... it's seams to be supported by Firefox and some other browser looking into this developer.mozilla.org/en-US/docs/Web/CSS/scroll-snap-type ... here is a "polyfill" hospodarets.com/css-scroll-snap
– Raymond Nijland
Nov 15 '18 at 17:30
iám pretty sure they also used javascript to pull it off, so i've editted the tag javascript into the question.
– Raymond Nijland
Nov 15 '18 at 17:21
iám pretty sure they also used javascript to pull it off, so i've editted the tag javascript into the question.
– Raymond Nijland
Nov 15 '18 at 17:21
Check this it might help: stackoverflow.com/questions/44032900/…
– Julian Espinosa
Nov 15 '18 at 17:25
Check this it might help: stackoverflow.com/questions/44032900/…
– Julian Espinosa
Nov 15 '18 at 17:25
So onscroll check position and apply a class
– epascarello
Nov 15 '18 at 17:27
So onscroll check position and apply a class
– epascarello
Nov 15 '18 at 17:27
I dont want to change the color of the hole header. Want the header to be smooth and to fit the background 100%. I think this is possible with eg z-index and two headers like the code above, but I am missing something :P
– LonniE
Nov 15 '18 at 17:30
I dont want to change the color of the hole header. Want the header to be smooth and to fit the background 100%. I think this is possible with eg z-index and two headers like the code above, but I am missing something :P
– LonniE
Nov 15 '18 at 17:30
It seams W3C is working on it to make this part of css drafts.csswg.org/css-scroll-snap ... it's seams to be supported by Firefox and some other browser looking into this developer.mozilla.org/en-US/docs/Web/CSS/scroll-snap-type ... here is a "polyfill" hospodarets.com/css-scroll-snap
– Raymond Nijland
Nov 15 '18 at 17:30
It seams W3C is working on it to make this part of css drafts.csswg.org/css-scroll-snap ... it's seams to be supported by Firefox and some other browser looking into this developer.mozilla.org/en-US/docs/Web/CSS/scroll-snap-type ... here is a "polyfill" hospodarets.com/css-scroll-snap
– Raymond Nijland
Nov 15 '18 at 17:30
|
show 2 more comments
3 Answers
3
active
oldest
votes
So i redid it with some Javascript.
This effect is awesome, feel free to improve it if you like!
Is this possible to accomplish without Javascript?
const secondBlock = document.getElementById('content2')
const header = document.getElementsByTagName('header')
const headerHeight = 61
function setHeader ()
const scrollPoint = window.pageYOffset + headerHeight
let blockPoint = 61 - (scrollPoint - secondBlock.offsetTop)
if (blockPoint <= 0) blockPoint = 0
if (scrollPoint > secondBlock.offsetTop)
header[0].style = `max-height: $blockPointpx;`
else
header[0].style = `max-height: $headerHeightpx;`
window.requestAnimationFrame(setHeader)
window.requestAnimationFrame(setHeader)
*
box-sizing: border-box;
margin: 0;
padding: 0;
header
display: block;
font-size: 20pt;
height: 61px;
line-height: 61px;
padding-left: 10px;
position: fixed;
top: 0;
width: 100%;
header#first
background: #8292C3;
color: #000;
overflow: hidden;
z-index: 10;
header#second
background: #82C3B9;
color: #fff;
z-index: 9;
section
height: 500px;
padding: 100px 10px;
position: relative;
#content1
background: #96A6D5;
#content2
background: #99D6CC;
<header id='first'>Logo - <small>scroll down to see the magic!</small></header>
<header id='second'>Logo - <small>scroll down to see the magic! COOL!</small></header>
<section id='content1'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
<section id='content2'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
add a comment |
The smooth transition you're looking for can be done in CSS, but you'll need some JavaScript in order to initiate the animation.
window.onscroll = function()
var top = window.scrollY;
console.log('Top: ' + top);
var header = document.getElementsByTagName('header');
var offset = header.innerHeight; //changed offset to be dynamic, so it works on mobile screens.
if(top > offset)
header[0].classList.remove('top');
header[0].classList.add('scrolled');
else
header[0].classList.remove('scrolled');
header[0].classList.add('top');
;
*
box-sizing: border-box;
margin: 0;
padding: 0;
body
position: relative;
header
width: 100%;
position: fixed;
height: 75px;
display: block;
top: 0;
z-index: 100;
font-size: 20pt;
padding: 15px 10px
header.top
background: #222;
color: #fff;
transition: all 0.3s ease;
header.scrolled
background: #555;
color: #e0e0e0;
transition: all 0.3s ease;
.green
background: green;
color: #000;
z-index: 2
.red
background: red;
color: #fff;
z-index: 1
section
position: relative;
height: 800px;
padding: 100px 10px
#content1
background: #D9D9D9;
z-index: 1
#content2
background: #9FDAD0;
z-index: 2
<header class="top">Logo</header>
<section id='content1'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
<section id='content2'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
This basically says that when we scroll passed the height of the header (in this case 50px), remove the "top" class from it, and add the "scrolled" class from it. You can use the css selectors header.top
and header.scrolled
to do your transition animations. Be sure to use transition: background-color (time) (timing function), color (time) (timing function);
to achieve the smoothness you're looking for.
Yes, this works but its not what I am after, look at dropbox.com header.
– LonniE
Nov 15 '18 at 17:41
Dropbox's header doesn't change colors, sizes, or anything. For this, all you need is theposition:fixed; top:0
CSS call, and to make sure that yourbody
isposition: relative;
so that the position of elements inside it work. EDIT: the only other thing I see is maybe the box shadow under the header, so it looks like it stands above the page? But otherwise I'm not sure I understand your question.
– Ryan
Nov 15 '18 at 17:42
add a comment |
You can change it with the class. Like i use this website.
http://www.moumaachi.com/
it has class like this
<div class="header-v2 navbar-fixed-top">
but when scroll down to 50 px then it will showa this
<div class="header-v2 navbar-fixed-top top-nav-collapse">
and normal it has
<div class="thiswillhide">
but when scroll down more then it wil like this
<div class="thiswillhide hidesearch">
you can use this code
<script>
//jQuery to collapse the navbar on scroll
$(window).scroll(function()
if ($(".header-v2").offset().top > 50)
$(".navbar-fixed-top").addClass("top-nav-collapse");
else
$(".navbar-fixed-top").removeClass("top-nav-collapse");
if ($(".header-v2").offset().top > 600)
$(".thiswillhide").addClass("hidesearch");
else
$(".thiswillhide").removeClass("hidesearch");
);
</script>
thanks
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53324756%2fcss-header-effect-change-background-and-color-when-scrolling-down%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
So i redid it with some Javascript.
This effect is awesome, feel free to improve it if you like!
Is this possible to accomplish without Javascript?
const secondBlock = document.getElementById('content2')
const header = document.getElementsByTagName('header')
const headerHeight = 61
function setHeader ()
const scrollPoint = window.pageYOffset + headerHeight
let blockPoint = 61 - (scrollPoint - secondBlock.offsetTop)
if (blockPoint <= 0) blockPoint = 0
if (scrollPoint > secondBlock.offsetTop)
header[0].style = `max-height: $blockPointpx;`
else
header[0].style = `max-height: $headerHeightpx;`
window.requestAnimationFrame(setHeader)
window.requestAnimationFrame(setHeader)
*
box-sizing: border-box;
margin: 0;
padding: 0;
header
display: block;
font-size: 20pt;
height: 61px;
line-height: 61px;
padding-left: 10px;
position: fixed;
top: 0;
width: 100%;
header#first
background: #8292C3;
color: #000;
overflow: hidden;
z-index: 10;
header#second
background: #82C3B9;
color: #fff;
z-index: 9;
section
height: 500px;
padding: 100px 10px;
position: relative;
#content1
background: #96A6D5;
#content2
background: #99D6CC;
<header id='first'>Logo - <small>scroll down to see the magic!</small></header>
<header id='second'>Logo - <small>scroll down to see the magic! COOL!</small></header>
<section id='content1'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
<section id='content2'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
add a comment |
So i redid it with some Javascript.
This effect is awesome, feel free to improve it if you like!
Is this possible to accomplish without Javascript?
const secondBlock = document.getElementById('content2')
const header = document.getElementsByTagName('header')
const headerHeight = 61
function setHeader ()
const scrollPoint = window.pageYOffset + headerHeight
let blockPoint = 61 - (scrollPoint - secondBlock.offsetTop)
if (blockPoint <= 0) blockPoint = 0
if (scrollPoint > secondBlock.offsetTop)
header[0].style = `max-height: $blockPointpx;`
else
header[0].style = `max-height: $headerHeightpx;`
window.requestAnimationFrame(setHeader)
window.requestAnimationFrame(setHeader)
*
box-sizing: border-box;
margin: 0;
padding: 0;
header
display: block;
font-size: 20pt;
height: 61px;
line-height: 61px;
padding-left: 10px;
position: fixed;
top: 0;
width: 100%;
header#first
background: #8292C3;
color: #000;
overflow: hidden;
z-index: 10;
header#second
background: #82C3B9;
color: #fff;
z-index: 9;
section
height: 500px;
padding: 100px 10px;
position: relative;
#content1
background: #96A6D5;
#content2
background: #99D6CC;
<header id='first'>Logo - <small>scroll down to see the magic!</small></header>
<header id='second'>Logo - <small>scroll down to see the magic! COOL!</small></header>
<section id='content1'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
<section id='content2'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
add a comment |
So i redid it with some Javascript.
This effect is awesome, feel free to improve it if you like!
Is this possible to accomplish without Javascript?
const secondBlock = document.getElementById('content2')
const header = document.getElementsByTagName('header')
const headerHeight = 61
function setHeader ()
const scrollPoint = window.pageYOffset + headerHeight
let blockPoint = 61 - (scrollPoint - secondBlock.offsetTop)
if (blockPoint <= 0) blockPoint = 0
if (scrollPoint > secondBlock.offsetTop)
header[0].style = `max-height: $blockPointpx;`
else
header[0].style = `max-height: $headerHeightpx;`
window.requestAnimationFrame(setHeader)
window.requestAnimationFrame(setHeader)
*
box-sizing: border-box;
margin: 0;
padding: 0;
header
display: block;
font-size: 20pt;
height: 61px;
line-height: 61px;
padding-left: 10px;
position: fixed;
top: 0;
width: 100%;
header#first
background: #8292C3;
color: #000;
overflow: hidden;
z-index: 10;
header#second
background: #82C3B9;
color: #fff;
z-index: 9;
section
height: 500px;
padding: 100px 10px;
position: relative;
#content1
background: #96A6D5;
#content2
background: #99D6CC;
<header id='first'>Logo - <small>scroll down to see the magic!</small></header>
<header id='second'>Logo - <small>scroll down to see the magic! COOL!</small></header>
<section id='content1'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
<section id='content2'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
So i redid it with some Javascript.
This effect is awesome, feel free to improve it if you like!
Is this possible to accomplish without Javascript?
const secondBlock = document.getElementById('content2')
const header = document.getElementsByTagName('header')
const headerHeight = 61
function setHeader ()
const scrollPoint = window.pageYOffset + headerHeight
let blockPoint = 61 - (scrollPoint - secondBlock.offsetTop)
if (blockPoint <= 0) blockPoint = 0
if (scrollPoint > secondBlock.offsetTop)
header[0].style = `max-height: $blockPointpx;`
else
header[0].style = `max-height: $headerHeightpx;`
window.requestAnimationFrame(setHeader)
window.requestAnimationFrame(setHeader)
*
box-sizing: border-box;
margin: 0;
padding: 0;
header
display: block;
font-size: 20pt;
height: 61px;
line-height: 61px;
padding-left: 10px;
position: fixed;
top: 0;
width: 100%;
header#first
background: #8292C3;
color: #000;
overflow: hidden;
z-index: 10;
header#second
background: #82C3B9;
color: #fff;
z-index: 9;
section
height: 500px;
padding: 100px 10px;
position: relative;
#content1
background: #96A6D5;
#content2
background: #99D6CC;
<header id='first'>Logo - <small>scroll down to see the magic!</small></header>
<header id='second'>Logo - <small>scroll down to see the magic! COOL!</small></header>
<section id='content1'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
<section id='content2'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
const secondBlock = document.getElementById('content2')
const header = document.getElementsByTagName('header')
const headerHeight = 61
function setHeader ()
const scrollPoint = window.pageYOffset + headerHeight
let blockPoint = 61 - (scrollPoint - secondBlock.offsetTop)
if (blockPoint <= 0) blockPoint = 0
if (scrollPoint > secondBlock.offsetTop)
header[0].style = `max-height: $blockPointpx;`
else
header[0].style = `max-height: $headerHeightpx;`
window.requestAnimationFrame(setHeader)
window.requestAnimationFrame(setHeader)
*
box-sizing: border-box;
margin: 0;
padding: 0;
header
display: block;
font-size: 20pt;
height: 61px;
line-height: 61px;
padding-left: 10px;
position: fixed;
top: 0;
width: 100%;
header#first
background: #8292C3;
color: #000;
overflow: hidden;
z-index: 10;
header#second
background: #82C3B9;
color: #fff;
z-index: 9;
section
height: 500px;
padding: 100px 10px;
position: relative;
#content1
background: #96A6D5;
#content2
background: #99D6CC;
<header id='first'>Logo - <small>scroll down to see the magic!</small></header>
<header id='second'>Logo - <small>scroll down to see the magic! COOL!</small></header>
<section id='content1'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
<section id='content2'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
const secondBlock = document.getElementById('content2')
const header = document.getElementsByTagName('header')
const headerHeight = 61
function setHeader ()
const scrollPoint = window.pageYOffset + headerHeight
let blockPoint = 61 - (scrollPoint - secondBlock.offsetTop)
if (blockPoint <= 0) blockPoint = 0
if (scrollPoint > secondBlock.offsetTop)
header[0].style = `max-height: $blockPointpx;`
else
header[0].style = `max-height: $headerHeightpx;`
window.requestAnimationFrame(setHeader)
window.requestAnimationFrame(setHeader)
*
box-sizing: border-box;
margin: 0;
padding: 0;
header
display: block;
font-size: 20pt;
height: 61px;
line-height: 61px;
padding-left: 10px;
position: fixed;
top: 0;
width: 100%;
header#first
background: #8292C3;
color: #000;
overflow: hidden;
z-index: 10;
header#second
background: #82C3B9;
color: #fff;
z-index: 9;
section
height: 500px;
padding: 100px 10px;
position: relative;
#content1
background: #96A6D5;
#content2
background: #99D6CC;
<header id='first'>Logo - <small>scroll down to see the magic!</small></header>
<header id='second'>Logo - <small>scroll down to see the magic! COOL!</small></header>
<section id='content1'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
<section id='content2'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
answered Nov 15 '18 at 19:41
LonniELonniE
646
646
add a comment |
add a comment |
The smooth transition you're looking for can be done in CSS, but you'll need some JavaScript in order to initiate the animation.
window.onscroll = function()
var top = window.scrollY;
console.log('Top: ' + top);
var header = document.getElementsByTagName('header');
var offset = header.innerHeight; //changed offset to be dynamic, so it works on mobile screens.
if(top > offset)
header[0].classList.remove('top');
header[0].classList.add('scrolled');
else
header[0].classList.remove('scrolled');
header[0].classList.add('top');
;
*
box-sizing: border-box;
margin: 0;
padding: 0;
body
position: relative;
header
width: 100%;
position: fixed;
height: 75px;
display: block;
top: 0;
z-index: 100;
font-size: 20pt;
padding: 15px 10px
header.top
background: #222;
color: #fff;
transition: all 0.3s ease;
header.scrolled
background: #555;
color: #e0e0e0;
transition: all 0.3s ease;
.green
background: green;
color: #000;
z-index: 2
.red
background: red;
color: #fff;
z-index: 1
section
position: relative;
height: 800px;
padding: 100px 10px
#content1
background: #D9D9D9;
z-index: 1
#content2
background: #9FDAD0;
z-index: 2
<header class="top">Logo</header>
<section id='content1'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
<section id='content2'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
This basically says that when we scroll passed the height of the header (in this case 50px), remove the "top" class from it, and add the "scrolled" class from it. You can use the css selectors header.top
and header.scrolled
to do your transition animations. Be sure to use transition: background-color (time) (timing function), color (time) (timing function);
to achieve the smoothness you're looking for.
Yes, this works but its not what I am after, look at dropbox.com header.
– LonniE
Nov 15 '18 at 17:41
Dropbox's header doesn't change colors, sizes, or anything. For this, all you need is theposition:fixed; top:0
CSS call, and to make sure that yourbody
isposition: relative;
so that the position of elements inside it work. EDIT: the only other thing I see is maybe the box shadow under the header, so it looks like it stands above the page? But otherwise I'm not sure I understand your question.
– Ryan
Nov 15 '18 at 17:42
add a comment |
The smooth transition you're looking for can be done in CSS, but you'll need some JavaScript in order to initiate the animation.
window.onscroll = function()
var top = window.scrollY;
console.log('Top: ' + top);
var header = document.getElementsByTagName('header');
var offset = header.innerHeight; //changed offset to be dynamic, so it works on mobile screens.
if(top > offset)
header[0].classList.remove('top');
header[0].classList.add('scrolled');
else
header[0].classList.remove('scrolled');
header[0].classList.add('top');
;
*
box-sizing: border-box;
margin: 0;
padding: 0;
body
position: relative;
header
width: 100%;
position: fixed;
height: 75px;
display: block;
top: 0;
z-index: 100;
font-size: 20pt;
padding: 15px 10px
header.top
background: #222;
color: #fff;
transition: all 0.3s ease;
header.scrolled
background: #555;
color: #e0e0e0;
transition: all 0.3s ease;
.green
background: green;
color: #000;
z-index: 2
.red
background: red;
color: #fff;
z-index: 1
section
position: relative;
height: 800px;
padding: 100px 10px
#content1
background: #D9D9D9;
z-index: 1
#content2
background: #9FDAD0;
z-index: 2
<header class="top">Logo</header>
<section id='content1'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
<section id='content2'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
This basically says that when we scroll passed the height of the header (in this case 50px), remove the "top" class from it, and add the "scrolled" class from it. You can use the css selectors header.top
and header.scrolled
to do your transition animations. Be sure to use transition: background-color (time) (timing function), color (time) (timing function);
to achieve the smoothness you're looking for.
Yes, this works but its not what I am after, look at dropbox.com header.
– LonniE
Nov 15 '18 at 17:41
Dropbox's header doesn't change colors, sizes, or anything. For this, all you need is theposition:fixed; top:0
CSS call, and to make sure that yourbody
isposition: relative;
so that the position of elements inside it work. EDIT: the only other thing I see is maybe the box shadow under the header, so it looks like it stands above the page? But otherwise I'm not sure I understand your question.
– Ryan
Nov 15 '18 at 17:42
add a comment |
The smooth transition you're looking for can be done in CSS, but you'll need some JavaScript in order to initiate the animation.
window.onscroll = function()
var top = window.scrollY;
console.log('Top: ' + top);
var header = document.getElementsByTagName('header');
var offset = header.innerHeight; //changed offset to be dynamic, so it works on mobile screens.
if(top > offset)
header[0].classList.remove('top');
header[0].classList.add('scrolled');
else
header[0].classList.remove('scrolled');
header[0].classList.add('top');
;
*
box-sizing: border-box;
margin: 0;
padding: 0;
body
position: relative;
header
width: 100%;
position: fixed;
height: 75px;
display: block;
top: 0;
z-index: 100;
font-size: 20pt;
padding: 15px 10px
header.top
background: #222;
color: #fff;
transition: all 0.3s ease;
header.scrolled
background: #555;
color: #e0e0e0;
transition: all 0.3s ease;
.green
background: green;
color: #000;
z-index: 2
.red
background: red;
color: #fff;
z-index: 1
section
position: relative;
height: 800px;
padding: 100px 10px
#content1
background: #D9D9D9;
z-index: 1
#content2
background: #9FDAD0;
z-index: 2
<header class="top">Logo</header>
<section id='content1'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
<section id='content2'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
This basically says that when we scroll passed the height of the header (in this case 50px), remove the "top" class from it, and add the "scrolled" class from it. You can use the css selectors header.top
and header.scrolled
to do your transition animations. Be sure to use transition: background-color (time) (timing function), color (time) (timing function);
to achieve the smoothness you're looking for.
The smooth transition you're looking for can be done in CSS, but you'll need some JavaScript in order to initiate the animation.
window.onscroll = function()
var top = window.scrollY;
console.log('Top: ' + top);
var header = document.getElementsByTagName('header');
var offset = header.innerHeight; //changed offset to be dynamic, so it works on mobile screens.
if(top > offset)
header[0].classList.remove('top');
header[0].classList.add('scrolled');
else
header[0].classList.remove('scrolled');
header[0].classList.add('top');
;
*
box-sizing: border-box;
margin: 0;
padding: 0;
body
position: relative;
header
width: 100%;
position: fixed;
height: 75px;
display: block;
top: 0;
z-index: 100;
font-size: 20pt;
padding: 15px 10px
header.top
background: #222;
color: #fff;
transition: all 0.3s ease;
header.scrolled
background: #555;
color: #e0e0e0;
transition: all 0.3s ease;
.green
background: green;
color: #000;
z-index: 2
.red
background: red;
color: #fff;
z-index: 1
section
position: relative;
height: 800px;
padding: 100px 10px
#content1
background: #D9D9D9;
z-index: 1
#content2
background: #9FDAD0;
z-index: 2
<header class="top">Logo</header>
<section id='content1'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
<section id='content2'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
This basically says that when we scroll passed the height of the header (in this case 50px), remove the "top" class from it, and add the "scrolled" class from it. You can use the css selectors header.top
and header.scrolled
to do your transition animations. Be sure to use transition: background-color (time) (timing function), color (time) (timing function);
to achieve the smoothness you're looking for.
window.onscroll = function()
var top = window.scrollY;
console.log('Top: ' + top);
var header = document.getElementsByTagName('header');
var offset = header.innerHeight; //changed offset to be dynamic, so it works on mobile screens.
if(top > offset)
header[0].classList.remove('top');
header[0].classList.add('scrolled');
else
header[0].classList.remove('scrolled');
header[0].classList.add('top');
;
*
box-sizing: border-box;
margin: 0;
padding: 0;
body
position: relative;
header
width: 100%;
position: fixed;
height: 75px;
display: block;
top: 0;
z-index: 100;
font-size: 20pt;
padding: 15px 10px
header.top
background: #222;
color: #fff;
transition: all 0.3s ease;
header.scrolled
background: #555;
color: #e0e0e0;
transition: all 0.3s ease;
.green
background: green;
color: #000;
z-index: 2
.red
background: red;
color: #fff;
z-index: 1
section
position: relative;
height: 800px;
padding: 100px 10px
#content1
background: #D9D9D9;
z-index: 1
#content2
background: #9FDAD0;
z-index: 2
<header class="top">Logo</header>
<section id='content1'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
<section id='content2'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
window.onscroll = function()
var top = window.scrollY;
console.log('Top: ' + top);
var header = document.getElementsByTagName('header');
var offset = header.innerHeight; //changed offset to be dynamic, so it works on mobile screens.
if(top > offset)
header[0].classList.remove('top');
header[0].classList.add('scrolled');
else
header[0].classList.remove('scrolled');
header[0].classList.add('top');
;
*
box-sizing: border-box;
margin: 0;
padding: 0;
body
position: relative;
header
width: 100%;
position: fixed;
height: 75px;
display: block;
top: 0;
z-index: 100;
font-size: 20pt;
padding: 15px 10px
header.top
background: #222;
color: #fff;
transition: all 0.3s ease;
header.scrolled
background: #555;
color: #e0e0e0;
transition: all 0.3s ease;
.green
background: green;
color: #000;
z-index: 2
.red
background: red;
color: #fff;
z-index: 1
section
position: relative;
height: 800px;
padding: 100px 10px
#content1
background: #D9D9D9;
z-index: 1
#content2
background: #9FDAD0;
z-index: 2
<header class="top">Logo</header>
<section id='content1'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
<section id='content2'>
<h1>Content</h1>
<p>Goes here!</p>
</section>
edited Nov 15 '18 at 17:44
answered Nov 15 '18 at 17:38
RyanRyan
31619
31619
Yes, this works but its not what I am after, look at dropbox.com header.
– LonniE
Nov 15 '18 at 17:41
Dropbox's header doesn't change colors, sizes, or anything. For this, all you need is theposition:fixed; top:0
CSS call, and to make sure that yourbody
isposition: relative;
so that the position of elements inside it work. EDIT: the only other thing I see is maybe the box shadow under the header, so it looks like it stands above the page? But otherwise I'm not sure I understand your question.
– Ryan
Nov 15 '18 at 17:42
add a comment |
Yes, this works but its not what I am after, look at dropbox.com header.
– LonniE
Nov 15 '18 at 17:41
Dropbox's header doesn't change colors, sizes, or anything. For this, all you need is theposition:fixed; top:0
CSS call, and to make sure that yourbody
isposition: relative;
so that the position of elements inside it work. EDIT: the only other thing I see is maybe the box shadow under the header, so it looks like it stands above the page? But otherwise I'm not sure I understand your question.
– Ryan
Nov 15 '18 at 17:42
Yes, this works but its not what I am after, look at dropbox.com header.
– LonniE
Nov 15 '18 at 17:41
Yes, this works but its not what I am after, look at dropbox.com header.
– LonniE
Nov 15 '18 at 17:41
Dropbox's header doesn't change colors, sizes, or anything. For this, all you need is the
position:fixed; top:0
CSS call, and to make sure that your body
is position: relative;
so that the position of elements inside it work. EDIT: the only other thing I see is maybe the box shadow under the header, so it looks like it stands above the page? But otherwise I'm not sure I understand your question.– Ryan
Nov 15 '18 at 17:42
Dropbox's header doesn't change colors, sizes, or anything. For this, all you need is the
position:fixed; top:0
CSS call, and to make sure that your body
is position: relative;
so that the position of elements inside it work. EDIT: the only other thing I see is maybe the box shadow under the header, so it looks like it stands above the page? But otherwise I'm not sure I understand your question.– Ryan
Nov 15 '18 at 17:42
add a comment |
You can change it with the class. Like i use this website.
http://www.moumaachi.com/
it has class like this
<div class="header-v2 navbar-fixed-top">
but when scroll down to 50 px then it will showa this
<div class="header-v2 navbar-fixed-top top-nav-collapse">
and normal it has
<div class="thiswillhide">
but when scroll down more then it wil like this
<div class="thiswillhide hidesearch">
you can use this code
<script>
//jQuery to collapse the navbar on scroll
$(window).scroll(function()
if ($(".header-v2").offset().top > 50)
$(".navbar-fixed-top").addClass("top-nav-collapse");
else
$(".navbar-fixed-top").removeClass("top-nav-collapse");
if ($(".header-v2").offset().top > 600)
$(".thiswillhide").addClass("hidesearch");
else
$(".thiswillhide").removeClass("hidesearch");
);
</script>
thanks
add a comment |
You can change it with the class. Like i use this website.
http://www.moumaachi.com/
it has class like this
<div class="header-v2 navbar-fixed-top">
but when scroll down to 50 px then it will showa this
<div class="header-v2 navbar-fixed-top top-nav-collapse">
and normal it has
<div class="thiswillhide">
but when scroll down more then it wil like this
<div class="thiswillhide hidesearch">
you can use this code
<script>
//jQuery to collapse the navbar on scroll
$(window).scroll(function()
if ($(".header-v2").offset().top > 50)
$(".navbar-fixed-top").addClass("top-nav-collapse");
else
$(".navbar-fixed-top").removeClass("top-nav-collapse");
if ($(".header-v2").offset().top > 600)
$(".thiswillhide").addClass("hidesearch");
else
$(".thiswillhide").removeClass("hidesearch");
);
</script>
thanks
add a comment |
You can change it with the class. Like i use this website.
http://www.moumaachi.com/
it has class like this
<div class="header-v2 navbar-fixed-top">
but when scroll down to 50 px then it will showa this
<div class="header-v2 navbar-fixed-top top-nav-collapse">
and normal it has
<div class="thiswillhide">
but when scroll down more then it wil like this
<div class="thiswillhide hidesearch">
you can use this code
<script>
//jQuery to collapse the navbar on scroll
$(window).scroll(function()
if ($(".header-v2").offset().top > 50)
$(".navbar-fixed-top").addClass("top-nav-collapse");
else
$(".navbar-fixed-top").removeClass("top-nav-collapse");
if ($(".header-v2").offset().top > 600)
$(".thiswillhide").addClass("hidesearch");
else
$(".thiswillhide").removeClass("hidesearch");
);
</script>
thanks
You can change it with the class. Like i use this website.
http://www.moumaachi.com/
it has class like this
<div class="header-v2 navbar-fixed-top">
but when scroll down to 50 px then it will showa this
<div class="header-v2 navbar-fixed-top top-nav-collapse">
and normal it has
<div class="thiswillhide">
but when scroll down more then it wil like this
<div class="thiswillhide hidesearch">
you can use this code
<script>
//jQuery to collapse the navbar on scroll
$(window).scroll(function()
if ($(".header-v2").offset().top > 50)
$(".navbar-fixed-top").addClass("top-nav-collapse");
else
$(".navbar-fixed-top").removeClass("top-nav-collapse");
if ($(".header-v2").offset().top > 600)
$(".thiswillhide").addClass("hidesearch");
else
$(".thiswillhide").removeClass("hidesearch");
);
</script>
thanks
answered Nov 15 '18 at 17:58
Amranur RahmanAmranur Rahman
490815
490815
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53324756%2fcss-header-effect-change-background-and-color-when-scrolling-down%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
iám pretty sure they also used javascript to pull it off, so i've editted the tag javascript into the question.
– Raymond Nijland
Nov 15 '18 at 17:21
Check this it might help: stackoverflow.com/questions/44032900/…
– Julian Espinosa
Nov 15 '18 at 17:25
So onscroll check position and apply a class
– epascarello
Nov 15 '18 at 17:27
I dont want to change the color of the hole header. Want the header to be smooth and to fit the background 100%. I think this is possible with eg z-index and two headers like the code above, but I am missing something :P
– LonniE
Nov 15 '18 at 17:30
It seams W3C is working on it to make this part of css drafts.csswg.org/css-scroll-snap ... it's seams to be supported by Firefox and some other browser looking into this developer.mozilla.org/en-US/docs/Web/CSS/scroll-snap-type ... here is a "polyfill" hospodarets.com/css-scroll-snap
– Raymond Nijland
Nov 15 '18 at 17:30