CSS line-height animated accordion pattern
How do I make an css line-height animated accordion pattern?
Attempting to create the same max-height animation with line-height. This is not a perfect solution. Tested - Chrome 31, FF 25, IE10, Safari 7 (has a weird flash of text open opening).. What is a css line-height animated accordion pattern? How do you make a css line-height animated accordion pattern? This script and codes were developed by Chris Wright on 12 July 2022, Tuesday.
CSS line-height animated accordion pattern - Script Codes HTML Codes
<!DOCTYPE html>
<html >
<head> <meta charset="UTF-8"> <title>CSS line-height animated accordion pattern</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"> <style> /* NOTE: The styles were added inline because Prefixfree needs access to your styles and they must be inlined if they are on local disk! */ @import url(http://fonts.googleapis.com/css?family=Lato:400,700);
* { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;
}
body { font-family: 'Lato';
}
h1 { font-size: 2em; padding: 2em; text-align: center;
}
.accordion dl { border: 1px solid #ddd;
}
.accordion dl:after { content: ""; display: block; height: 1em; width: 100%; background-color: #2ba659;
}
.accordion dt > a { text-align: center; font-weight: 700; padding: 2em; display: block; text-decoration: none; color: #fff; -webkit-transition: background-color 0.5s ease-in-out;
}
.accordion dd { font-size: 1em;
}
.accordion { position: relative; background-color: #eee;
}
.container { max-width: 960px; margin: 0 auto; padding: 2em 0 2em 0;
}
.accordionTitle { background-color: #38cc70; border-bottom: 1px solid #30bb64;
}
.accordionTitle:before { content: "+"; font-size: 1.5em; line-height: 0.5em; float: left; -moz-transition: -moz-transform 0.3s ease-in-out; -o-transition: -o-transform 0.3s ease-in-out; -webkit-transition: -webkit-transform 0.3s ease-in-out; transition: transform 0.3s ease-in-out;
}
.accordionTitle:hover { background-color: #2ba659;
}
.accordionTitleActive { background-color: #2ba659;
}
.accordionTitleActive:before { -webkit-transform: rotate(-225deg); -moz-transform: rotate(-225deg); transform: rotate(-225deg);
}
.accordionItem { line-height: 1.5em; padding: 1em; overflow: hidden; -webkit-transform: translate3d(0, 0, 0); -moz-transition: line-height 0.3s ease-out; -o-transition: line-height 0.3s ease-out; -webkit-transition: line-height 0.3s ease-out; transition: line-height 0.3s ease-out;
}
.accordionItem > p { padding: 1em 2em 1em 2em;
}
.accordionItemCollapsed { line-height: 0em; padding: 0;
}
.accordionItemCollapsed > p { padding: 0; -moz-transition: padding 0.4s ease-in-out; -o-transition: padding 0.4s ease-in-out; -webkit-transition: padding 0.4s ease-in-out; transition: padding 0.4s ease-in-out;
}
.animateIn { -webkit-animation-name: accordionIn; -webkit-animation-duration: 0.4s; -webkit-animation-iteration-count: 1; -webkit-animation-direction: normal; -webkit-animation-timing-function: ease-in-out; -webkit-animation-fill-mode: both; -webkit-animation-delay: 0.2s; -moz-animation-name: normal; -moz-animation-duration: 0.4s; -moz-animation-iteration-count: 1; -moz-animation-direction: alternate; -moz-animation-timing-function: ease-in-out; -moz-animation-fill-mode: both; -moz-animation-delay: 0.2s; animation-name: accordionIn; animation-duration: 0.4s; animation-iteration-count: 1; animation-direction: normal; animation-timing-function: ease-in-out; animation-fill-mode: both; animation-delay: 0.2s;
}
.animateOut { -webkit-animation-name: accordionOut; -webkit-animation-duration: 0.3s; -webkit-animation-iteration-count: 1; -webkit-animation-direction: alternate; -webkit-animation-timing-function: ease-in-out; -webkit-animation-fill-mode: both; -webkit-animation-delay: 0s; -moz-animation-name: accordionOut; -moz-animation-duration: 0.3s; -moz-animation-iteration-count: 1; -moz-animation-direction: alternate; -moz-animation-timing-function: ease-in-out; -moz-animation-fill-mode: both; -moz-animation-delay: 0s; animation-name: accordionOut; animation-duration: 0.3s; animation-iteration-count: 1; animation-direction: alternate; animation-timing-function: ease-in-out; animation-fill-mode: both; animation-delay: 0s;
}
@-webkit-keyframes accordionIn { 0% { opacity: 0; } 100% { opacity: 1; }
}
@-moz-keyframes accordionIn { 0% { opacity: 0; } 100% { opacity: 1; }
}
@keyframes accordionIn { 0% { opacity: 0; } 100% { opacity: 1; }
}
@-webkit-keyframes accordionOut { 0% { opacity: 1; } 100% { opacity: 0; }
}
@-moz-keyframes accordionOut { 0% { opacity: 1; } 100% { opacity: 0; }
}
@keyframes accordionOut { 0% { opacity: 1; } 1% { opacity: 0; } 100% { opacity: 0; }
} </style> <script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
</head>
<body> <div class="container"> <h1>CSS Line-height Animated Accordion</h1> <div class="accordion"> <dl> <dt><a class="accordionTitle" href="#">First Accordion heading</a></dt> <dd class="accordionItem accordionItemCollapsed"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi eu interdum diam. Donec interdum porttitor risus non bibendum. Maecenas sollicitudin eros in quam imperdiet placerat. Cras justo purus, rhoncus nec lobortis ut, iaculis vel ipsum. Donec dignissim arcu nec elit faucibus condimentum. Donec facilisis consectetur enim sit amet varius. Pellentesque justo dui, sodales quis luctus a, iaculis eget mauris. </p> <p>Aliquam dapibus, ante quis fringilla feugiat, mauris risus condimentum massa, at elementum libero quam ac ligula. Pellentesque at rhoncus dolor. Duis porttitor nibh ut lobortis aliquam. Nullam eu dolor venenatis mauris placerat tristique eget id dolor. Quisque blandit adipiscing erat vitae dapibus. Nulla aliquam magna nec elementum tincidunt.</p> </dd> <dt><a href="#" class="accordionTitle">Second Accordion heading</a></dt> <dd class="accordionItem accordionItemCollapsed"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi eu interdum diam. Donec interdum porttitor risus non bibendum. Maecenas sollicitudin eros in quam imperdiet placerat. Cras justo purus, rhoncus nec lobortis ut, iaculis vel ipsum. Donec dignissim arcu nec elit faucibus condimentum. Donec facilisis consectetur enim sit amet varius. Pellentesque justo dui, sodales quis luctus a, iaculis eget mauris. </p> <p>Aliquam dapibus, ante quis fringilla feugiat, mauris risus condimentum massa, at elementum libero quam ac ligula. Pellentesque at rhoncus dolor. Duis porttitor nibh ut lobortis aliquam. Nullam eu dolor venenatis mauris placerat tristique eget id dolor. Quisque blandit adipiscing erat vitae dapibus. Nulla aliquam magna nec elementum tincidunt.</p> <p>Aliquam dapibus, ante quis fringilla feugiat, mauris risus condimentum massa, at elementum libero quam ac ligula. Pellentesque at rhoncus dolor. Duis porttitor nibh ut lobortis aliquam. Nullam eu dolor venenatis mauris placerat tristique eget id dolor. Quisque blandit adipiscing erat vitae dapibus. Nulla aliquam magna nec elementum tincidunt.</p> </dd> <dt><a href="#" class="accordionTitle">Third Accordion heading</a></dt> <dd class="accordionItem accordionItemCollapsed"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi eu interdum diam. Donec interdum porttitor risus non bibendum. Maecenas sollicitudin eros in quam imperdiet placerat. Cras justo purus, rhoncus nec lobortis ut, iaculis vel ipsum. Donec dignissim arcu nec elit faucibus condimentum. Donec facilisis consectetur enim sit amet varius. Pellentesque justo dui, sodales quis luctus a, iaculis eget mauris. </p> <p>Aliquam dapibus, ante quis fringilla feugiat, mauris risus condimentum massa, at elementum libero quam ac ligula. Pellentesque at rhoncus dolor. Duis porttitor nibh ut lobortis aliquam. Nullam eu dolor venenatis mauris placerat tristique eget id dolor. Quisque blandit adipiscing erat vitae dapibus. Nulla aliquam magna nec elementum tincidunt.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi eu interdum diam. Donec interdum porttitor risus non bibendum. Maecenas sollicitudin eros in quam imperdiet placerat. Cras justo purus, rhoncus nec lobortis ut, iaculis vel ipsum. Donec dignissim arcu nec elit faucibus condimentum. Donec facilisis consectetur enim sit amet varius. Pellentesque justo dui, sodales quis luctus a, iaculis eget mauris. </p> <p>Aliquam dapibus, ante quis fringilla feugiat, mauris risus condimentum massa, at elementum libero quam ac ligula. Pellentesque at rhoncus dolor. Duis porttitor nibh ut lobortis aliquam. Nullam eu dolor venenatis mauris placerat tristique eget id dolor. Quisque blandit adipiscing erat vitae dapibus. Nulla aliquam magna nec elementum tincidunt.</p> </dd> </dl> </div> </div> <script src="js/index.js"></script>
</body>
</html>
CSS line-height animated accordion pattern - Script Codes CSS Codes
@import url(http://fonts.googleapis.com/css?family=Lato:400,700);
* { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;
}
body { font-family: 'Lato';
}
h1 { font-size: 2em; padding: 2em; text-align: center;
}
.accordion dl { border: 1px solid #ddd;
}
.accordion dl:after { content: ""; display: block; height: 1em; width: 100%; background-color: #2ba659;
}
.accordion dt > a { text-align: center; font-weight: 700; padding: 2em; display: block; text-decoration: none; color: #fff; -webkit-transition: background-color 0.5s ease-in-out;
}
.accordion dd { font-size: 1em;
}
.accordion { position: relative; background-color: #eee;
}
.container { max-width: 960px; margin: 0 auto; padding: 2em 0 2em 0;
}
.accordionTitle { background-color: #38cc70; border-bottom: 1px solid #30bb64;
}
.accordionTitle:before { content: "+"; font-size: 1.5em; line-height: 0.5em; float: left; -moz-transition: -moz-transform 0.3s ease-in-out; -o-transition: -o-transform 0.3s ease-in-out; -webkit-transition: -webkit-transform 0.3s ease-in-out; transition: transform 0.3s ease-in-out;
}
.accordionTitle:hover { background-color: #2ba659;
}
.accordionTitleActive { background-color: #2ba659;
}
.accordionTitleActive:before { -webkit-transform: rotate(-225deg); -moz-transform: rotate(-225deg); transform: rotate(-225deg);
}
.accordionItem { line-height: 1.5em; padding: 1em; overflow: hidden; -webkit-transform: translate3d(0, 0, 0); -moz-transition: line-height 0.3s ease-out; -o-transition: line-height 0.3s ease-out; -webkit-transition: line-height 0.3s ease-out; transition: line-height 0.3s ease-out;
}
.accordionItem > p { padding: 1em 2em 1em 2em;
}
.accordionItemCollapsed { line-height: 0em; padding: 0;
}
.accordionItemCollapsed > p { padding: 0; -moz-transition: padding 0.4s ease-in-out; -o-transition: padding 0.4s ease-in-out; -webkit-transition: padding 0.4s ease-in-out; transition: padding 0.4s ease-in-out;
}
.animateIn { -webkit-animation-name: accordionIn; -webkit-animation-duration: 0.4s; -webkit-animation-iteration-count: 1; -webkit-animation-direction: normal; -webkit-animation-timing-function: ease-in-out; -webkit-animation-fill-mode: both; -webkit-animation-delay: 0.2s; -moz-animation-name: normal; -moz-animation-duration: 0.4s; -moz-animation-iteration-count: 1; -moz-animation-direction: alternate; -moz-animation-timing-function: ease-in-out; -moz-animation-fill-mode: both; -moz-animation-delay: 0.2s; animation-name: accordionIn; animation-duration: 0.4s; animation-iteration-count: 1; animation-direction: normal; animation-timing-function: ease-in-out; animation-fill-mode: both; animation-delay: 0.2s;
}
.animateOut { -webkit-animation-name: accordionOut; -webkit-animation-duration: 0.3s; -webkit-animation-iteration-count: 1; -webkit-animation-direction: alternate; -webkit-animation-timing-function: ease-in-out; -webkit-animation-fill-mode: both; -webkit-animation-delay: 0s; -moz-animation-name: accordionOut; -moz-animation-duration: 0.3s; -moz-animation-iteration-count: 1; -moz-animation-direction: alternate; -moz-animation-timing-function: ease-in-out; -moz-animation-fill-mode: both; -moz-animation-delay: 0s; animation-name: accordionOut; animation-duration: 0.3s; animation-iteration-count: 1; animation-direction: alternate; animation-timing-function: ease-in-out; animation-fill-mode: both; animation-delay: 0s;
}
@-webkit-keyframes accordionIn { 0% { opacity: 0; } 100% { opacity: 1; }
}
@-moz-keyframes accordionIn { 0% { opacity: 0; } 100% { opacity: 1; }
}
@keyframes accordionIn { 0% { opacity: 0; } 100% { opacity: 1; }
}
@-webkit-keyframes accordionOut { 0% { opacity: 1; } 100% { opacity: 0; }
}
@-moz-keyframes accordionOut { 0% { opacity: 1; } 100% { opacity: 0; }
}
@keyframes accordionOut { 0% { opacity: 1; } 1% { opacity: 0; } 100% { opacity: 0; }
}
CSS line-height animated accordion pattern - Script Codes JS Codes
/*! * classie - class helper functions * from bonzo https://github.com/ded/bonzo * * classie.has( elem, 'my-class' ) -> true/false * classie.add( elem, 'my-new-class' ) * classie.remove( elem, 'my-unwanted-class' ) * classie.toggle( elem, 'my-class' ) */
/*jshint browser: true, strict: true, undef: true */
/*global define: false */
( function( window ) {
'use strict';
// class helper functions from bonzo https://github.com/ded/bonzo
function classReg( className ) { return new RegExp("(^|\\s+)" + className + "(\\s+|$)");
}
// classList support for class management
// altho to be fair, the api sucks because it won't accept multiple classes at once
var hasClass, addClass, removeClass;
if ( 'classList' in document.documentElement ) { hasClass = function( elem, c ) { return elem.classList.contains( c ); }; addClass = function( elem, c ) { elem.classList.add( c ); }; removeClass = function( elem, c ) { elem.classList.remove( c ); };
}
else { hasClass = function( elem, c ) { return classReg( c ).test( elem.className ); }; addClass = function( elem, c ) { if ( !hasClass( elem, c ) ) { elem.className = elem.className + ' ' + c; } }; removeClass = function( elem, c ) { elem.className = elem.className.replace( classReg( c ), ' ' ); };
}
function toggleClass( elem, c ) { var fn = hasClass( elem, c ) ? removeClass : addClass; fn( elem, c );
}
var classie = { // full names hasClass: hasClass, addClass: addClass, removeClass: removeClass, toggleClass: toggleClass, // short names has: hasClass, add: addClass, remove: removeClass, toggle: toggleClass
};
// transport
if ( typeof define === 'function' && define.amd ) { // AMD define( classie );
} else { // browser global window.classie = classie;
}
})( window );
//fake jQuery
var $ = function(selector){ return document.querySelector(selector);
}
var accordion = $('.accordion');
//add event listener to all anchor tags with accordion title class
accordion.addEventListener("click",function(e) { e.stopPropagation(); e.preventDefault(); if(e.target && e.target.nodeName == "A") { var classes = e.target.className.split(" "); if(classes) { for(var x = 0; x < classes.length; x++) { if(classes[x] == "accordionTitle") { var title = e.target; //next element sibling needs to be tested in IE8+ for any crashing problems var content = e.target.parentNode.nextElementSibling; //use classie to then toggle the active class which will then open and close the accordion classie.toggle(title, 'accordionTitleActive'); //this is just here to allow a custom animation to treat the content if(classie.has(content, 'accordionItemCollapsed')) { if(classie.has(content, 'animateOut')){ classie.remove(content, 'animateOut'); } classie.add(content, 'animateIn'); }else{ classie.remove(content, 'animateIn'); classie.add(content, 'animateOut'); } //remove or add the collapsed state classie.toggle(content, 'accordionItemCollapsed'); } } } }
});
Developer | Chris Wright |
Username | chriswrightdesign |
Uploaded | July 12, 2022 |
Rating | 3 |
Size | 7,059 Kb |
Views | 60,720 |
Find the perfect freelance services for your business! Fiverr's mission is to change how the world works together. Fiverr connects businesses with freelancers offering digital services in 500+ categories. Find Developer!
Name | Size |
CSS Responsive animated Accordion | 4,834 Kb |
Typography SVG experiment | 3,472 Kb |
Grid - two columns with gutters | 2,922 Kb |
SVG Noise over gradient Experiment | 6,168 Kb |
Experiments with nth-of-type animation | 3,015 Kb |
Inline SVG hamburger animation | 2,826 Kb |
SVG iMac | 5,932 Kb |
Form adaptation | 2,899 Kb |
IPhone SVG | 3,490 Kb |
Grid - Row with minmax | 4,220 Kb |
Jasper is the AI Content Generator that helps you and your team break through creative blocks to create amazing, original content 10X faster. Discover all the ways the Jasper AI Content Platform can help streamline your creative workflows. Start For Free!
Name | Username | Size |
JQuery exercise | Brian-baum | 3,780 Kb |
Mobile first social buttons with no iframe | Alistairtweedie | 3,158 Kb |
Stylize Stories | Jvhti | 2,465 Kb |
Two tables and header with jspdf-autotable | Someatoms | 2,245 Kb |
A Pen by Gregory Potdevin | GregoryPotdevin | 1,713 Kb |
Responsive scrolling text | Ashdurham | 2,259 Kb |
Touch Carousel - last, no gaps. | Berkin | 4,332 Kb |
Layout 11 | Altynai | 1,690 Kb |
Svg penguin | _massimo | 2,990 Kb |
JQuery Validate checkbox group | Lunaman | 2,466 Kb |
Surf anonymously, prevent hackers from acquiring your IP address, send anonymous email, and encrypt your Internet connection. High speed, ultra secure, and easy to use. Instant setup. Hide Your IP Now!