Advertisement
Guest User

Untitled

a guest
May 28th, 2015
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.82 KB | None | 0 0
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Smooth Responsive Accordion Widget</title>
  6. <link href="http://cdnjs.cloudflare.com/ajax/libs/normalize/3.0.1/normalize.css" rel="stylesheet" type="text/css">
  7. <style>
  8. * {
  9. -moz-box-sizing: border-box;
  10. -webkit-box-sizing: border-box;
  11. box-sizing: border-box;
  12. }
  13.  
  14. body { font-family: 'Lato'; }
  15.  
  16. h1 {
  17. font-size: 2em;
  18. padding: 2em;
  19. text-align: center;
  20. }
  21.  
  22. .accordion dl { border: 1px solid #ddd; }
  23.  
  24. .accordion dl:after {
  25. content: "";
  26. display: block;
  27. height: 1em;
  28. width: 100%;
  29. background-color: #c0392b;
  30. }
  31.  
  32. .accordion dt > a {
  33. text-align: center;
  34. font-weight: 700;
  35. padding: 2em;
  36. display: block;
  37. text-decoration: none;
  38. color: #fff;
  39. -webkit-transition: background-color 0.5s ease-in-out;
  40. -moz-transition: background-color 0.5s ease-in-out;
  41. transition: background-color 0.5s ease-in-out;
  42. }
  43.  
  44. .accordion dd {
  45. background-color: #eee;
  46. font-size: 1em;
  47. line-height: 1.5em;
  48. }
  49.  
  50. .accordion dd > p {
  51. padding: 1em 2em 1em 2em;
  52. margin: 0;
  53. }
  54.  
  55. .accordion {
  56. position: relative;
  57. background-color: #eee;
  58. }
  59.  
  60. .container {
  61. max-width: 960px;
  62. margin: 0 auto;
  63. padding: 2em 0 2em 0;
  64. }
  65.  
  66. .accordionTitle {
  67. background-color: #e74c3c;
  68. border-bottom: 1px solid #c0392b;
  69. }
  70.  
  71. .accordionTitle:before {
  72. content: "+";
  73. font-size: 1.5em;
  74. line-height: 0.5em;
  75. float: left;
  76. -moz-transition: -moz-transform 0.3s ease-in-out;
  77. -o-transition: -o-transform 0.3s ease-in-out;
  78. -webkit-transition: -webkit-transform 0.3s ease-in-out;
  79. transition: transform 0.3s ease-in-out;
  80. }
  81.  
  82. .accordionTitle:hover { background-color: #c0392b; }
  83.  
  84. .accordionTitleActive { background-color: #c0392b; }
  85.  
  86. .accordionTitleActive:before {
  87. -webkit-transform: rotate(-225deg);
  88. -moz-transform: rotate(-225deg);
  89. transform: rotate(-225deg);
  90. }
  91.  
  92. .accordionItem {
  93. height: auto;
  94. overflow: hidden;
  95. }
  96. @media all {
  97.  
  98. .accordionItem {
  99. max-height: 50em;
  100. -moz-transition: max-height 1s;
  101. -o-transition: max-height 1s;
  102. -webkit-transition: max-height 1s;
  103. transition: max-height 1s;
  104. }
  105. }
  106. @media screen and (min-width: 48em) {
  107.  
  108. .accordionItem {
  109. max-height: 15em;
  110. -moz-transition: max-height 0.5s;
  111. -o-transition: max-height 0.5s;
  112. -webkit-transition: max-height 0.5s;
  113. transition: max-height 0.5s;
  114. }
  115. }
  116.  
  117. .accordionItemCollapsed { max-height: 0; }
  118.  
  119. .animateIn {
  120. -webkit-animation-name: accordionIn;
  121. -webkit-animation-duration: 0.65s;
  122. -webkit-animation-iteration-count: 1;
  123. -webkit-animation-direction: normal;
  124. -webkit-animation-timing-function: ease-in-out;
  125. -webkit-animation-fill-mode: both;
  126. -webkit-animation-delay: 0s;
  127. -moz-animation-name: normal;
  128. -moz-animation-duration: 0.65s;
  129. -moz-animation-iteration-count: 1;
  130. -moz-animation-direction: alternate;
  131. -moz-animation-timing-function: ease-in-out;
  132. -moz-animation-fill-mode: both;
  133. -moz-animation-delay: 0s;
  134. animation-name: accordionIn;
  135. animation-duration: 0.65s;
  136. animation-iteration-count: 1;
  137. animation-direction: normal;
  138. animation-timing-function: ease-in-out;
  139. animation-fill-mode: both;
  140. animation-delay: 0s;
  141. }
  142.  
  143. .animateOut {
  144. -webkit-animation-name: accordionOut;
  145. -webkit-animation-duration: 0.75s;
  146. -webkit-animation-iteration-count: 1;
  147. -webkit-animation-direction: alternate;
  148. -webkit-animation-timing-function: ease-in-out;
  149. -webkit-animation-fill-mode: both;
  150. -webkit-animation-delay: 0s;
  151. -moz-animation-name: accordionOut;
  152. -moz-animation-duration: 0.75s;
  153. -moz-animation-iteration-count: 1;
  154. -moz-animation-direction: alternate;
  155. -moz-animation-timing-function: ease-in-out;
  156. -moz-animation-fill-mode: both;
  157. -moz-animation-delay: 0s;
  158. animation-name: accordionOut;
  159. animation-duration: 0.75s;
  160. animation-iteration-count: 1;
  161. animation-direction: alternate;
  162. animation-timing-function: ease-in-out;
  163. animation-fill-mode: both;
  164. animation-delay: 0s;
  165. }
  166. @-webkit-keyframes
  167. accordionIn { 0% {
  168. opacity: 0;
  169. -webkit-transform: scale(0.8);
  170. }
  171. 100% {
  172. opacity: 1;
  173. -webkit-transform: scale(1);
  174. }
  175. }
  176. @-moz-keyframes
  177. accordionIn { 0% {
  178. opacity: 0;
  179. -moz-transform: scale(0.8);
  180. }
  181. 100% {
  182. opacity: 1;
  183. -moz-transform: scale(1);
  184. }
  185. }
  186. @keyframes
  187. accordionIn { 0% {
  188. opacity: 0;
  189. transform: scale(0.8);
  190. }
  191. 100% {
  192. opacity: 1;
  193. transform: scale(1);
  194. }
  195. }
  196. @-webkit-keyframes
  197. accordionOut { 0% {
  198. opacity: 1;
  199. -webkit-transform: scale(1);
  200. }
  201. 100% {
  202. opacity: 0;
  203. -webkit-transform: scale(0.8);
  204. }
  205. }
  206. @-moz-keyframes
  207. accordionOut { 0% {
  208. opacity: 1;
  209. -moz-transform: scale(1);
  210. }
  211. 100% {
  212. opacity: 0;
  213. -moz-transform: scale(0.8);
  214. }
  215. }
  216. @keyframes
  217. accordionOut { 0% {
  218. opacity: 1;
  219. transform: scale(1);
  220. }
  221. 100% {
  222. opacity: 0;
  223. transform: scale(0.8);
  224. }
  225. }
  226. </style>
  227. </head>
  228.  
  229. <body>
  230. <div class="container">
  231. <h1>Smooth Responsive Accordion Widget</h1>
  232. <div class="css-script-ads" align="center"><script type="text/javascript"><!--
  233. google_ad_client = "ca-pub-2783044520727903";
  234. /* CSSScript Demo Page */
  235. google_ad_slot = "3025259193";
  236. google_ad_width = 728;
  237. google_ad_height = 90;
  238. //-->
  239. </script>
  240. <script type="text/javascript"
  241. src="//pagead2.googlesyndication.com/pagead/show_ads.js">
  242. </script></div>
  243. <div class="accordion">
  244. <dl>
  245. <dt><a class="accordionTitle" href="#">First Accordion heading</a></dt>
  246. <dd class="accordionItem accordionItemCollapsed">
  247. <p><a href="http://google.com">Google</a></p>
  248. <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>
  249. <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>
  250. </dd>
  251. <dt><a href="#" class="accordionTitle">Second Accordion heading</a></dt>
  252. <dd class="accordionItem accordionItemCollapsed">
  253. <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>
  254. <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>
  255. </dd>
  256. <dt><a href="#" class="accordionTitle">Third Accordion heading</a></dt>
  257. <dd class="accordionItem accordionItemCollapsed">
  258. <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>
  259. <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>
  260. </dd>
  261. </dl>
  262. </div>
  263. </div>
  264. <script>
  265. /*!
  266. * classie - class helper functions
  267. * from bonzo https://github.com/ded/bonzo
  268. *
  269. * classie.has( elem, 'my-class' ) -> true/false
  270. * classie.add( elem, 'my-new-class' )
  271. * classie.remove( elem, 'my-unwanted-class' )
  272. * classie.toggle( elem, 'my-class' )
  273. */
  274.  
  275. /*jshint browser: true, strict: true, undef: true */
  276. /*global define: false */
  277.  
  278. ( function( window ) {
  279.  
  280. 'use strict';
  281.  
  282. // class helper functions from bonzo https://github.com/ded/bonzo
  283.  
  284. function classReg( className ) {
  285. return new RegExp("(^|\\s+)" + className + "(\\s+|$)");
  286. }
  287.  
  288. // classList support for class management
  289. // altho to be fair, the api sucks because it won't accept multiple classes at once
  290. var hasClass, addClass, removeClass;
  291.  
  292. if ( 'classList' in document.documentElement ) {
  293. hasClass = function( elem, c ) {
  294. return elem.classList.contains( c );
  295. };
  296. addClass = function( elem, c ) {
  297. elem.classList.add( c );
  298. };
  299. removeClass = function( elem, c ) {
  300. elem.classList.remove( c );
  301. };
  302. }
  303. else {
  304. hasClass = function( elem, c ) {
  305. return classReg( c ).test( elem.className );
  306. };
  307. addClass = function( elem, c ) {
  308. if ( !hasClass( elem, c ) ) {
  309. elem.className = elem.className + ' ' + c;
  310. }
  311. };
  312. removeClass = function( elem, c ) {
  313. elem.className = elem.className.replace( classReg( c ), ' ' );
  314. };
  315. }
  316.  
  317. function toggleClass( elem, c ) {
  318. var fn = hasClass( elem, c ) ? removeClass : addClass;
  319. fn( elem, c );
  320. }
  321.  
  322. var classie = {
  323. // full names
  324. hasClass: hasClass,
  325. addClass: addClass,
  326. removeClass: removeClass,
  327. toggleClass: toggleClass,
  328. // short names
  329. has: hasClass,
  330. add: addClass,
  331. remove: removeClass,
  332. toggle: toggleClass
  333. };
  334.  
  335. // transport
  336. if ( typeof define === 'function' && define.amd ) {
  337. // AMD
  338. define( classie );
  339. } else {
  340. // browser global
  341. window.classie = classie;
  342. }
  343.  
  344. })( window );
  345.  
  346. //fake jQuery
  347. var $ = function(selector){
  348. return document.querySelector(selector);
  349. }
  350. var accordion = $('.accordion');
  351.  
  352. //add event listener to all anchor tags with accordion title class
  353. accordion.addEventListener("click",function(e) {
  354.  
  355. if(e.target && e.target.nodeName == "A") {
  356. var classes = e.target.className.split(" ");
  357. if(classes) {
  358. for(var x = 0; x < classes.length; x++) {
  359. if(classes[x] == "accordionTitle") {
  360. e.stopPropagation();
  361. e.preventDefault();
  362. var title = e.target;
  363.  
  364. //next element sibling needs to be tested in IE8+ for any crashing problems
  365. var content = e.target.parentNode.nextElementSibling;
  366.  
  367. //use classie to then toggle the active class which will then open and close the accordion
  368.  
  369. classie.toggle(title, 'accordionTitleActive');
  370. //this is just here to allow a custom animation to treat the content
  371. if(classie.has(content, 'accordionItemCollapsed')) {
  372. if(classie.has(content, 'animateOut')){
  373. classie.remove(content, 'animateOut');
  374. }
  375. classie.add(content, 'animateIn');
  376.  
  377. }else{
  378. classie.remove(content, 'animateIn');
  379. classie.add(content, 'animateOut');
  380. }
  381. //remove or add the collapsed state
  382. classie.toggle(content, 'accordionItemCollapsed');
  383.  
  384. }
  385. }
  386. }
  387.  
  388. }
  389. });
  390. </script>
  391. <script>
  392. (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  393. (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  394. m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  395. })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
  396.  
  397. ga('create', 'UA-46156385-1', 'cssscript.com');
  398. ga('send', 'pageview');
  399.  
  400. </script>
  401. </body>
  402. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement