Try to make a navigation bar but something wrong - javascript

This is my current code. It can show where you are viewing like when you are reading "SEC 1" part, the "SEC 1" on the navigation bar gets highlighted. When you click the "SEC 2" on the navigation bar, it should jump to "SEC 2" part. Now the problem is when you click the one you want to go, the previous one gets highlighted. For example, if you click "SEC 2", the "SEC 1" on the navigation bar gets highlighted. As I don't know whats wrong with the code I paste it down here.
If you don't know what's the problem: Run the first code snippet, click the SEC 4 on the navigation bar, and then you know what's the problem: jump to SEC 4 part but highlight the SEC 3 on the navigation bar. (latest Chrome and latest Windows 10)
The function I need:
Highlight the SEC- I'm currently reading on the navigation bar
Jump to the SEC- I clicked
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
<title>TEST</title>
<style type="text/css">
html {
scroll-behavior: smooth;
}
body {
margin: 0;
font-family: system-ui, sans-serif;
}
header {
padding: 1em;
}
nav {
position: sticky;
top: 0;
color: #000;
background-color: yellow;
border-bottom: 2px solid yellow;
}
nav ul {
list-style: none;
margin: 0;
padding: 1em 1em 1em 0;
}
nav ul li {
display: inline;
}
nav ul li a {
display: inline;
color: #000;
text-decoration: none;
padding: 1em;
}
nav ul li a.current {
border-bottom: 2px solid blue;
}
main {
}
section {
padding: 5em 1em 1em 1em;
}
footer {
background-color: #000;
color: #fff;
margin-top: 5em;
padding: 1em;
}
</style>
</head>
<body>
<header> Header here </header>
<nav>
<ul>
<li>SEC 1</li>
<li>SEC 2</li>
<li>SEC 3</li>
<li>SEC 4</li>
</ul>
</nav>
<main>
<section id="section-1">
<h3>SEC 1</h3>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Dictum sit amet justo donec enim diam vulputate ut pharetra. Et ultrices neque ornare aenean. Vulputate mi sit amet mauris commodo. Pulvinar mattis nunc sed blandit. Aliquam ut porttitor leo a diam sollicitudin tempor. Dolor purus non enim praesent elementum facilisis leo. Consequat semper viverra nam libero justo laoreet sit amet. Ornare suspendisse sed nisi lacus. Sed viverra tellus in hac habitasse. Malesuada fames ac turpis egestas maecenas pharetra convallis. Sed adipiscing diam donec adipiscing tristique risus. Mi ipsum faucibus vitae aliquet nec ullamcorper sit. Pretium aenean pharetra magna ac placerat. Tellus integer feugiat scelerisque varius.</section>
<section id="section-2">
<h3>SEC 2</h3>
Duis tristique sollicitudin nibh sit amet. Facilisis leo vel fringilla est. Erat nam at lectus urna. Ut sem viverra aliquet eget sit amet tellus. Vulputate sapien nec sagittis aliquam. Tortor condimentum lacinia quis vel. Eget magna fermentum iaculis eu. In tellus integer feugiat scelerisque varius morbi enim nunc faucibus. Sollicitudin tempor id eu nisl nunc. Placerat orci nulla pellentesque dignissim enim sit amet venenatis. Velit laoreet id donec ultrices tincidunt. Facilisi nullam vehicula ipsum a arcu. Dictum at tempor commodo ullamcorper a lacus vestibulum sed arcu. Vitae purus faucibus ornare suspendisse sed nisi lacus. A arcu cursus vitae congue mauris rhoncus aenean.</section>
<section id="section-3">
<h3>SEC 3</h3>
Aliquam sem et tortor consequat. Faucibus in ornare quam viverra orci sagittis eu volutpat odio. Vel eros donec ac odio tempor orci dapibus ultrices. Scelerisque eleifend donec pretium vulputate sapien nec sagittis aliquam malesuada. At auctor urna nunc id cursus metus aliquam eleifend. Consequat mauris nunc congue nisi vitae. In massa tempor nec feugiat nisl pretium fusce. At imperdiet dui accumsan sit amet nulla facilisi. Viverra tellus in hac habitasse platea dictumst vestibulum rhoncus. Et leo duis ut diam quam. Convallis tellus id interdum velit. Pretium fusce id velit ut tortor. Aliquam malesuada bibendum arcu vitae elementum curabitur. Elementum integer enim neque volutpat ac tincidunt vitae. Nulla porttitor massa id neque aliquam. Quisque id diam vel quam elementum pulvinar. Commodo elit at imperdiet dui accumsan sit amet nulla facilisi.</section>
<section id="section-4">
<h3>SEC 4</h3>
Tortor pretium viverra suspendisse potenti. Iaculis eu non diam phasellus. Nulla pharetra diam sit amet nisl. Vulputate odio ut enim blandit volutpat maecenas volutpat blandit. Cras adipiscing enim eu turpis egestas pretium. Tellus mauris a diam maecenas sed enim ut sem. Amet est placerat in egestas. Volutpat lacus laoreet non curabitur. Eget nullam non nisi est sit amet. Ut sem viverra aliquet eget sit amet tellus cras adipiscing. Massa massa ultricies mi quis. Volutpat sed cras ornare arcu. Varius duis at consectetur lorem. Odio euismod lacinia at quis risus.</section>
</main>
<footer>Footer here</footer>
<script>
let mainNavLinks = document.querySelectorAll("nav ul li a");
let mainSections = document.querySelectorAll("main section");
let lastId;
let cur = [];
window.addEventListener("scroll", event => {
let fromTop = window.scrollY;
mainNavLinks.forEach(link => {
let section = document.querySelector(link.hash);
if (
section.offsetTop <= fromTop &&
section.offsetTop + section.offsetHeight > fromTop
) {
link.classList.add("current");
} else {
link.classList.remove("current");
}
});
});
</script>
</body>
</html>
Solution by Tore Brandtzæg (Thanks! But "Currently at SEC-" function is lost)
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
<title>TEST</title>
<style type="text/css">
html {
scroll-behavior: smooth;
}
body {
margin: 0;
font-family: system-ui, sans-serif;
}
header {
padding: 1em;
}
nav {
position: sticky;
top: 0;
color: #000;
background-color: yellow;
border-bottom: 2px solid yellow;
}
nav ul {
list-style: none;
margin: 0;
padding: 1em 1em 1em 0;
}
nav ul li {
display: inline;
}
nav ul li a {
display: inline;
color: #000;
text-decoration: none;
padding: 1em;
}
nav ul li a.current {
border-bottom: 2px solid blue;
}
main {
}
section {
padding: 5em 1em 1em 1em;
}
footer {
background-color: #000;
color: #fff;
margin-top: 5em;
padding: 1em;
}
</style>
</head>
<body>
<header> Header here </header>
<nav>
<ul>
<li>SEC 1</li>
<li>SEC 2</li>
<li>SEC 3</li>
<li>SEC 4</li>
</ul>
</nav>
<main>
<section id="section-1">
<h3>SEC 1</h3>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Dictum sit amet justo donec enim diam vulputate ut pharetra. Et ultrices neque ornare aenean. Vulputate mi sit amet mauris commodo. Pulvinar mattis nunc sed blandit. Aliquam ut porttitor leo a diam sollicitudin tempor. Dolor purus non enim praesent elementum facilisis leo. Consequat semper viverra nam libero justo laoreet sit amet. Ornare suspendisse sed nisi lacus. Sed viverra tellus in hac habitasse. Malesuada fames ac turpis egestas maecenas pharetra convallis. Sed adipiscing diam donec adipiscing tristique risus. Mi ipsum faucibus vitae aliquet nec ullamcorper sit. Pretium aenean pharetra magna ac placerat. Tellus integer feugiat scelerisque varius.</section>
<section id="section-2">
<h3>SEC 2</h3>
Duis tristique sollicitudin nibh sit amet. Facilisis leo vel fringilla est. Erat nam at lectus urna. Ut sem viverra aliquet eget sit amet tellus. Vulputate sapien nec sagittis aliquam. Tortor condimentum lacinia quis vel. Eget magna fermentum iaculis eu. In tellus integer feugiat scelerisque varius morbi enim nunc faucibus. Sollicitudin tempor id eu nisl nunc. Placerat orci nulla pellentesque dignissim enim sit amet venenatis. Velit laoreet id donec ultrices tincidunt. Facilisi nullam vehicula ipsum a arcu. Dictum at tempor commodo ullamcorper a lacus vestibulum sed arcu. Vitae purus faucibus ornare suspendisse sed nisi lacus. A arcu cursus vitae congue mauris rhoncus aenean.</section>
<section id="section-3">
<h3>SEC 3</h3>
Aliquam sem et tortor consequat. Faucibus in ornare quam viverra orci sagittis eu volutpat odio. Vel eros donec ac odio tempor orci dapibus ultrices. Scelerisque eleifend donec pretium vulputate sapien nec sagittis aliquam malesuada. At auctor urna nunc id cursus metus aliquam eleifend. Consequat mauris nunc congue nisi vitae. In massa tempor nec feugiat nisl pretium fusce. At imperdiet dui accumsan sit amet nulla facilisi. Viverra tellus in hac habitasse platea dictumst vestibulum rhoncus. Et leo duis ut diam quam. Convallis tellus id interdum velit. Pretium fusce id velit ut tortor. Aliquam malesuada bibendum arcu vitae elementum curabitur. Elementum integer enim neque volutpat ac tincidunt vitae. Nulla porttitor massa id neque aliquam. Quisque id diam vel quam elementum pulvinar. Commodo elit at imperdiet dui accumsan sit amet nulla facilisi.</section>
<section id="section-4">
<h3>SEC 4</h3>
Mauris rhoncus aenean vel elit scelerisque. Auctor elit sed vulputate mi sit amet mauris commodo quis. Fames ac turpis egestas maecenas pharetra convallis posuere morbi. In fermentum posuere urna nec tincidunt. Condimentum lacinia quis vel eros donec ac. Mattis rhoncus urna neque viverra justo. Placerat vestibulum lectus mauris ultrices eros in cursus turpis massa. In pellentesque massa placerat duis ultricies. Condimentum vitae sapien pellentesque habitant morbi tristique senectus et netus. Ipsum dolor sit amet consectetur adipiscing elit duis. Penatibus et magnis dis parturient montes nascetur ridiculus mus mauris. Condimentum mattis pellentesque id nibh tortor id aliquet lectus proin. Ut porttitor leo a diam sollicitudin. Ut etiam sit amet nisl purus in mollis nunc sed. Habitant morbi tristique senectus et netus. Laoreet sit amet cursus sit amet dictum sit amet. Natoque penatibus et magnis dis parturient montes nascetur. Nulla pellentesque dignissim enim sit amet venenatis urna.<br>
Cras semper auctor neque vitae tempus quam pellentesque nec nam. Sodales ut etiam sit amet nisl. Ut consequat semper viverra nam libero justo laoreet sit. Dignissim cras tincidunt lobortis feugiat vivamus at augue eget. Ipsum dolor sit amet consectetur adipiscing elit duis. Nunc congue nisi vitae suscipit tellus mauris. Adipiscing bibendum est ultricies integer quis auctor elit sed vulputate. Neque ornare aenean euismod elementum nisi quis eleifend quam adipiscing. Commodo odio aenean sed adipiscing diam. Nisi lacus sed viverra tellus in hac habitasse. Arcu cursus vitae congue mauris rhoncus aenean. Sit amet consectetur adipiscing elit duis tristique sollicitudin nibh sit. Proin sed libero enim sed faucibus. Libero volutpat sed cras ornare. Ornare arcu odio ut sem nulla pharetra diam sit. Praesent tristique magna sit amet.<br>
Porta non pulvinar neque laoreet suspendisse interdum consectetur. Cras fermentum odio eu feugiat pretium nibh. Purus gravida quis blandit turpis cursus. Cursus vitae congue mauris rhoncus aenean vel elit scelerisque mauris. Ut placerat orci nulla pellentesque dignissim enim sit amet. Leo duis ut diam quam nulla porttitor massa id neque. Dignissim convallis aenean et tortor at. Hac habitasse platea dictumst quisque sagittis purus sit amet volutpat. Sit amet porttitor eget dolor morbi non arcu risus. Mi sit amet mauris commodo.</section>
</main>
<footer>Footer here</footer>
<script>
let mainNavLinks = document.querySelectorAll("nav ul li a");
let clickEventListener = event => {
mainNavLinks.forEach(link => link.classList.remove("current"));
event.target.classList.add("current");
};
mainNavLinks.forEach(link => link.addEventListener('click', clickEventListener));
</script>
</body>
</html>

Not sure if this fits your requirements, but an alternative solution is to add a click event listener to each nav link, which deselects all other nav links and selects the one that was clicked.
This could be done by replacing the script part with something like the following:
let mainNavLinks = document.querySelectorAll("nav ul li a");
let clickEventListener = event => {
mainNavLinks.forEach(link => link.classList.remove("current"));
event.target.classList.add("current");
};
mainNavLinks.forEach(link => link.addEventListener('click', clickEventListener));
At least for me, this seems to resolve the issues when clicking the links.
Edit: Just realized that you probably want the scroll functionality as well, which this solution does not include.

Related

Show progress bar on scroll for a specific div

I want to display a progress bar while the user is scrolling, I want this progress bar to be based on a specific div, which means the progress bar should be 100% when the user scrolled to the end of the div.
Here is a fiddle: https://jsfiddle.net/tvmkf4ds/
Here is the code I use:
$(document).scroll(function () {
var scroll = $(this).scrollTop();
var $main = $('#scroll');
var offsetTop = $main.offset().top;
var offsetBottom = $main.offset().bottom;
var height = $main.height();
var percent = scroll - (offsetTop) / height * 100;
$("#progress-bar-value").css('width', percent);
});
The problem is the bar is not 100% filled when you scroll at the end of #scroll element, but only when you scroll until end of page.
I tried too:
var percent = scroll - (offsetTop - offsetBottom) / height * 100;
But I can't figure out the good calculation.
As far as I understood your problem this might be the solution:
If it is not displayed correctly here a quick fidddle for you: https://jsfiddle.net/zh76mybt/19/
$(document).scroll(function () {
const scroll = $(this).scrollTop();
const $main = $('#scroll');
const height = $main.height();
let percent = (scroll / height) * 1000;
$("#progress-bar-value").css('width', percent);
});
#progress-bar {
background: #eaeaea;
height: 12px;
position: fixed;
top: 0;
width: 100%;
z-index: 9;
left: 0;
}
#progress-bar-value {
background: #0A2D82;
border-radius: 0 10px 10px 0;
height: 12px;
transition: all 0.2s;
width: 0;
}
#header {
height: 200px;
padding: 40px;
background: red;
color: #fff;
}
#footer {
height: 200px;
padding: 40px;
background: green;
color: #fff;
}
#scroll {
margin: 40px 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="header">
HEADER
<div id="progress-bar">
<div id="progress-bar-value"></div>
</div>
</div>
<div id="scroll">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque sed mauris ac mi luctus eleifend porta ornare leo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ultrices arcu et mauris sodales elementum. Vestibulum ornare metus vitae lorem pellentesque, id dictum nulla venenatis. Sed porttitor efficitur euismod. Integer vel est nec felis aliquam pulvinar quis sit amet dolor. In maximus ex quis odio congue imperdiet. Suspendisse id augue sapien.
Donec vehicula erat eget quam viverra sodales. Proin ex mauris, fringilla sed augue vel, volutpat mattis elit. Proin est eros, tempus eu euismod eget, facilisis in turpis. Ut molestie mauris quam, ut blandit odio ullamcorper sed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent vehicula libero id dignissim blandit. Pellentesque feugiat nisi dui, quis ultrices orci ultrices sed. Mauris et dictum ante. Integer pulvinar leo mi, ac mollis ligula dignissim quis. Morbi est dui, aliquet ac consequat semper, luctus at ipsum. Fusce sollicitudin neque non purus aliquet aliquet.
Fusce nec est lacus. Morbi ut mattis tortor. Maecenas dictum orci id nisl porttitor laoreet. Quisque quis euismod ligula, id aliquet orci. Ut rutrum arcu vel suscipit dapibus. Nullam elementum quis neque eget accumsan. Donec nec sodales lacus. Fusce volutpat sollicitudin nisi non viverra. Nunc vitae aliquet mi. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
Aliquam vitae lorem at ante sollicitudin euismod. Fusce a lacus ac elit aliquet pretium. In libero lorem, rhoncus luctus arcu semper, vehicula porttitor nisl. Sed et lobortis est. Vivamus at tortor mauris. Ut vel leo eget massa lacinia bibendum. Cras elementum, nulla et varius aliquam, odio mi suscipit risus, a pellentesque lectus neque in urna. Suspendisse tempus, nisi sed finibus tempus, diam felis ultricies ante, eu tincidunt enim turpis ut purus. Sed luctus, mi eu dapibus ullamcorper, nulla diam posuere lorem, nec ornare libero justo vitae tellus. Duis purus ligula, tristique sed cursus sit amet, finibus a eros. Duis eget ipsum non enim congue vestibulum. Aliquam lobortis leo id nibh finibus, id pretium justo venenatis. Cras efficitur, ante vitae iaculis feugiat, purus sapien aliquet eros, quis feugiat orci nisi tempor lectus.
Curabitur nec cursus nisl, sed fringilla erat. In tincidunt justo eu vestibulum iaculis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Suspendisse quis pharetra ante, at commodo risus. Sed tincidunt augue eu mattis scelerisque. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vitae lectus in sapien condimentum bibendum. Curabitur at venenatis nisl.
Donec vulputate molestie orci. Sed accumsan ullamcorper suscipit. Vestibulum scelerisque tellus sed augue condimentum, ut dictum tortor finibus. Integer suscipit elit turpis, quis ultrices enim vulputate sit amet. Nam imperdiet, velit id ullamcorper bibendum, diam massa ultricies sapien, sit amet efficitur velit sem ut urna. Cras rhoncus, elit eget ultrices pellentesque, mauris est bibendum dui, a rhoncus enim quam sed neque. In ut pulvinar urna, vel efficitur erat.
Fusce sit amet dictum nulla. Proin consequat nisi non elit rhoncus gravida. In ac lacus erat. Pellentesque sit amet elit id elit fermentum ullamcorper a quis sapien. Ut semper lorem sapien, ut pretium risus iaculis id. Ut semper est sed nibh consequat vulputate. Pellentesque ornare sem non dolor lobortis tincidunt. Curabitur laoreet ex id suscipit porttitor. Integer ultrices ipsum elit, quis maximus ante luctus id. Ut eleifend, diam et dignissim scelerisque, nulla tortor volutpat magna, sit amet tristique massa lacus in nunc. Praesent diam sapien, porttitor at turpis vitae, vehicula vestibulum mauris.
Proin consectetur cursus quam, nec suscipit justo mattis sit amet. Pellentesque lobortis maximus nisi sit amet auctor. In hac habitasse platea dictumst. Suspendisse a facilisis dui. Nulla erat nisi, finibus nec tempor in, aliquet eget enim. Integer egestas maximus pharetra. Nullam hendrerit id diam nec consequat. Praesent eleifend nisl quis magna ornare, facilisis elementum lacus congue. In hac habitasse platea dictumst. Curabitur gravida ornare congue. Nullam et consequat neque. Morbi eu odio sagittis, hendrerit dui quis, euismod nulla
Fusce sit amet dictum nulla. Proin consequat nisi non elit rhoncus gravida. In ac lacus erat. Pellentesque sit amet elit id elit fermentum ullamcorper a quis sapien. Ut semper lorem sapien, ut pretium risus iaculis id. Ut semper est sed nibh consequat vulputate. Pellentesque ornare sem non dolor lobortis tincidunt. Curabitur laoreet ex id suscipit porttitor. Integer ultrices ipsum elit, quis maximus ante luctus id. Ut eleifend, diam et dignissim scelerisque, nulla tortor volutpat magna, sit amet tristique massa lacus in nunc. Praesent diam sapien, porttitor at turpis vitae, vehicula vestibulum mauris.
</div>
<div id="footer">
FOOTER
</div>
I think the percent calculation is not correct.
$(document).scroll(function () {
...
var percent = (scroll - offsetTop) / height * 100;
$("#progress-bar-value").css('width', `${percent}%`);
}

How to use a the toggle button multiple times efficiently?

I have the following page, which is behaving exactly how I want it to.
However, I know the page can be written more efficiently in two ways:
First and most importantly, I am repeating a javascript function. This is to denote which text should be expanded when its specific button is clicked, but I know the two can be written as one since they share the same type of functionality.
Second, the css is clumsy. I've used !important to override whether text is shown or hidden.
Can someone please suggest the most eloquent rendition of this page?
Thank you!
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
.expand-button {
background-color: #1860ac;
color: white;
border-radius: 5px;
height: 30px;
margin: 15px auto 40px auto;
display: block;
font-family: 'Cabin', sans-serif;
font-size: 1em;
}
.hidden {
display: none;
}
.very-hidden {
display: none!important;
}
.mystyle {
display: block!important;
}
</style>
</head>
<body>
<h2>
First Paragraph
</h2>
<button class="expand-button" id="b1" onclick="expand1()">Read more</button>
<span class="hidden" id="myDIV1"><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eu magna vitae ipsum dignissim euismod. Curabitur egestas congue elit vitae accumsan. Integer aliquet dictum est, vitae placerat arcu dapibus commodo. Quisque nec libero sed urna tristique mattis sed vel lacus. Praesent ut justo eget elit mattis suscipit. Curabitur ut libero eros. Morbi nec viverra velit. Suspendisse at nulla quis purus luctus laoreet. Nunc euismod ultricies quam vitae mattis. Fusce auctor urna at libero dapibus, sed sollicitudin ex facilisis. Maecenas ultricies nisl sodales lectus ultricies volutpat. Sed pretium turpis vitae dui tincidunt, ac sagittis ante efficitur.</p>
</span>
<h2>
Second Paragraph
</h2>
<button class="expand-button" id="b2" onclick="expand2()">Read more</button>
<span class="hidden" id="myDIV2">
<p>Nunc porttitor, quam vel consectetur feugiat, ipsum justo accumsan urna, non egestas ante ipsum in tellus. Maecenas pretium, velit dictum ultricies convallis, neque justo aliquet dolor, sed tincidunt massa ipsum at justo. Integer auctor auctor pretium. Ut in lacus ex. Suspendisse id placerat sapien, sed placerat dui. Curabitur eget malesuada arcu. Nam fringilla imperdiet mauris, at malesuada dolor tempor sit amet. Nam feugiat mi vel accumsan tristique. Curabitur imperdiet mollis mi vel consequat. Nam sollicitudin, elit sit amet tincidunt consectetur, sapien elit blandit lorem, at semper ipsum enim eget eros. Cras in ultrices dolor. Maecenas a lacus risus. Duis sed leo id est ultricies rhoncus ac sed ex. Fusce commodo consectetur nunc, sed lacinia sem.
</p>
</span>
<script type="text/javascript">
function expand1() {
var element = document.getElementById("myDIV1");
element.classList.toggle("mystyle");
var element = document.getElementById("b1");
element.classList.toggle("very-hidden");
}
function expand2() {
var element = document.getElementById("myDIV2");
element.classList.toggle("mystyle");
var element = document.getElementById("b2");
element.classList.toggle("very-hidden");
}
</script>
</body>
Try this:
Use the same class to hidde the elements, and use the same function passing a variable with the number of the div you are clicking, so you can so you can build the id name of the button and the div.
function expand(number) {
var id = 'myDIV'+ number
var divElement = document.getElementById(id);
divElement.classList.toggle("mystyle");
var idButton = 'b'+ number
var button = document.getElementById(idButton);
button.classList.toggle("hidden");
}
.expand-button {
background-color: #1860ac;
color: white;
border-radius: 5px;
height: 30px;
margin: 15px auto 40px auto;
display: block;
font-family: 'Cabin', sans-serif;
font-size: 1em;
}
.hidden {
display: none;
}
.mystyle {
display: block;
}
<body>
<h2>
First Paragraph
</h2>
<button class="expand-button" id="b1" onclick="expand('1')">Read more</button>
<span class="hidden" id="myDIV1"><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eu magna vitae ipsum dignissim euismod. Curabitur egestas congue elit vitae accumsan. Integer aliquet dictum est, vitae placerat arcu dapibus commodo. Quisque nec libero sed urna tristique mattis sed vel lacus. Praesent ut justo eget elit mattis suscipit. Curabitur ut libero eros. Morbi nec viverra velit. Suspendisse at nulla quis purus luctus laoreet. Nunc euismod ultricies quam vitae mattis. Fusce auctor urna at libero dapibus, sed sollicitudin ex facilisis. Maecenas ultricies nisl sodales lectus ultricies volutpat. Sed pretium turpis vitae dui tincidunt, ac sagittis ante efficitur.</p>
</span>
<h2>
Second Paragraph
</h2>
<button class="expand-button" id="b2" onclick="expand('2')">Read more</button>
<span class="hidden" id="myDIV2">
<p>Nunc porttitor, quam vel consectetur feugiat, ipsum justo accumsan urna, non egestas ante ipsum in tellus. Maecenas pretium, velit dictum ultricies convallis, neque justo aliquet dolor, sed tincidunt massa ipsum at justo. Integer auctor auctor pretium. Ut in lacus ex. Suspendisse id placerat sapien, sed placerat dui. Curabitur eget malesuada arcu. Nam fringilla imperdiet mauris, at malesuada dolor tempor sit amet. Nam feugiat mi vel accumsan tristique. Curabitur imperdiet mollis mi vel consequat. Nam sollicitudin, elit sit amet tincidunt consectetur, sapien elit blandit lorem, at semper ipsum enim eget eros. Cras in ultrices dolor. Maecenas a lacus risus. Duis sed leo id est ultricies rhoncus ac sed ex. Fusce commodo consectetur nunc, sed lacinia sem.
</p>
</span>
</body>
Hope this help you :)

How to set my navigation at bottom of the mobile screen?

The code i got from this website: click here
But i would like to set this nav code at the bottom instead of the top. I also would like it to stick to the bottom of the mobile screen rather than it disappearing after scrolling. Thank you for all the help if you can offer it to me.
I have looked everywhere and this code is perfect. I don't know much about sticking the nav to the bottom or even this code. Its a little complected but i can understand most of it.
Please if you could provide a snippet or if in case you post the code please provide a little more detail on how to place it because i'll be completely lost if you since a small part of the code with no extra help of where it came from. If could if not thats fine i'll figure it out.
(function() {
'use strict';
var nav = document.querySelector('.fixed-nav');
if(!nav) return true;
var navHeight = 0,
navTop = 0,
scrollCurr = 0,
scrollPrev = 0,
scrollDiff = 0;
window.addEventListener('scroll', function() {
navHeight = nav.offsetHeight;
scrollCurr = window.pageYOffset;
scrollDiff = scrollPrev - scrollCurr;
navTop = parseInt(window.getComputedStyle(nav).getPropertyValue('top')) + scrollDiff;
// Scroll to top: fix navbar to top
if(scrollCurr <= 0)
nav.style.top = '0px';
// Scroll up: show navbar
else if(scrollDiff > 0)
nav.style.top = (navTop > 0 ? 0 : navTop) + 'px';
// Scroll down: hide navbar
else if(scrollDiff < 0) {
nav.style.top = (Math.abs(navTop) > navHeight ? - navHeight : navTop) + 'px';
}
// Note last scroll position
scrollPrev = scrollCurr;
});
}());
.fixed-nav {
position: fixed;
top: 0;
left: 0;
width: 100%;
background-color: #ddd;
white-space: nowrap;
height: 50px;
box-sizing: border-box;
padding: 10px;
box-shadow: 0px 3px 6px rgba(0,0,0,0.16),0px 3px 6px rgba(0,0,0,0.23);
}
.fixed-nav ul, .fixed-nav li {
display:inline;
}
.fixed-nav a {
text-decoration: none;
text-transform: uppercase;
padding: 17px 10px;
color: #333;
font-family: arial;
}
.fixed-nav a:hover {
background-color: #000;
color: #eee;
}
.fixed-nav ul {
padding:0;
}
.fixed-nav img {
vertical-align: middle;
}
main {margin-top:55px;}
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<nav class="fixed-nav">
<img src="mf-logo.svg" height="30" />
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
</ul>
</nav>
<main>
<!-- Some dummy content so we can see the fixed navbar staying fixed when we scroll -->
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean rutrum dapibus erat eget sodales. Quisque at maximus tellus. Duis tristique mi magna, ut efficitur lectus porttitor non. Ut bibendum diam turpis, eget vehicula urna dignissim in. Vestibulum eget massa neque. Nulla facilisi. Pellentesque faucibus rutrum eros ut vestibulum. Proin ut nisl malesuada eros auctor viverra non et nibh. Phasellus a felis molestie, fermentum nunc ut, tincidunt felis. Nam quis fermentum velit. Fusce condimentum vehicula porttitor. Aliquam sagittis faucibus urna ac lacinia. Praesent id porta dolor. Donec a pulvinar dui, quis malesuada risus. Cras semper venenatis augue.</p>
<p>Nam molestie eget nulla sit amet hendrerit. Morbi vulputate commodo est, in elementum turpis luctus at. Integer velit urna, tincidunt in aliquam eget, pulvinar in odio. In pharetra sapien mauris, ac sagittis leo venenatis eget. Integer laoreet turpis ac sollicitudin placerat. Curabitur non aliquet massa. Morbi non volutpat enim. Etiam non placerat arcu. In non tellus tempus, consectetur leo ultrices, tincidunt eros. Cras euismod volutpat erat, eget rutrum orci vestibulum sit amet. Mauris eu dui purus. Aliquam condimentum varius nibh, eget consequat nibh commodo non. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec vestibulum risus purus, a accumsan massa semper sed. Fusce sit amet est suscipit, consectetur ex sit amet, congue sem.</p>
<p>Etiam blandit magna felis, ac iaculis purus auctor eget. Morbi eleifend, mi a fringilla cursus, dolor erat placerat magna, consectetur imperdiet turpis felis in ante. In ut velit ut eros venenatis consectetur in sed justo. Phasellus posuere, nulla sit amet iaculis cursus, enim mi tincidunt tellus, id auctor eros velit id massa. Suspendisse rutrum vel magna at gravida. Nulla commodo hendrerit lorem, sit amet volutpat massa tristique nec. In accumsan diam ac risus luctus varius. Etiam aliquet, quam eu efficitur eleifend, mi lacus tincidunt neque, at egestas lacus felis quis purus. Aenean lobortis nisi a finibus eleifend. Suspendisse euismod, sapien at viverra aliquam, mauris tortor blandit tortor, fringilla tempor eros urna vitae ligula. Aliquam erat volutpat.</p>
<p>Donec vulputate ex ut risus ullamcorper molestie. Proin interdum, augue ut gravida placerat, quam ipsum maximus neque, pretium semper tellus eros vitae leo. Donec eu eleifend metus. In et urna lacinia urna vulputate faucibus ullamcorper vel erat. Duis vehicula aliquet libero, non convallis erat hendrerit et. Proin ornare pretium pulvinar. Suspendisse potenti. Vestibulum varius magna id lectus finibus mattis. Quisque nulla eros, elementum a dictum quis, tempor et libero. Aenean sollicitudin tellus elit, at lobortis ex tempor ut. Maecenas ac tincidunt enim, vitae tempor nibh. Maecenas malesuada egestas orci, facilisis malesuada metus bibendum a. Aliquam erat volutpat.</p>
<p>Fusce tempor eu quam non rutrum. Donec at nibh erat. Integer congue nisl a aliquet porttitor. Aliquam luctus rutrum metus vitae iaculis. Maecenas rhoncus feugiat massa vel commodo. Aliquam dignissim consectetur lacinia. Quisque finibus nibh nec est lobortis hendrerit. Vivamus ut ex id metus pellentesque lacinia non id ligula. Maecenas non tortor lobortis, fringilla velit sed, lobortis leo. </p>
</main>

Overflow DIV to fit exactly inside browser

I am trying to set vertical scroll bar to the div2 to replace the default browser vertical scroll bar.
.div1 {
height: 200px;
}
.div2 {
overflow-y: auto;
height: 500px;
}
<div id='container' style="height:100%">
<div class='div1'>
div1 content
</div>
<div class='div2'>
div2 content
</div>
</div>
With the above style, document is left with blank space at the bottom since height of div2 is not exactly occupying the entire document height. How do I fix that?
The steps to achieve what you want are:
Set both html's and body's margin and padding to 0.
Set the header's height to the fixed height you want: in your case, 200px.
Set the .main's height to 100% of the viewport less the header height: calc(100vh - 200px).
Set the .main's overflow-y to auto.
Create a section into the .main, and set the margin you want to show your content (optional).
And then, we're done! Take a look at the example below (if you want to test it in a better way, click on the Full Page button, and then play with your window's resizing etc):
html,
body {
overflow: hidden;
padding: 0;
margin: 0;
}
header {
height: 120px;
background-color: blue;
}
div.main {
height: calc(100vh - 120px);
background-color: red;
overflow-y: auto;
}
div.main > section {
margin: 10px;
}
div.main > div > p {
text-align: justify;
}
<header>
</header>
<div class="main">
<section>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tincidunt enim sit amet diam bibendum, ut rhoncus est molestie. Ut vulputate egestas mauris, eget ultricies tellus aliquet nec. Mauris nec neque et lorem volutpat feugiat eget sit amet
erat. Nullam luctus ultricies augue ut cursus. Mauris pulvinar velit at venenatis semper. Quisque non dolor ante. Nulla tempus id turpis et placerat. Interdum et malesuada fames ac ante ipsum primis in faucibus. Vestibulum justo elit, rhoncus vitae
massa non, condimentum ornare quam. Duis sit amet orci a risus mollis gravida et quis augue. Donec sed felis ante. Vestibulum rutrum non dolor quis finibus. Vestibulum ultricies leo eget mi elementum, vel vestibulum felis maximus. Donec congue lorem
vel ante mattis, eu luctus magna finibus. Donec sit amet dui quam.
</p>
<p>
In ullamcorper, nibh eget venenatis imperdiet, augue ante porttitor mauris, nec scelerisque tortor nisi eu arcu. Phasellus libero ligula, eleifend a lobortis in, cursus in tellus. Morbi volutpat, sem a dignissim venenatis, velit nulla vehicula sem, ut
fermentum augue eros sit amet nisi. Vivamus eget ex id turpis scelerisque lobortis sed sed arcu. Nulla facilisi. Curabitur hendrerit iaculis justo, at iaculis est facilisis sit amet. Donec sem tellus, posuere et metus id, consectetur vehicula sapien.
Ut eros quam, tempor vitae quam sed, efficitur faucibus sapien. Mauris varius velit orci, sit amet fermentum neque auctor ac. Nullam pretium sed urna et pellentesque.
</p>
<p>
Nunc id odio ligula. Sed ut dolor vitae sem fringilla condimentum. Sed venenatis lacus a magna egestas, nec volutpat quam ullamcorper. Maecenas volutpat eu magna nec ultrices. In egestas, risus id porta condimentum, odio urna ultricies mi, ut elementum
magna tortor quis eros. Sed a hendrerit felis. Curabitur id sem consectetur, luctus velit in, sollicitudin elit. Proin ac commodo tortor. Proin imperdiet id massa at sollicitudin. Pellentesque enim arcu, venenatis ut dictum et, ornare at tortor.
Donec et urna nec metus rhoncus auctor. Nunc id nisi nec sem condimentum vehicula a in arcu.
</p>
<p>
Proin eleifend sem massa, at auctor eros porta congue. Aliquam nec aliquet justo, at cursus ipsum. Cras justo leo, varius vel accumsan eget, sagittis sit amet lorem. Donec pulvinar ante ut efficitur eleifend. Duis tincidunt metus non nunc accumsan, vel
accumsan velit rhoncus. Nunc arcu magna, sollicitudin non urna in, pellentesque dignissim eros. Nam placerat sodales rutrum. Sed quis placerat leo. Nunc porttitor nisi nunc, in feugiat dolor accumsan nec. Aliquam gravida diam ac tempor sodales.
Ut in sapien gravida odio molestie vehicula sed vel nulla. Integer sed ipsum semper, auctor massa eget, viverra justo. Nullam mattis suscipit lorem vel mattis. Morbi non aliquet nunc. In hac habitasse platea dictumst.
</p>
<p>
Pellentesque dapibus sapien quis congue porta. Maecenas faucibus ex nisi, in varius risus imperdiet ac. Aliquam tristique egestas ligula, sed vestibulum lacus mollis vel. Nunc non ante ut quam placerat suscipit. Lorem ipsum dolor sit amet, consectetur
adipiscing elit. In a viverra augue, a dignissim justo. Aliquam volutpat nibh ut tellus interdum suscipit. Praesent mi sem, mollis in libero vel, pretium accumsan ex. Nullam gravida diam quis semper faucibus. Nullam cursus felis dolor, sed egestas
ex lobortis et. Vivamus at maximus felis, vel posuere purus. Quisque pellentesque risus nec posuere suscipit. Aliquam eleifend tempus ante, vel vehicula nunc facilisis quis. Mauris lacinia, felis at ultrices luctus, lacus nisl molestie neque, et
varius urna velit at massa. Nulla facilisi.
</p>
</section>
</div>
I'm not absolutely sure what you're trying to do but try adding this to your css and see if it fixes it.
html, body { height: 100%; }
Try this. The border on div1 and div2 is just to show the height of the div. Feel free to remove it ;)
#container {
height: 100%;
position: absolute;
}
.div1 {
height: 200px;
position: relative;
border: 2px solid yellow;
}
.div2 {
overflow-y: auto;
position: relative;
height: 100%;
border: 2px solid red;
}
<div id='container' style="height:100%">
<div class='div1'>
div1 content
</div>
<div class='div2'>
div2 content
</div>
</div>

How can I make my sidebar fixed after a certain size?

I see this sample:
link
If you do come down ... you see the sidebar on the right becomes fixed after a certain size ... you actually get down to almost everything.
How it was made an event the example?
With JQuery?
This is the link to my site
I tried to do something similar but incomplete
CODE JS:
$(window).scroll(function() {
var height = $(window).scrollTop();
console.log(height);
if(height > 700) {
//alert("test");
//after a certain size should be fixed ... what code should be here?
}
});
Did you have any idea as an example?
Can you help me solve this problem please?
Thanks in advance!
Here the example of not smooth scrolling of div.
(function($) {
var element = $('.follow-scroll'),
originalY = element.offset().top;
// Space between element and top of screen (when scrolling)
var topMargin = 20;
// Should probably be set in CSS; but here just for emphasis
element.css('position', 'relative');
$(window).on('scroll', function(event) {
var scrollTop = $(window).scrollTop();
element.stop(false, false).animate({
top: scrollTop < originalY
? 0
: scrollTop - originalY + topMargin
}, 0);
});
})(jQuery);
html { box-sizing: border-box; }
*, *:before, *:after { box-sizing: inherit; }
.group:after { content: ""; display: table; clear: both; }
body { font: 15px/20px sans-serif; color: #444; }
p { margin-bottom: 30px; }
.wrapper { width: 100%; max-width: 700px; padding: 3%; }
.content, .sidebar { float: left; }
.content { width: 68%; margin-right: 5%; }
.sidebar { width: 27%; }
.box { background: #eee; border: 1px solid #ccc; padding: 10px; margin-bottom: 20px; }
<div class="wrapper group">
<div class="content">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam euismod arcu ut diam maximus auctor. Sed malesuada maximus tellus, dignissim volutpat urna hendrerit at. Cras nisi turpis, mattis vitae ornare ut, bibendum et massa. Nulla at tellus a arcu luctus ultrices ac non felis. Maecenas euismod efficitur ipsum vel vestibulum. Nam imperdiet ipsum nunc, sit amet varius felis maximus quis. Etiam efficitur, mauris placerat luctus facilisis, ligula sem pellentesque nunc, ac viverra tellus velit sit amet purus. Proin a nunc id quam tempor blandit vitae id orci. Cras lectus turpis, varius nec elementum venenatis, suscipit ut nisl.</p>
<p>Nulla condimentum est in leo mollis, sit amet varius erat pulvinar. Donec posuere turpis non est ultrices lobortis. Donec commodo aliquam sodales. Ut id finibus velit. Aenean tempus eget nulla at condimentum. Ut a arcu quis dui ultricies efficitur. Vestibulum suscipit diam ullamcorper velit tempor, in ullamcorper odio sollicitudin. Vestibulum congue nisl nibh, ut elementum quam tristique non. Nulla in sollicitudin dolor. Morbi ac justo nulla. Suspendisse massa neque, vestibulum id dolor non, congue rhoncus nibh.</p>
<p>Phasellus porta tellus vel ipsum vehicula, nec fermentum lectus porta. Aenean viverra magna eu risus lacinia malesuada. Sed molestie auctor pharetra. Aliquam erat volutpat. Vestibulum in mi a orci tincidunt pellentesque. Sed et lectus eros. Nam imperdiet neque eu dolor gravida, interdum pellentesque justo rhoncus. Morbi tincidunt, ex nec pellentesque pulvinar, dui nulla tempor ipsum, sed consequat est tortor at neque. Suspendisse sed consequat urna. Nullam luctus, sem convallis volutpat mollis, sapien odio finibus elit, vitae fringilla enim leo sed velit. Vivamus fringilla ante laoreet blandit porta. Sed condimentum ut erat nec dignissim.</p>
<p>Morbi ac scelerisque metus. Donec rhoncus diam urna, nec aliquet ex mollis ut. Sed a arcu ac risus semper pellentesque ut non nibh. Phasellus eu ullamcorper sem. Maecenas at tortor faucibus, consequat risus sed, egestas sapien. Suspendisse tortor lacus, congue sed velit vel, dictum sagittis eros. Proin eu nisl viverra, mattis velit vitae, tempor turpis. Ut sodales lacus in iaculis faucibus. Integer non metus non nulla malesuada rutrum ac non ipsum. Vivamus quam diam, suscipit sed velit vel, tincidunt imperdiet urna. Praesent dapibus augue a dignissim lacinia. Nullam pharetra volutpat ligula, quis aliquet mauris pharetra nec. Etiam finibus, neque in laoreet vehicula, lorem justo feugiat velit, ac accumsan neque lacus non tellus. Aliquam quis sagittis massa, a bibendum enim.</p>
<p>Morbi vel elementum libero, vitae viverra est. Pellentesque sollicitudin neque at ligula suscipit, vel faucibus mauris consequat. Donec quis pharetra nulla, at tristique lacus. Nunc vel magna ultricies, hendrerit purus et, rhoncus dolor. Aliquam erat volutpat. Phasellus auctor malesuada augue, a iaculis sem mattis quis. Nulla facilisi.</p>
</div>
<div class="sidebar">
<div class="box">
First box
</div>
<div class="box">
Second box
</div>
<div class="box follow-scroll">
Third box (follows screen)
</div>
</div>
</div>

Categories