Section breaks for very long CSS columns - javascript

Using CSS columns I can format contiguous data into columns without having to manually break it into sections. This is especially useful when displaying complex, dynamic content.
However when the columns' content is so long that their height is greater than the viewport, dividing into columns makes for a poor reading experience. When the reader reaches the bottom of one column they must manually scroll up to begin reading the next.
In traditional print layouts, readability issues with very long columns are generally mitigated by breaking the columns into sections that 'restart' the column. (Physical pages themselves form a natural separation that the endlessly scrolling webpage does not have). The image below shows how horizontal section breaks makes columnar content that is longer than the height of the viewport more readable.
(Note that by 'restart the columns' I mean that once you reach the end of a left-hand column section you then read the right-hand column of that section before scrolling down to read both columns of the next section. https://www.shutterstock.com/image-vector/newspaper-template... might illustrate it more clearly).
There are very few guarantees for the column content. It may contain any number of paragraphs, images, nested block elements, nested inline elements and so on. Example markup is shown below.
.columns {
columns: 2 200px;
}
.columns * {
max-width: 100%;
}
<div class="columns">
<div class="introduction">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas posuere dictum tincidunt. Cras in lectus eget libero suscipit venenatis at sit amet dolor. Donec tempor cursus justo, volutpat sodales dolor tempor eu.</p>
<p class="a-class">Pellentesque nec tempor sapien, sed vehicula sem. Ut pretium leo eget nisi cursus viverra. Ut ultrices porta nibh, sed laoreet felis condimentum sit amet. Aliquam a felis nec urna dignissim placerat sed sit amet elit. Donec elementum sagittis purus, facilisis convallis urna dapibus eu. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam erat volutpat. Phasellus vel placerat metus. In efficitur enim eget lacinia ultrices. Duis ultricies dignissim nisi, id ultricies nulla venenatis vitae.</p>
</div>
<img src="https://i.kym-cdn.com/entries/icons/original/000/016/546/hidethepainharold.jpg">
<div class="body" style="">
<p>Suspendisse quis ante ullamcorper, lobortis orci ut, vestibulum dolor. Aenean sit amet purus commodo, sagittis leo vel, consequat nisi. Vestibulum sit amet sem vitae sapien pulvinar finibus. Ut sapien purus, luctus condimentum iaculis quis, lobortis at elit. Cras nulla ante, scelerisque ut aliquet in, elementum vel turpis. Vestibulum ipsum magna, congue sit amet sodales vel, aliquam vel nunc. <img src="https://upload.wikimedia.org/wikipedia/commons/e/e0/SNice.svg" width="100"> Sed eu dapibus nulla. In ut libero sit amet elit elementum gravida. Suspendisse quis quam consequat, pretium felis vel, laoreet turpis. Proin fringilla lobortis magna. Duis quam sapien, sodales nec accumsan id, ullamcorper eget tellus. Aliquam vitae orci cursus, porttitor ligula ut, fringilla odio. Donec a lorem ac eros interdum varius ultricies quis nulla.</p>
</div>
<p contenteditable="true">Nunc in elit tincidunt, ultrices massa sed, ultricies elit. In nec accumsan metus. Nullam ultricies eget tortor ut malesuada. Fusce in elit sit amet dolor bibendum malesuada.</p>
<div style="display:none">
<p>Curabitur sed hendrerit massa, vitae porta enim.</p>
</div>
<div><div><span>hey</span><div id="an-id">
Nullam ultricies eget tortor ut malesuada. Fusce in elit sit amet dolor bibendum malesuada. Nulla sed nisi vel nulla aliquam blandit. Nam vel tellus ut libero ultrices volutpat. Curabitur blandit quis arcu rutrum ullamcorper. Cras et pharetra augue, eget eleifend sem.
<img src="https://socialnewsdaily.com/wp-content/uploads/2018/08/Webp.net-resizeimage-27.jpg">
</div></div></div>
<p>
Mauris accumsan condimentum porttitor. Quisque tellus justo, suscipit sit amet posuere in, scelerisque nec orci. Aenean iaculis nisi in porta viverra. Sed eget ultricies nibh. Donec accumsan laoreet interdum. Donec risus mauris, dapibus et pulvinar at, posuere non nisi. Mauris at viverra nunc. Ut laoreet suscipit erat et cursus. Aenean id lacus volutpat lectus condimentum posuere. Nam ut lectus elit. Morbi sagittis elementum libero. Donec congue dolor sed tristique efficitur.
</p>
<p>
<div>
<p>Sed elementum velit sapien, et tristique justo bibendum at. Aliquam tincidunt magna nec nisi congue varius. Etiam dolor eros, rhoncus quis purus a, tempus malesuada quam. Sed bibendum condimentum eros vitae varius. Donec fermentum magna vel tellus tempus, nec finibus neque fermentum. Mauris tempus nisl sit amet lacus fermentum, at egestas urna egestas.</p>
<p>Interdum et malesuada fames ac ante ipsum primis in faucibus. Suspendisse ultrices lectus vitae nisl congue, sed porta dolor luctus. Donec aliquet at sapien sit amet tincidunt. Mauris vestibulum consectetur augue at imperdiet.</p>
</div>
</p>
</div>
I would like to automatically break my columns into regular sections after the columns reach a maximum height, as in the image above.
I have not found any property that controls the layout of CSS columns in this way. CSS regions look promising but have very poor browser support.
Computing the height of content with JavaScript and then inserting wrappers for each column block is probably possible, but not ideal. The content is dynamic and may change at any time, meaning the function must be run on every change. In addition the content may be very complex with sub elements that need to traverse section breaks, so naively inserting wrappers for each section will likely break the layout.
How can I automatically set section breaks for columnar content after a maximum height? (I am not married to the idea of CSS columns; perhaps a creative use of flex or inline-block will give the result I need).

There's actually a pretty simple solution using CSS columns. And the column-span attribute.
You can achieve all of this WITHOUT injecting anything into the content and simply styling HTML tags.
Basically, the CSS Columns Layout Module is intended to replicate print design layouts (like a newspaper) where the stylistic rule is that headlines should cross all columns of a story. Therefore any element with column-span: all will separate columns and cause the wrapping to reset. (notice the colors in my example show the wrap).
In this case, since you don't control the content its best to provide a common structure to your users. For example, I'd set H1, H2, H3 tags as well as <hr> and maybe some images to break columns. Allow your users to implement these tags as they normally would in writing and you'll achieve a nice layout. However, if they decide NOT to implement any of that stuff, that's up to them and you should let it wrap and cause a long scroll. (I might also suggest providing a preview so they can see what the result will look like)
Example of column-span
.columns {
margin: 30px;
columns: 2;
}
h1, h2, h3, h4, h5 {
column-span: all;
}
// simply to show where things wrap
h2 {
background-color: #eee;
padding: 5px 10px;
}
h5 {
border-bottom: 1px solid #ddd;
padding-bottom: 5px;
text-align: center;
}
p:nth-of-type(1) {
color: blue;
}
p:nth-of-type(2) {
color: green;
}
p:nth-of-type(3) {
color: orange;
}
p:nth-of-type(4) {
color: teal;
}
<div class="columns">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras venenatis tellus non nunc tincidunt, vitae rutrum metus dapibus. Fusce at ante massa. Nam et nibh aliquet, porta nibh quis, rhoncus tortor. Aenean vestibulum neque sed urna lacinia aliquet.
Vestibulum facilisis egestas commodo. Cras sed maximus odio. Mauris posuere, ante id posuere facilisis, ligula libero consectetur lacus, at pellentesque nibh elit at magna. Proin sollicitudin quis nibh at viverra. Duis feugiat, lorem vitae facilisis
blandit, augue tortor cursus orci, sed porttitor eros elit at sapien. Quisque eleifend pulvinar pellentesque.
</p>
<h2>This is a header (h2) with column-span: all set on it</h2>
<p>
Donec blandit sapien leo, id aliquam purus vulputate a. Sed vel turpis ut eros suscipit blandit vel id eros. Nullam ut mauris luctus magna sollicitudin venenatis. Pellentesque leo mauris, malesuada nec purus ut, vestibulum malesuada lectus. Nullam ultricies
tellus sapien, ut fermentum risus pretium a. Nullam magna urna, ullamcorper non congue a, efficitur nec orci. Ut aliquam molestie nisi. In at accumsan purus. Etiam non tempor ipsum. Maecenas gravida mauris in nibh vehicula ullamcorper. Sed libero lorem,
faucibus eu lorem ut, gravida eleifend enim. Nunc vehicula fermentum consequat. Phasellus a pellentesque nisl. Nulla vel suscipit nibh, ac cursus dui. Suspendisse elementum dapibus risus. Nam egestas congue finibus.
</p>
<p>
Nunc vel risus nec nulla dignissim congue. Cras sit amet lacus nec nisl mollis pellentesque in vel purus. Suspendisse efficitur mollis nibh, congue facilisis libero auctor ac. Nulla facilisi. Etiam ut erat eget erat egestas suscipit. Curabitur vitae varius
mauris. Sed accumsan diam eros, id dapibus metus rutrum at. Nunc vitae pretium massa. Aenean quis mauris leo. Nulla egestas ligula eu libero interdum feugiat. Aliquam maximus erat et tortor auctor varius. Nulla in pharetra leo, vel suscipit nunc. Orci
varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec nec egestas ante, vitae sollicitudin arcu. Pellentesque posuere tempus nibh, nec tempus eros pellentesque ac.
</p>
<p>
Curabitur tempus massa dolor, nec congue purus efficitur id. Phasellus a dictum mauris. In porta nulla lectus, pretium semper erat semper id. Fusce ornare fringilla mi, ut auctor tortor semper non. Aliquam sed felis fermentum, molestie dolor vel, eleifend
diam. Donec accumsan bibendum mi, sed pretium tortor pulvinar nec. Aliquam et metus accumsan, pretium neque eu, elementum ipsum. Nam dapibus risus sed velit viverra, non consequat nibh pretium. Morbi nec gravida turpis. Quisque convallis justo ut rhoncus
porttitor. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
</p>
<h5>This is a header (h5) with column-span: all set on it</h5>
<p>
Proin fringilla, sapien molestie mattis commodo, leo ligula viverra massa, eget semper leo purus sit amet est. Quisque eu diam interdum, pretium dui sed, dictum sem. Sed cursus eu est in ultrices. Suspendisse eleifend imperdiet lectus eu consectetur.
Duis semper libero nec magna commodo, sollicitudin pharetra magna luctus. Fusce pellentesque sollicitudin dolor, eu scelerisque elit condimentum vel. Curabitur id condimentum nisi, eu rhoncus arcu. Proin metus purus, condimentum nec semper vitae, blandit
at leo. Proin commodo et ipsum ac euismod. Aliquam erat volutpat. Nam neque nisi, ornare sit amet metus ac, faucibus tempor nulla. Quisque tristique malesuada finibus. Praesent fermentum posuere urna, a blandit risus sollicitudin nec.
</p>
</div>

Using 'break-inside: avoid;' each paragraph
In the solution I attached, I gave each DIV a break-avoid class to avoid breaking in the middle of the paragraph.
Like you asked, if the paragraph is not over yet you can scroll down. I added a gray color that you can see in the paragraphs.
You can control when it will break and you can also insert a div into a div if you want it in sequence.
Hope the solution is effective for you.
.columns {
columns: 5 250px;
}
.columns * {
max-width: 100%;
}
.break-avoid{
break-inside: avoid;
background-color: #ccc;
}
<div class="columns">
<div class="introduction break-avoid">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas posuere dictum tincidunt. Cras in lectus eget libero suscipit venenatis at sit amet dolor. Donec tempor cursus justo, volutpat sodales dolor tempor eu.</p>
<p class="a-class">Pellentesque nec tempor sapien, sed vehicula sem. Ut pretium leo eget nisi cursus viverra. Ut ultrices porta nibh, sed laoreet felis condimentum sit amet. Aliquam a felis nec urna dignissim placerat sed sit amet elit. Donec elementum sagittis purus, facilisis convallis urna dapibus eu. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam erat volutpat. Phasellus vel placerat metus. In efficitur enim eget lacinia ultrices. Duis ultricies dignissim nisi, id ultricies nulla venenatis vitae.</p>
</div>
<img src="https://i.kym-cdn.com/entries/icons/original/000/016/546/hidethepainharold.jpg">
<div class="body break-avoid" style="">
<div>
<p>Suspendisse quis ante ullamcorper, lobortis orci ut, vestibulum dolor. Aenean sit amet purus commodo, sagittis leo vel, consequat nisi. Vestibulum sit amet sem vitae sapien pulvinar finibus. Ut sapien purus, luctus condimentum iaculis quis, lobortis at elit. Cras nulla ante, scelerisque ut aliquet in, elementum vel turpis. Vestibulum ipsum magna, congue sit amet sodales vel, aliquam vel nunc.Suspendisse quis ante ullamcorper, lobortis orci ut, vestibulum dolor. Aenean sit amet purus commodo, sagittis leo vel, consequat nisi. Vestibulum sit amet sem vitae sapien pulvinar finibus. Ut sapien purus, luctus condimentum iaculis quis, lobortis at elit. Cras nulla ante, scelerisque ut aliquet in, elementum vel turpis. Vestibulum ipsum magna, congue sit amet sodales vel, aliquam vel nunc.Suspendisse quis ante ullamcorper, lobortis orci ut, vestibulum dolor. Aenean sit amet purus commodo, sagittis leo vel, consequat nisi. Vestibulum sit amet sem vitae sapien pulvinar finibus. Ut sapien purus, luctus condimentum iaculis quis, lobortis at elit. Cras nulla ante, scelerisque ut aliquet in, elementum vel turpis. Vestibulum ipsum magna, congue sit amet sodales vel, aliquam vel nunc.Suspendisse quis ante ullamcorper, lobortis orci ut, vestibulum dolor. Aenean sit amet purus commodo, sagittis leo vel, consequat nisi. Vestibulum sit amet sem vitae sapien pulvinar finibus. Ut sapien purus, luctus condimentum iaculis quis, lobortis at elit. Cras nulla ante, scelerisque ut aliquet in, elementum vel turpis. Vestibulum ipsum magna, congue sit amet sodales vel, aliquam vel nunc. <img src="https://upload.wikimedia.org/wikipedia/commons/e/e0/SNice.svg" width="100"> Sed eu dapibus nulla. In ut libero sit amet elit elementum gravida. Suspendisse quis quam consequat, pretium felis vel, laoreet turpis. Proin fringilla lobortis magna. Duis quam sapien, sodales nec accumsan id, ullamcorper eget tellus. Aliquam vitae orci cursus, porttitor ligula ut, fringilla odio. Donec a lorem ac eros interdum varius ultricies quis nulla.</p>
</div>
</div>
<p class="break-avoid" contenteditable="true">Nunc in elit tincidunt, ultrices massa sed, ultricies elit. In nec accumsan metus. Nullam ultricies eget tortor ut malesuada. Fusce in elit sit amet dolor bibendum malesuada.</p>
<div style="display:none;" class="break-avoid">
<p>Curabitur sed hendrerit massa, vitae porta enim.</p>
</div>
<div class="break-avoid"><div><span>hey</span><div id="an-id">
Nullam ultricies eget tortor ut malesuada. Fusce in elit sit amet dolor bibendum malesuada. Nulla sed nisi vel nulla aliquam blandit. Nam vel tellus ut libero ultrices volutpat. Curabitur blandit quis arcu rutrum ullamcorper. Cras et pharetra augue, eget eleifend sem.
<img src="https://socialnewsdaily.com/wp-content/uploads/2018/08/Webp.net-resizeimage-27.jpg">
</div></div></div>
<div class="break-avoid">
<p>
Mauris accumsan condimentum porttitor. Quisque tellus justo, suscipit sit amet posuere in, scelerisque nec orci. Aenean iaculis nisi in porta viverra. Sed eget ultricies nibh. Donec accumsan laoreet interdum. Donec risus mauris, dapibus et pulvinar at, posuere non nisi. Mauris at viverra nunc. Ut laoreet suscipit erat et cursus. Aenean id lacus volutpat lectus condimentum posuere. Nam ut lectus elit. Morbi sagittis elementum libero. Donec congue dolor sed tristique efficitur.
</p>
</div>
<div class="break-avoid">
<p>Sed elementum velit sapien, et tristique justo bibendum at. Aliquam tincidunt magna nec nisi congue varius. Etiam dolor eros, rhoncus quis purus a, tempus malesuada quam. Sed bibendum condimentum eros vitae varius. Donec fermentum magna vel tellus tempus, nec finibus neque fermentum. Mauris tempus nisl sit amet lacus fermentum, at egestas urna egestas.</p>
<p>Interdum et malesuada fames ac ante ipsum primis in faucibus. Suspendisse ultrices lectus vitae nisl congue, sed porta dolor luctus. Donec aliquet at sapien sit amet tincidunt. Mauris vestibulum consectetur augue at imperdiet.</p>
</div>
</div>

Related

Adding ScrollOut animation to headings using CSS and JS

This Codepen script uses SCSS to acheive animation to headings during scrolling of the webpage.
I converted it to CSS format and it does not seems to be working when added to a website - W3Spaces Page Output. Is it possible to get the effect with CSS?
<!DOCTYPE html>
<html>
<head><style>
h1.splitting {
color: #84a8ff;
}
h1.splitting .char {
transition: transform 0.3s cubic-bezier(0.3, 0, 0.3, 1), opacity 0.3s linear;
transition-delay: calc(20ms * var(--char-index));
}
h1.splitting[data-scroll="out"] .char {
opacity: 0.1;
transform: translateY(0.25em);
}
</style>
<script type="text/javascript">
Splitting();
ScrollOut({
targets: 'h1,h2,h3,h4'
});
</script>
</head>
<div class="page">
<h1 data-splitting>ScrollOut + Splitting.js</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent bibendum, lorem vel tincidunt imperdiet, nibh elit laoreet felis, a bibendum nisl tortor non orci. Donec pretium fermentum felis, quis aliquet est rutrum ut. Integer quis massa ut lacus viverra pharetra in eu lacus. Aliquam tempus odio adipiscing diam pellentesque rhoncus. Curabitur a bibendum est. Mauris vehicula cursus risus id luctus. Curabitur accumsan venenatis nibh, non egestas ipsum vulputate ac. Vivamus consectetur dolor sit amet enim aliquet eu scelerisque ipsum hendrerit. Donec lobortis suscipit vestibulum. Nullam luctus pellentesque risus in ullamcorper. Nam neque nunc, mattis vitae ornare ut, feugiat a erat. Ut tempus iaculis augue vel pellentesque.</p>
<h1 data-splitting>Triggering Splitting Animations on Scroll</h1>
<p>Vestibulum nunc massa, gravida quis porta nec, feugiat id metus. Nunc ac arcu dolor, quis vestibulum leo. Cras viverra mollis ipsum, non rhoncus lectus aliquam et. Morbi faucibus purus sit amet lacus aliquet elementum. Donec sit amet posuere enim. Cras in eros id tortor fringilla ultricies. Mauris faucibus ullamcorper velit, pulvinar varius odio eleifend eu. Quisque id odio metus. Morbi adipiscing ultricies posuere. Pellentesque elementum porttitor eros in molestie. Maecenas ut leo quis nisi tempor tincidunt.</p>
<p>Donec nunc ligula, vulputate quis mollis eu, interdum quis libero. Donec nulla ante, facilisis sit amet vulputate at, tincidunt a velit. Maecenas vestibulum, nulla sed tincidunt viverra, lorem turpis aliquam urna, ut pretium orci purus consequat augue. Etiam a enim orci, vitae pulvinar odio. In elit urna, tincidunt a pellentesque et, scelerisque at nibh. Sed nec est sapien. Aliquam ullamcorper eros eu quam ultrices vel faucibus eros interdum. Etiam mattis eleifend sapien, eu iaculis massa feugiat sed. Aliquam erat volutpat. Vivamus facilisis ultricies eros, a pretium purus mollis id. Sed dapibus elit ut neque rutrum dignissim. Nulla eros nisl, venenatis quis rhoncus sit amet, molestie nec nisl. Pellentesque vel neque sapien, et sagittis nulla.</p>
<h1 data-splitting>Add a <code>transition</code> to your splits (<code>.char</code> for example)</h1>
<p>Aliquam eu iaculis mauris. Etiam arcu lectus, imperdiet sit amet volutpat vitae, commodo sed nibh. Fusce faucibus tempor cursus. Donec ut ligula tortor. Maecenas malesuada, diam vitae pharetra dictum, erat ante iaculis risus, sed sollicitudin nisl nisl vel metus. Nulla libero augue, convallis nec luctus id, iaculis nec urna. Cras vitae mi ut augue ultricies tempus.</p>
<p>Vestibulum euismod vehicula sollicitudin. Duis nibh justo, rhoncus ac ullamcorper nec, rutrum sit amet leo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum varius posuere nisi sed aliquet. Etiam dolor nisi, placerat vel congue tempus, posuere sed erat. Phasellus turpis eros, molestie sed consequat in, pretium at erat. In sed faucibus metus. Vestibulum fermentum libero nec eros fermentum dapibus. Duis nec libero eros. Pellentesque magna ligula, sagittis dictum fringilla at, posuere porttitor sem. Donec aliquam, ipsum quis pulvinar dapibus, augue sem viverra sapien, nec tempus odio nulla ac metus. Nunc ut augue mi, nec consequat urna.</p>
<h1 data-splitting>Target <code>[data-scroll="out"]</code> for the default state</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent bibendum, lorem vel tincidunt imperdiet, nibh elit laoreet felis, a bibendum nisl tortor non orci. Donec pretium fermentum felis, quis aliquet est rutrum ut. Integer quis massa ut lacus viverra pharetra in eu lacus. Aliquam tempus odio adipiscing diam pellentesque rhoncus. Curabitur a bibendum est. Mauris vehicula cursus risus id luctus. Curabitur accumsan venenatis nibh, non egestas ipsum vulputate ac. Vivamus consectetur dolor sit amet enim aliquet eu scelerisque ipsum hendrerit. Donec lobortis suscipit vestibulum. Nullam luctus pellentesque risus in ullamcorper. Nam neque nunc, mattis vitae ornare ut, feugiat a erat. Ut tempus iaculis augue vel pellentesque.</p>
<p>Vestibulum nunc massa, gravida quis porta nec, feugiat id metus. Nunc ac arcu dolor, quis vestibulum leo. Cras viverra mollis ipsum, non rhoncus lectus aliquam et. Morbi faucibus purus sit amet lacus aliquet elementum. Donec sit amet posuere enim. Cras in eros id tortor fringilla ultricies. Mauris faucibus ullamcorper velit, pulvinar varius odio eleifend eu. Quisque id odio metus. Morbi adipiscing ultricies posuere. Pellentesque elementum porttitor eros in molestie. Maecenas ut leo quis nisi tempor tincidunt.</p>
<h1 data-splitting>That's about it!</h1>
<p>Donec nunc ligula, vulputate quis mollis eu, interdum quis libero. Donec nulla ante, facilisis sit amet vulputate at, tincidunt a velit. Maecenas vestibulum, nulla sed tincidunt viverra, lorem turpis aliquam urna, ut pretium orci purus consequat augue. Etiam a enim orci, vitae pulvinar odio. In elit urna, tincidunt a pellentesque et, scelerisque at nibh. Sed nec est sapien. Aliquam ullamcorper eros eu quam ultrices vel faucibus eros interdum. Etiam mattis eleifend sapien, eu iaculis massa feugiat sed. Aliquam erat volutpat. Vivamus facilisis ultricies eros, a pretium purus mollis id. Sed dapibus elit ut neque rutrum dignissim. Nulla eros nisl, venenatis quis rhoncus sit amet, molestie nec nisl. Pellentesque vel neque sapien, et sagittis nulla.</p>
<p>Aliquam eu iaculis mauris. Etiam arcu lectus, imperdiet sit amet volutpat vitae, commodo sed nibh. Fusce faucibus tempor cursus. Donec ut ligula tortor. Maecenas malesuada, diam vitae pharetra dictum, erat ante iaculis risus, sed sollicitudin nisl nisl vel metus. Nulla libero augue, convallis nec luctus id, iaculis nec urna. Cras vitae mi ut augue ultricies tempus.</p>
<h1 data-splitting>For real. It's easy!</h1>
<p>Vestibulum euismod vehicula sollicitudin. Duis nibh justo, rhoncus ac ullamcorper nec, rutrum sit amet leo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum varius posuere nisi sed aliquet. Etiam dolor nisi, placerat vel congue tempus, posuere sed erat. Phasellus turpis eros, molestie sed consequat in, pretium at erat. In sed faucibus metus. Vestibulum fermentum libero nec eros fermentum dapibus. Duis nec libero eros. Pellentesque magna ligula, sagittis dictum fringilla at, posuere porttitor sem. Donec aliquam, ipsum quis pulvinar dapibus, augue sem viverra sapien, nec tempus odio nulla ac metus. Nunc ut augue mi, nec consequat urna.</p>
</div>
<script>
Splitting();
ScrollOut({
targets: 'h1,h2,h3,h4'
});
</script>
</body>
</html>
However, I have changed the JS code to just target all the headings:
ScrollOut({
targets: 'h1,h2,h3,h4'
});
The SCSS also converted into CSS.
But the code is not working.
You missed external CSS and Js library call,
<link rel='stylesheet' href='https://unpkg.com/splitting/dist/splitting.css' type='text/css' />
<style>
h1.splitting {
color: #84a8ff;
}
h1.splitting .char {
transition: transform 0.3s cubic-bezier(0.3, 0, 0.3, 1), opacity 0.3s linear;
transition-delay: calc( 20ms * var(--char-index) );
}
h1.splitting[data-scroll=out] .char {
opacity: 0.1;
transform: translateY(0.25em);
}
</style>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://unpkg.com/splitting/dist/splitting.js"></script>
<script src="https://unpkg.com/scroll-out/dist/scroll-out.js"></script>
Then, use it's method/options
<script>
Splitting();
ScrollOut({
targets: '[data-splitting]'
});
</script>
you need to add these resources for it to work the way you want
EXTERNAL CSS
css resource
EXTERNAL JAVASCRIPT
js resource#1
js resource#2

Fixed position element contained inside of container div of variable height

I am trying to make an element(social links) 'fixed' inside of a container div(blog post) that varies in height and doesn't continue past the container. So relative to the container div, not the window itself. If the Footer/Header are 500px in height, the social links span can overflow the blog container div. I would like it to snap to the top or bottom of the container div, only scrolling within.
example: https://jsfiddle.net/j8ayod1v/6/
<header></header>
<div class="blog-container">
<span class="social-links"></span>
</div>
<footer></footer>
You could try setting the position as sticky or absolute on the element you want to remain "fixed" within the grey container depending on the behavior you're looking for.
I added both below:
header {
background: red;
height: 100px;
}
footer {
background: red;
height: 300px;
}
article {
position: relative;
background: grey;
}
h1 {
padding: 10px 40px;
}
p {
padding: 10px 40px;
}
span {
background: green;
top: 0;
}
.sticky {
position: -webkit-sticky;
position: sticky;
float: left;
}
.absolute {
position: absolute;
right: 0;
}
<header>
</header>
<article>
<span class="sticky">Fixed (sticky)</span>
<span class="absolute">Fixed (absolute)</span>
<h1>Blog Post</h1>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean pulvinar finibus dolor, quis commodo lacus tristique in. Donec mattis massa volutpat, tristique lacus id, aliquam dolor. Mauris sed imperdiet lacus. Sed vitae cursus enim. Mauris lacinia lectus commodo nunc sodales pellentesque. Proin luctus commodo mi, vestibulum tempor elit. Praesent in dolor eleifend ante rutrum ultrices in eu nibh.
Nullam scelerisque lobortis diam, lobortis accumsan nunc molestie ac. Curabitur quis lorem id neque egestas scelerisque vitae id tellus. Morbi convallis, ante id viverra sagittis, lorem neque viverra eros, in finibus lorem purus id velit. Vivamus vitae nunc id nunc condimentum fringilla. Vivamus elementum semper mattis. Sed et porttitor lorem. Vivamus egestas hendrerit nisi, vitae sodales turpis molestie eget. Aliquam erat volutpat. Proin augue ante, dignissim ac nisi ac, blandit laoreet elit.
Donec feugiat leo suscipit diam pharetra efficitur. Curabitur augue sapien, pretium eu congue a, iaculis in tortor. Morbi nec sapien et elit venenatis pulvinar. Ut nec arcu egestas, dignissim enim sit amet, condimentum nulla. Morbi nisi nunc, interdum quis elementum id, vehicula vel risus. Sed eu sem ut eros euismod condimentum ac vel arcu. Duis gravida mattis sem, in porttitor ligula.
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Donec maximus augue at nunc hendrerit, nec lobortis libero tincidunt. Mauris at viverra dolor. Praesent sed dolor ut nibh ultrices rutrum. Vestibulum aliquam, quam nec euismod dignissim, ipsum neque semper arcu, eu fringilla nibh velit ut tortor. Curabitur molestie enim vitae accumsan venenatis. Nullam sit amet turpis enim. In tincidunt nisl et nisi posuere, in semper massa fermentum. Phasellus sodales justo ac mauris malesuada, non aliquam mauris ultricies. Curabitur vel neque non augue pulvinar consequat. Duis quis elit sodales, tincidunt ipsum sed, ullamcorper tellus. Fusce sed felis euismod, aliquam lacus eget, blandit turpis. Vivamus sapien elit, gravida ac rhoncus eget, interdum nec velit. Praesent quis velit in ex aliquet cursus vitae sit amet metus. Aliquam molestie enim vitae mauris ornare, non ullamcorper augue lacinia.
Donec consectetur id justo quis aliquam. Fusce sollicitudin turpis ligula. Etiam vel viverra tellus. Curabitur eu cursus nisi. Morbi euismod maximus malesuada. Donec condimentum, orci quis fermentum tempor, turpis enim tincidunt enim, ac posuere nisl nisl non ipsum. Aliquam iaculis risus a urna molestie auctor. Suspendisse ac lorem dui. In hac habitasse platea dictumst. Quisque risus nisl, tempus et nunc id, dictum mattis erat. Nulla pulvinar lectus ac turpis sagittis porttitor. Duis sed bibendum est, ut tincidunt eros. Donec eleifend rutrum turpis nec luctus. Maecenas auctor, libero quis dictum dictum, odio lorem cursus metus, sed viverra nulla tortor ut lorem. Ut at mattis augue, sit amet consequat elit. Quisque vehicula nulla et suscipit facilisis.
</p>
</article>
<footer>
</footer>
Is this what you need?
header {
background: red;
height: 500px;
}
footer {
background: red;
height: 500px;
}
article {
position: relative;
background: grey;
}
h1 {
padding: 10px 40px;
}
p {
padding: 10px 40px;
}
span {
background: green;
position: sticky;
top:0;
}
<header>
</header>
<article>
<span>Fixed</span>
<h1>Blog Post</h1>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean pulvinar finibus dolor, quis commodo lacus tristique in. Donec mattis massa volutpat, tristique lacus id, aliquam dolor. Mauris sed imperdiet lacus. Sed vitae cursus enim. Mauris lacinia lectus commodo nunc sodales pellentesque. Proin luctus commodo mi, vestibulum tempor elit. Praesent in dolor eleifend ante rutrum ultrices in eu nibh.
Nullam scelerisque lobortis diam, lobortis accumsan nunc molestie ac. Curabitur quis lorem id neque egestas scelerisque vitae id tellus. Morbi convallis, ante id viverra sagittis, lorem neque viverra eros, in finibus lorem purus id velit. Vivamus vitae nunc id nunc condimentum fringilla. Vivamus elementum semper mattis. Sed et porttitor lorem. Vivamus egestas hendrerit nisi, vitae sodales turpis molestie eget. Aliquam erat volutpat. Proin augue ante, dignissim ac nisi ac, blandit laoreet elit.
Donec feugiat leo suscipit diam pharetra efficitur. Curabitur augue sapien, pretium eu congue a, iaculis in tortor. Morbi nec sapien et elit venenatis pulvinar. Ut nec arcu egestas, dignissim enim sit amet, condimentum nulla. Morbi nisi nunc, interdum quis elementum id, vehicula vel risus. Sed eu sem ut eros euismod condimentum ac vel arcu. Duis gravida mattis sem, in porttitor ligula.
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Donec maximus augue at nunc hendrerit, nec lobortis libero tincidunt. Mauris at viverra dolor. Praesent sed dolor ut nibh ultrices rutrum. Vestibulum aliquam, quam nec euismod dignissim, ipsum neque semper arcu, eu fringilla nibh velit ut tortor. Curabitur molestie enim vitae accumsan venenatis. Nullam sit amet turpis enim. In tincidunt nisl et nisi posuere, in semper massa fermentum. Phasellus sodales justo ac mauris malesuada, non aliquam mauris ultricies. Curabitur vel neque non augue pulvinar consequat. Duis quis elit sodales, tincidunt ipsum sed, ullamcorper tellus. Fusce sed felis euismod, aliquam lacus eget, blandit turpis. Vivamus sapien elit, gravida ac rhoncus eget, interdum nec velit. Praesent quis velit in ex aliquet cursus vitae sit amet metus. Aliquam molestie enim vitae mauris ornare, non ullamcorper augue lacinia.
Donec consectetur id justo quis aliquam. Fusce sollicitudin turpis ligula. Etiam vel viverra tellus. Curabitur eu cursus nisi. Morbi euismod maximus malesuada. Donec condimentum, orci quis fermentum tempor, turpis enim tincidunt enim, ac posuere nisl nisl non ipsum. Aliquam iaculis risus a urna molestie auctor. Suspendisse ac lorem dui. In hac habitasse platea dictumst. Quisque risus nisl, tempus et nunc id, dictum mattis erat. Nulla pulvinar lectus ac turpis sagittis porttitor. Duis sed bibendum est, ut tincidunt eros. Donec eleifend rutrum turpis nec luctus. Maecenas auctor, libero quis dictum dictum, odio lorem cursus metus, sed viverra nulla tortor ut lorem. Ut at mattis augue, sit amet consequat elit. Quisque vehicula nulla et suscipit facilisis.
</p>
</article>
<footer>
</footer>

Changing position with css avoiding flexbox and javascript (append, insertAfter)

I'm building a template and I want to move an element avoiding flexbox if it is possible, using pure css.
Here's my problem:
<div class="container-fluid health-details">
<div class="row">
<?php include 'sidebar.php';?>
<div class="col-md-8">
<div class="information">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam neque magna, volutpat ut scelerisque gravida, posuere nec diam. Fusce et ligula eget nisi malesuada dictum. Nunc et purus massa. </p>
<p>Curabitur vel fermentum nisi. Aenean elementum vel erat sit amet viverra. Ut quis sapien at dolor sollicitudin ullamcorper. Aliquam quis volutpat nisl, nec cursus tortor. Proin elementum magna nec erat ultricies, eu feugiat nunc convallis. Sed dapibus nec eros in porttitor. In finibus sed dolor vel ornare. </p>
<p>Aenean volutpat iaculis ullamcorper. Integer id nisi fringilla, feugiat est quis, hendrerit felis. Aliquam nunc justo, feugiat quis ligula ac, rhoncus pellentesque sapien. Pellentesque gravida dui elit, at egestas libero suscipit quis. Sed consectetur, tellus in faucibus rhoncus, nisl ipsum pulvinar magna, posuere pulvinar nulla urna a nisl. Quisque cursus ac metus et venenatis. </p>
<p>Pellentesque vehicula ornare quam, id tempus felis volutpat quis. Proin volutpat massa ac turpis dignissim, id consectetur eros sagittis. Pellentesque in interdum turpis. Maecenas eget nisi sit amet nisi pretium placerat. Maecenas luctus vel leo ut fermentum. Nullam ullamcorper ultrices scelerisque. Cras semper eros vitae nisi vulputate euismod. Suspendisse potenti. Etiam urna sem, vulputate in hendrerit a, imperdiet at ipsum. Integer aliquet arcu erat, interdum consectetur enim condimentum sed.</p>
<p>Integer egestas dolor eu sagittis pharetra. Phasellus non commodo magna. Maecenas sit amet libero pellentesque arcu posuere ultrices ut non augue. Donec aliquam pellentesque lectus, vel sollicitudin nisi viverra at. Fusce convallis velit eget urna ullamcorper finibus. Suspendisse potenti. Quisque ac eros vel ligula vulputate aliquet vestibulum sit amet nisl. Nunc rutrum blandit consectetur. Pellentesque vel rhoncus eros. Nam non vestibulum ex, sed cursus sem. Suspendisse ut porttitor erat, nec placerat ligula. Cras consequat ut ligula posuere interdum. Phasellus porta, nisi quis pharetra fringilla, nulla sem convallis sapien, ut faucibus ipsum mauris nec nibh. Maecenas efficitur hendrerit eros, vel vulputate nisi convallis nec. Aliquam pulvinar scelerisque mi, et placerat nisi egestas eget.</p>
</div>
</div>
</div>
</div>
My sidebar is really easy, something like:
<aside>
<nav>
<ul>
<li class="active">Ciao</li>
<li>Ciao Program</li>
<li>Program Outline</li>
<li>Tuition & Fees Guide</li>
<li>Admission Policy</li>
</ul>
</nav>
</aside>
What I'd like to do is, on mobile switch the position of the sidebar and put it within the blurb:
<div class="container-fluid health-details">
<div class="row">
<div class="col-md-8">
<div class="information">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam neque magna, volutpat ut scelerisque gravida, posuere nec diam. Fusce et ligula eget nisi malesuada dictum. Nunc et purus massa. </p>
<p>Curabitur vel fermentum nisi. Aenean elementum vel erat sit amet viverra. Ut quis sapien at dolor sollicitudin ullamcorper. Aliquam quis volutpat nisl, nec cursus tortor. Proin elementum magna nec erat ultricies, eu feugiat nunc convallis. Sed dapibus nec eros in porttitor. In finibus sed dolor vel ornare. </p>
<?php include 'sidebar.php';?>
<p>Aenean volutpat iaculis ullamcorper. Integer id nisi fringilla, feugiat est quis, hendrerit felis. Aliquam nunc justo, feugiat quis ligula ac, rhoncus pellentesque sapien. Pellentesque gravida dui elit, at egestas libero suscipit quis. Sed consectetur, tellus in faucibus rhoncus, nisl ipsum pulvinar magna, posuere pulvinar nulla urna a nisl. Quisque cursus ac metus et venenatis. </p>
<p>Pellentesque vehicula ornare quam, id tempus felis volutpat quis. Proin volutpat massa ac turpis dignissim, id consectetur eros sagittis. Pellentesque in interdum turpis. Maecenas eget nisi sit amet nisi pretium placerat. Maecenas luctus vel leo ut fermentum. Nullam ullamcorper ultrices scelerisque. Cras semper eros vitae nisi vulputate euismod. Suspendisse potenti. Etiam urna sem, vulputate in hendrerit a, imperdiet at ipsum. Integer aliquet arcu erat, interdum consectetur enim condimentum sed.</p>
<p>Integer egestas dolor eu sagittis pharetra. Phasellus non commodo magna. Maecenas sit amet libero pellentesque arcu posuere ultrices ut non augue. Donec aliquam pellentesque lectus, vel sollicitudin nisi viverra at. Fusce convallis velit eget urna ullamcorper finibus. Suspendisse potenti. Quisque ac eros vel ligula vulputate aliquet vestibulum sit amet nisl. Nunc rutrum blandit consectetur. Pellentesque vel rhoncus eros. Nam non vestibulum ex, sed cursus sem. Suspendisse ut porttitor erat, nec placerat ligula. Cras consequat ut ligula posuere interdum. Phasellus porta, nisi quis pharetra fringilla, nulla sem convallis sapien, ut faucibus ipsum mauris nec nibh. Maecenas efficitur hendrerit eros, vel vulputate nisi convallis nec. Aliquam pulvinar scelerisque mi, et placerat nisi egestas eget.</p>
</div>
</div>
</div>
</div>
I don't have to necessarily use php to do the trick, I can do it with simple html. The thing is that I want to avoid to use flexbox, I would be nice if I can only add a class to my sidebar with php. The other thing that I have to avoid is to repeat myself (DRY). Of course I can create the same bar and display:none and block on mobile (so I will have the same two sidebars), but if it is possible I'd rather avoid it.
Is there any solution to solve my problem?
I would avoid to use a script to, like something with javascript (append the element based on the size of the viewport, that's the only method that I know that it will work for sure, something like):
$('.sidebar').insertAfter( '.information p:last-child' );
I mean, it will work just fine but I don't love to style with javascript.
Thanks

Is there a way to use slide toggle from a footer while keeping scroll position at the bottom?

So I'm working on a footer for a site that has a button which expands the footer to show/hide some more information (so regular footer on the bottom, expanded section above that). I'm just using a basic slideToggle now, but the problem is this scrolls the screen away from the bottom position (where it was when the toggle is clicked) so it gives the appearance of it sliding down rather than up. Is there a way to force the scroll position to stick to the bottom so the content is sliding in and everything is visible?
Thanks in advance everyone, this has been driving me nuts and I'm feeling kind of stuck!
Some more specifics -
HTML:
<div>
<p>Random Content</p>
<footer>
<div class="expand-me">
<p>Extra Info Here</p>
</div>
<div class="main-footer">
<p>Main Footer Stuff</p>
<a class="expand">Expand!</a>
</div>
</footer>
</div>
CSS:
.main-footer {
text-align:center;
background-color: #e0e0e0;
padding:20px;
}
.expand-me {
display: none;
background-color: purple;
padding:20px;
}
.expand {
cursor:pointer;
background-color: blue;
color: white;
padding: 10px;
}
JS:
$( ".expand" ).click(function() {
$( ".expand-me" ).slideToggle();
});
https://codepen.io/anon/pen/gvmzwB
i have done this by forcing window to scroll to bottom of the page.
$( ".expand" ).click(function() {
$( ".expand-me" ).slideToggle(function(){
var height = $('#mydiv').height();
if($(this).is(':visible')){
$(document).scrollTop($(document).height()-$('.expand-me').height());
}
});
});
.main-footer {
text-align:center;
background-color: #e0e0e0;
padding:20px;
}
.expand-me {
display: none;
background-color: purple;
padding:20px;
}
.expand {
cursor:pointer;
background-color: blue;
color: white;
padding: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc viverra ultrices tellus, eget sollicitudin nibh elementum eu. Cras at metus ut arcu lacinia faucibus. Proin quis leo ut turpis fermentum lacinia nec nec augue. Donec commodo libero eget mi dignissim, quis mattis nibh congue. Ut dignissim condimentum porta. Curabitur feugiat condimentum nisi, a fermentum massa. Nulla blandit fringilla bibendum. Nullam auctor, quam a mollis cursus, nibh nunc fermentum ipsum, vitae tincidunt felis ante at sem. Mauris pharetra porttitor erat.</p>
<p>Duis et nulla malesuada, dictum nunc a, fermentum neque. Sed et purus non lacus rutrum tristique. Sed euismod sagittis commodo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam ipsum justo, commodo sodales augue sit amet, convallis facilisis ligula. Suspendisse molestie, quam et porta eleifend, turpis ligula facilisis erat, at eleifend urna augue vel augue. Maecenas ut lorem dolor. Vestibulum tempor malesuada aliquet.</p>
<p>Aliquam quis mauris non erat sagittis fermentum. Morbi sed feugiat est. Donec interdum tellus id libero porttitor, sed porta nunc viverra. Curabitur lobortis elit non eros consectetur, ut faucibus magna lacinia. Sed ipsum nisl, viverra vehicula ipsum et, fringilla scelerisque libero. Donec sit amet justo sit amet lorem sodales fermentum ut sed neque. Aliquam ornare ornare ex, vel rhoncus erat hendrerit ut. Fusce placerat, dolor in facilisis tristique, magna est ullamcorper lectus, sed molestie dolor felis eu est. Cras aliquam sed ante nec pellentesque. Vestibulum lectus odio, vestibulum iaculis ante sed, cursus ullamcorper sapien.</p>
<p>Mauris at tellus a massa posuere ornare. Duis at euismod nunc. Sed pellentesque elit non diam eleifend, vitae pretium lectus dapibus. Praesent nec ex mi. Vestibulum consectetur eros nunc, in varius tortor facilisis eget. Maecenas ac sapien sit amet magna gravida mollis vel feugiat risus. Donec consectetur tincidunt dui, sed laoreet nisi lobortis in. Nam sollicitudin lorem finibus, rhoncus nunc nec, rutrum dolor. Etiam pellentesque risus eu magna accumsan dapibus. Pellentesque placerat sit amet sapien sed congue. Quisque eu bibendum libero, id pellentesque enim. Donec vel nisl eu tellus varius tempus.</p>
<p>Nulla vestibulum a nulla ac aliquam. Donec eu nisl porta, convallis lectus eu, hendrerit libero. Morbi viverra lorem ut tellus tincidunt mattis. Curabitur nisi nulla, faucibus ut tempor non, varius sit amet nibh. Fusce nulla tortor, convallis non ex ac, rhoncus dictum augue. Fusce maximus dui vitae lacus elementum, condimentum fermentum ex consectetur. Vivamus et sapien posuere, tristique massa sed, sodales nisl. Mauris est arcu, lacinia quis rutrum molestie, scelerisque in eros.</p>
<footer>
<div class="expand-me">
<p>Extra Info: Donec eu nisl porta, convallis lectus eu, hendrerit libero. Morbi viverra lorem ut tellus tincidunt mattis. Curabitur nisi nulla, faucibus ut tempor non, varius sit amet nibh. Fusce nulla tortor, convallis non ex ac, rhoncus dictum augue.</p>
</div>
<div class="main-footer">
<p>Main Footer Stuff</p>
<a class="expand">Expand!</a>
</div>
</footer>
</div>
or like this one
$( ".expand" ).click(function() {
$( ".expand-me" ).slideToggle(function(){
var height = $('.expand').height();
if($('.expand-me').is(':visible')){
$('html, body').animate({
scrollTop: $(document).height()
}, 'slow');
}
});
});
.main-footer {
text-align:center;
background-color: #e0e0e0;
padding:20px;
}
.expand-me {
display: none;
background-color: purple;
padding:20px;
}
.expand {
cursor:pointer;
background-color: blue;
color: white;
padding: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc viverra ultrices tellus, eget sollicitudin nibh elementum eu. Cras at metus ut arcu lacinia faucibus. Proin quis leo ut turpis fermentum lacinia nec nec augue. Donec commodo libero eget mi dignissim, quis mattis nibh congue. Ut dignissim condimentum porta. Curabitur feugiat condimentum nisi, a fermentum massa. Nulla blandit fringilla bibendum. Nullam auctor, quam a mollis cursus, nibh nunc fermentum ipsum, vitae tincidunt felis ante at sem. Mauris pharetra porttitor erat.</p>
<p>Duis et nulla malesuada, dictum nunc a, fermentum neque. Sed et purus non lacus rutrum tristique. Sed euismod sagittis commodo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam ipsum justo, commodo sodales augue sit amet, convallis facilisis ligula. Suspendisse molestie, quam et porta eleifend, turpis ligula facilisis erat, at eleifend urna augue vel augue. Maecenas ut lorem dolor. Vestibulum tempor malesuada aliquet.</p>
<p>Aliquam quis mauris non erat sagittis fermentum. Morbi sed feugiat est. Donec interdum tellus id libero porttitor, sed porta nunc viverra. Curabitur lobortis elit non eros consectetur, ut faucibus magna lacinia. Sed ipsum nisl, viverra vehicula ipsum et, fringilla scelerisque libero. Donec sit amet justo sit amet lorem sodales fermentum ut sed neque. Aliquam ornare ornare ex, vel rhoncus erat hendrerit ut. Fusce placerat, dolor in facilisis tristique, magna est ullamcorper lectus, sed molestie dolor felis eu est. Cras aliquam sed ante nec pellentesque. Vestibulum lectus odio, vestibulum iaculis ante sed, cursus ullamcorper sapien.</p>
<p>Mauris at tellus a massa posuere ornare. Duis at euismod nunc. Sed pellentesque elit non diam eleifend, vitae pretium lectus dapibus. Praesent nec ex mi. Vestibulum consectetur eros nunc, in varius tortor facilisis eget. Maecenas ac sapien sit amet magna gravida mollis vel feugiat risus. Donec consectetur tincidunt dui, sed laoreet nisi lobortis in. Nam sollicitudin lorem finibus, rhoncus nunc nec, rutrum dolor. Etiam pellentesque risus eu magna accumsan dapibus. Pellentesque placerat sit amet sapien sed congue. Quisque eu bibendum libero, id pellentesque enim. Donec vel nisl eu tellus varius tempus.</p>
<p>Nulla vestibulum a nulla ac aliquam. Donec eu nisl porta, convallis lectus eu, hendrerit libero. Morbi viverra lorem ut tellus tincidunt mattis. Curabitur nisi nulla, faucibus ut tempor non, varius sit amet nibh. Fusce nulla tortor, convallis non ex ac, rhoncus dictum augue. Fusce maximus dui vitae lacus elementum, condimentum fermentum ex consectetur. Vivamus et sapien posuere, tristique massa sed, sodales nisl. Mauris est arcu, lacinia quis rutrum molestie, scelerisque in eros.</p>
<footer>
<div class="expand-me">
<p>Extra Info: Donec eu nisl porta, convallis lectus eu, hendrerit libero. Morbi viverra lorem ut tellus tincidunt mattis. Curabitur nisi nulla, faucibus ut tempor non, varius sit amet nibh. Fusce nula tortor, convallis non ex ac, rhoncus dictum augue.</p>
</div>
<div class="main-footer">
<p>Main Footer Stuff</p>
<a class="expand">Expand!</a>
</div>
</footer>
</div>

How to make a search through H2 tags only

I have a single page with lots of H2 and paragraphs.
How to make a javascript/ajax (or other) search bar to search only through the H2 tags with dropdown suggestion and with no database?
You can use jQuery to search for occurrences with :contains(). The script also looks for the anchors (id) of the <h2> to link them.
// Make :contains() case insensitive
$.expr[":"].contains = $.expr.createPseudo(function(arg) {
return function(elem) {
return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
};
});
// Search on type
var result;
$('#search').on('keyup', function() {
result = '';
// Search h2 caontaining search term
$('h2:contains("' + $('#search').val() + '")').each(function(index) {
result += '<li>' + $(this).text() + '</li>';
});
// Show results
$('#searchResults').html('<ul>' + result + '</ul>');
});
#searchResults {
background: yellow;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Search titles:
<input id="search" />
<div id="searchResults"></div>
<h2 id="1">Lorem ipsum dolor sit amet</h2>
<p>consectetur adipiscing elit.<br/>Ut venenatis, diam nec laoreet rutrum, est dolor vehicula leo, eu euismod ex risus id felis.<br/>Nam non odio eget libero commodo iaculis ac sed leo.<br/>Sed velit ex, elementum et lobortis id, porta nec nunc.<br/>Curabitur gravida risus in blandit cursus.<br/>onec fermentum nulla sem, et interdum lectus tincidunt id.<br/>Sed pharetra odio arcu.<br/> Interdum et malesuada fames ac ante ipsum primis in faucibus.<br/>Vestibulum semper lorem leo, sed congue massa posuere et.<br/>Proin porta lorem eu metus ultricies dictum.<br/>Cras sit amet molestie nisi.<br/>Phasellus eu congue ipsum, id tristique urna.<br/>Quisque in leo vel nisi rutrum auctor ut ac mauris.<br/>Maecenas consectetur ipsum ultricies orci egestas fringilla.<br/>Suspendisse ac rhoncus massa, eget fermentum augue.<br/> Proin eleifend laoreet velit, sit amet finibus sem volutpat pharetra.<br/>Phasellus feugiat risus in tortor pulvinar aliquam.
</p>
<h2 id="2">Etiam tincidunt nulla vel justo suscipit</h2>
<p>eget interdum nisi suscipit.<br/>Phasellus in tempor mi.<br/>Phasellus venenatis justo mollis suscipit iaculis.<br/>Donec interdum congue lorem.<br/>Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi eget massa id neque vehicula accumsan eu non sem.<br/>Cras pretium lobortis quam, ullamcorper tempus eros viverra non.<br/>Morbi id scelerisque est.<br/>Praesent dictum turpis quam, nec maximus quam cursus ac.<br/>Nam porta quam sit amet velit imperdiet elementum.<br/>Curabitur at orci condimentum, porta enim quis, fermentum orci.<br/>Mauris arcu mauris, tempor at blandit nec, dictum sed augue.<br/>Sed convallis orci vitae lectus commodo posuere.<br/>Aliquam erat volutpat.<br/>Integer sed gravida felis.
</p>
<h2 id="3">Praesent eu sem ex</h2>
<p>In hac habitasse platea dictumst.<br/>Duis interdum turpis sit amet libero consequat, a efficitur turpis vulputate.<br/>Sed non diam malesuada, dignissim leo ut, vulputate nulla.<br/>Quisque tincidunt arcu sed dapibus fermentum.<br/>Vestibulum vitae ultrices velit, ac posuere quam.<br/>Praesent ac ex vitae nisl rhoncus faucibus in at justo.<br/>Pellentesque malesuada imperdiet finibus.<br/>Nunc at aliquam enim, dictum ultricies lectus.<br/>Nam posuere nulla elementum augue fermentum tincidunt.<br/>Sed a tortor non turpis tristique viverra.<br/>Nulla sagittis, sapien vel mollis porttitor, diam felis tempus mi, sit amet scelerisque libero quam sed justo.
</p>
<h2 id="4">
Nam non odio viverra mauris
</h2>
<p>
aliquam consectetur vel sit amet nisl.<br/>Nam scelerisque turpis ut mattis consectetur.<br/>Donec ut sem iaculis, hendrerit sem at, scelerisque lacus.<br/>Cras sit amet quam bibendum, rutrum nibh vitae, eleifend neque.<br/>Curabitur tincidunt fermentum nibh nec viverra.<br/>Proin tincidunt, tortor vitae sollicitudin commodo, tellus felis commodo felis, nec dictum tellus lorem in nibh.<br/>Cras congue justo at ultrices bibendum.
</p>
<h2 id="5">
Praesent facilisis dapibus ante,
</h2>
<p>
at consectetur risus dictum et.<br/>Vestibulum ut quam turpis.<br/>Maecenas eu eleifend purus.<br/>Morbi risus mi, feugiat eget auctor eu, convallis in sapien.<br/>Sed egestas vitae lacus sit amet aliquam.<br/>Nullam ullamcorper vulputate ligula sed pulvinar.<br/>Curabitur condimentum mi quis nulla commodo, vitae laoreet magna vulputate.<br/>Ut ultricies ex sit amet eros mattis, vitae faucibus elit blandit.
</p>
<h2 id="6">Mauris ac augue imperdiet</h2>
<p>
volutpat quam non, cursus leo.<br/>Sed imperdiet semper interdum.<br/>Vivamus blandit est sem, eget facilisis turpis accumsan at.<br/>Duis blandit nisi in mattis pellentesque.<br/>Mauris vitae turpis ullamcorper, tempor nunc et, commodo tellus.<br/>Quisque quis scelerisque ex, quis tincidunt sapien.<br/>Curabitur erat urna, fringilla eget velit in, efficitur venenatis nisi.<br/>Nullam facilisis elit velit, ut maximus libero imperdiet quis.
</p>

Categories