aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--LICENSE19
-rw-r--r--README.md1
-rw-r--r--assets/fonts/leaguegothic/league_gothic-webfont.ttfbin0 -> 42324 bytes
-rw-r--r--assets/images/breakdom.jpgbin0 -> 56714 bytes
-rw-r--r--css/main.css218
-rw-r--r--css/reset.css57
-rw-r--r--index.html151
-rw-r--r--js/slideshow.js282
9 files changed, 732 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..dec0ea4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.DS_Store
+.svn
+log/*.log
+tmp/**
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..28cfd7d
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,19 @@
+Copyright (C) 2011 Hakim El Hattab, http://hakim.se
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE. \ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..923ddb8
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+# CSS 3D Slideshow
diff --git a/assets/fonts/leaguegothic/league_gothic-webfont.ttf b/assets/fonts/leaguegothic/league_gothic-webfont.ttf
new file mode 100644
index 0000000..29f896a
--- /dev/null
+++ b/assets/fonts/leaguegothic/league_gothic-webfont.ttf
Binary files differ
diff --git a/assets/images/breakdom.jpg b/assets/images/breakdom.jpg
new file mode 100644
index 0000000..64dc3f3
--- /dev/null
+++ b/assets/images/breakdom.jpg
Binary files differ
diff --git a/css/main.css b/css/main.css
new file mode 100644
index 0000000..494cfc2
--- /dev/null
+++ b/css/main.css
@@ -0,0 +1,218 @@
+/**
+ * @author Hakim El Hattab
+ */
+
+
+/*********************************************
+ * FONT-FACE DEFINITIONS
+ *********************************************/
+
+@font-face {
+ font-family: 'League Gothic';
+ src: url('../assets/fonts/leaguegothic/league_gothic-webfont.ttf') format('truetype');
+ font-weight: normal;
+ font-style: normal;
+}
+
+
+/*********************************************
+ * GLOBAL STYLES
+ *********************************************/
+
+html, body {
+ padding: 0;
+ margin: 0;
+ overflow: hidden;
+
+ font-family: 'Crimson Text', Times, 'Times New Roman', serif;
+ font-size: 36px;
+
+ background: #fff;
+ color: #222;
+
+ width: 100%;
+ height: 100%;
+
+ background-image: -webkit-gradient(
+ radial,
+ 50% 50%, 0,
+ 50% 50%, 1000,
+ from(rgba(245,245,245,1.0)),
+ to(rgba(100,100,100,1.0))
+ );
+
+ background-image: -moz-radial-gradient(
+ 50% 50% 90deg,
+ rgba(245,245,245,1.0) 0%,
+ rgba(100,100,100,1.0) 100%
+ );
+
+}
+
+
+/*********************************************
+ * HEADERS
+ *********************************************/
+h1, h2, h3, h4 {
+ margin: 0 0 20px 0;
+ font-family: 'League Gothic', Arial, Helvetica, sans-serif;
+ line-height: 0.9em;
+ letter-spacing: 0.02em;
+ text-transform: uppercase;
+ color: #222;
+ text-shadow: 0px 0px 2px #fff, 0px 0px 4px #bbb;
+}
+
+h1 { font-size: 136px; }
+h2 { font-size: 76px; }
+h3 { font-size: 56px; }
+h4 { font-size: 36px; }
+
+h1.inverted,
+h2.inverted,
+h3.inverted,
+h4.inverted {
+ color: #fff;
+ text-shadow: 0px 0px 2px #fff, 0px 0px 2px #888;
+}
+
+
+/*********************************************
+ * SLIDES
+ *********************************************/
+#main {
+ position: absolute;
+ width: 800px;
+ height: 600px;
+
+ left: 50%;
+ top: 50%;
+ margin-left: -400px;
+ margin-top: -320px;
+
+ text-align: center;
+
+ -webkit-perspective: 600px;
+ -webkit-perspective-origin: 50% 25%;
+}
+
+#main>section,
+#main>section>section {
+ display: none;
+
+ position: absolute;
+ width: 100%;
+ min-height: 600px;
+
+ -webkit-transform-style: preserve-3d;
+
+ -webkit-transition: all 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
+ -moz-transition: all 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
+ -o-transition: all 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
+ transition: all 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
+}
+
+#main section.past {
+ display: block;
+ opacity: 0;
+
+ -webkit-transform: translate3d(-100%, 0, 0)
+ rotateY(-90deg)
+ translate3d(-100%, 0, 0);
+}
+
+#main section.present {
+ display: block;
+}
+
+#main section.future {
+ display: block;
+ opacity: 0;
+
+ -webkit-transform: translate3d(100%, 0, 0)
+ rotateY(90deg)
+ translate3d(100%, 0, 0);
+}
+
+#main section>section.past {
+ display: block;
+ opacity: 0;
+
+ -webkit-transform: translate3d(0, -50%, 0)
+ rotateX(70deg)
+ translate3d(0, -50%, 0);
+}
+#main section>section.future {
+ display: block;
+ opacity: 0;
+
+ -webkit-transform: translate3d(0, 50%, 0)
+ rotateX(-70deg)
+ translate3d(0, 50%, 0);
+}
+
+
+/*********************************************
+ * DEFAULT ELEMENT STYLES
+ *********************************************/
+
+#main>section {
+ line-height: 1.2em;
+ text-shadow: 0px 0px 2px #fff, 0px 0px 4px #bbb;
+ font-weight: 600;
+}
+
+ol {
+ list-style: decimal;
+ list-style-position: inside;
+}
+
+li, p {
+ margin-bottom: 10px;
+}
+
+a:not(.image) {
+ color: #1b6263;
+ text-decoration: none;
+ border-bottom: 1px dashed rgba(0,0,0,0.3);
+ padding: 1px 3px;
+}
+
+ a:not(.image):hover {
+ color: #fff;
+ background: #2fa794;
+ text-shadow: none;
+ border: none;
+ }
+
+img {
+ margin: 30px 0 0 0;
+ background: rgba(255,255,255,0.12);
+ border: 4px solid #eee;
+
+ -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
+ -moz-box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
+
+ -webkit-transition: all .11s linear;
+ -moz-transition: all .11s linear;
+ -o-transition: all .11s linear;
+ transition: all .11s linear;
+}
+
+ a.image:hover img {
+ background: rgba(255,255,255,0.2);
+
+ -webkit-box-shadow: 0 0 20px rgba(0, 0, 0, 0.25);
+ -moz-box-shadow: 0 0 20px rgba(0, 0, 0, 0.25);
+ box-shadow: 0 0 20px rgba(0, 0, 0, 0.25);
+ }
+
+
+
+
+
+
+
+
+
diff --git a/css/reset.css b/css/reset.css
new file mode 100644
index 0000000..68f227a
--- /dev/null
+++ b/css/reset.css
@@ -0,0 +1,57 @@
+/* http://meyerweb.com/eric/tools/css/reset/
+ v2.0 | 20110126
+ License: none (public domain)
+*/
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article, aside, details, figcaption, figure,
+footer, header, hgroup, menu, nav, section {
+ display: block;
+}
+body {
+ line-height: 1;
+}
+ol, ul {
+ list-style: none;
+}
+blockquote, q {
+ quotes: none;
+}
+blockquote:before, blockquote:after,
+q:before, q:after {
+ content: '';
+ content: none;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+
+/* HTML5BP:
+ These selection declarations have to be separate.
+ No text-shadow: twitter.com/miketaylr/status/12228805301
+ Also: hot pink. */
+::-moz-selection{ background: #FF5E99; color:#fff; text-shadow: none; }
+::selection { background:#FF5E99; color:#fff; text-shadow: none; }
+
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..5c71250
--- /dev/null
+++ b/index.html
@@ -0,0 +1,151 @@
+<!doctype html>
+<html lang="en">
+
+ <head>
+ <meta charset="utf-8">
+
+ <title>CSS 3D Slideshow</title>
+
+ <link href='http://fonts.googleapis.com/css?family=Crimson+Text:regular,600,bold' rel='stylesheet' type='text/css'>
+
+ <link rel="stylesheet" href="css/reset.css">
+ <link rel="stylesheet" href="css/main.css">
+ </head>
+
+ <body>
+
+ <!-- Any section element inside of this container is displayed as a slide -->
+ <div id="main">
+
+ <section>
+ <h1>Slideshow</h1>
+ <h3 class="inverted">With 3D effects. And stuff.</h3>
+ <script>
+ // Delicously hacky. Look away.
+ var message = navigator.userAgent.match( /(iPhone|iPad|iPod|Android)/i ) ? 'Tap to navigate' : 'Navigate via keyboard';
+ document.write( '<p style="color: rgba(0,0,0,0.1); text-shadow: none;">('+message+')</p>' );
+ </script>
+ </section>
+
+ <section>
+ <h2>Heads Up</h2>
+ <p>
+ This requires a browser with support for CSS3 3D transforms, such as Mobile Safari.
+ </p>
+ </section>
+
+ <!-- Example of nested vertical slides -->
+ <section>
+ <section>
+ <h2>Vertical Slides</h2>
+ <p>
+ Slides can be nested inside of other slides,<br/>
+ try pressing <a href="#/2/1">down</a>.
+ </p>
+ <a href="#/2/1" class="image">
+ <img src="data:image/png;base64,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">
+ </a>
+ </section>
+ <section>
+ <h2>Basement Level 1</h2>
+ <p>Press down or up to navigate.</p>
+ </section>
+ <section>
+ <h2>Basement Level 2</h2>
+ <p>This is totally the Google logo:</p>
+ <img src="data:image/png;base64,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%3D%3D">
+ </section>
+ <section>
+ <h2>Basement Level 3</h2>
+ <p>That's it, time to go back up.</p>
+ <a href="#/2" class="image">
+ <img style="-webkit-transform: rotate(180deg);" src="data:image/png;base64,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">
+ </a>
+ </section>
+ </section>
+
+ <section>
+ <h2>Marvelous Unordered List</h2>
+ <ul>
+ <li>No order here</li>
+ <li>Or here</li>
+ <li>Or here</li>
+ <li>Or here</li>
+ </ul>
+ </section>
+
+ <section>
+ <h2>Fantastic Ordered List</h2>
+ <ol>
+ <li>One is smaller than...</li>
+ <li>Two is smaller than...</li>
+ <li>Three!</li>
+ </ol>
+ </section>
+
+ <section>
+ <h2>Intergalactic Interconnections</h2>
+ <p>
+ You can link between slides internally,<br/>
+ <a href="#/2/3">like this</a>.
+ </p>
+ </section>
+
+ <section>
+ <h2>Spectacular image!</h2>
+ <a class="image" href="http://hakim.se/experiments/html5/breakdom/" target="_blank">
+ <img src="assets/images/breakdom.jpg">
+ </a>
+ </section>
+
+ <section>
+ <h2>Stellar Links</h2>
+ <ul>
+ <li><a href="hakim-slideshow-0.3.zip">Download this slideshow</a></li>
+ <li><a href="http://hakim.se/experiments/css3-3d-slideshow">Read more on my site</a></li>
+ <li><a href="http://twitter.com/hakimel">Follow me on Twitter</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h1>THE END</h1>
+ <h3 class="inverted">BY Hakim El Hattab / hakim.se</h3>
+ </section>
+
+ </div>
+
+ <script src="js/slideshow.js"></script>
+
+
+
+ <!-- Everything below this point is unrelated to the slideshow -->
+
+ <div class="tweet-button" style="position: absolute; bottom: 10px; left: 50%; margin-left: -25px">
+ <a href="http://twitter.com/share" class="twitter-share-button" data-text="A CSS 3D slideshow by @hakimel." data-url="http://hakim.se/experiments/css3-3d-slideshow" data-count="none" data-related="hakimel"></a>
+ <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
+ </div>
+
+ <script>
+ var _gaq = [['_setAccount', 'UA-15240703-1'], ['_trackPageview']];
+ (function(d, t) {
+ var g = d.createElement(t),
+ s = d.getElementsByTagName(t)[0];
+ g.async = true;
+ g.src = ('https:' == location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ s.parentNode.insertBefore(g, s);
+ })(document, 'script');
+ </script>
+
+ <style>a[href="http://www.w3counter.com"] { display: none!important; }</style>
+ <script src="http://www.w3counter.com/tracker.js"></script>
+ <script>
+ w3counter(49720);
+ var ps = document.createElement('script');
+ ps.type = 'text/javascript';
+ ps.async = true;
+ ps.src = '//pulse.w3counter.com/pulse.js?id=49720';
+ (document.getElementsByTagName('head')[0]||document.getElementsByTagName('body')[0]).appendChild(ps);
+ </script>
+
+ </body>
+</html> \ No newline at end of file
diff --git a/js/slideshow.js b/js/slideshow.js
new file mode 100644
index 0000000..8165a40
--- /dev/null
+++ b/js/slideshow.js
@@ -0,0 +1,282 @@
+/**
+ * Copyright (C) 2011 Hakim El Hattab, http://hakim.se
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+/**
+ * Handles the very minimal navigation logic involved in the
+ * slideshow. Including keyboard navigation, touch interaction
+ * and URL history behavior.
+ *
+ * Slides are given unique hash based URL's so that they can be
+ * opened directly. I didn't use the HTML5 History API for this
+ * as it would have required the addition of server side rewrite
+ * rules and hence require more effort for anyone to set up.
+ *
+ * This component can be called from other scripts via a tiny API:
+ * - Slideshow.navigateTo( indexh, indexv );
+ * - Slideshow.navigateLeft();
+ * - Slideshow.navigateRight();
+ * - Slideshow.navigateUp();
+ * - Slideshow.navigateDown();
+ *
+ *
+ * version 0.1:
+ * - First release
+ *
+ * version 0.2:
+ * - Refactored code and added inline documentation
+ * - Slides now have unique URL's
+ * - A basic API to invoke navigation was added
+ *
+ * version 0.3:
+ * - Added licensing terms
+ *
+ *
+ * @author Hakim El Hattab
+ * @version 0.3
+ */
+var Slideshow = (function(){
+
+ var indexh = 0,
+ indexv = 0;
+
+ /**
+ * Activates the main program logic.
+ */
+ function initialize() {
+ document.addEventListener('keydown', onDocumentKeyDown, false);
+ document.addEventListener('touchstart', onDocumentTouchStart, false);
+ window.addEventListener('hashchange', onWindowHashChange, false);
+
+ // Read the initial state of the URL (hash)
+ readURL();
+ }
+
+ /**
+ * Handler for the document level 'keydown' event.
+ *
+ * @param {Object} event
+ */
+ function onDocumentKeyDown( event ) {
+
+ if( event.keyCode >= 37 && event.keyCode <= 40 ) {
+
+ switch( event.keyCode ) {
+ case 37: navigateLeft(); break; // left
+ case 39: navigateRight(); break; // right
+ case 38: navigateUp(); break; // up
+ case 40: navigateDown(); break; // down
+ }
+
+ slide();
+
+ event.preventDefault();
+
+ }
+ }
+
+ /**
+ * Handler for the document level 'touchstart' event.
+ *
+ * This enables very basic tap interaction for touch
+ * devices. Added mainly for performance testing of 3D
+ * transforms on iOS but was so happily surprised with
+ * how smoothly it runs so I left it in here. Apple +1
+ *
+ * @param {Object} event
+ */
+ function onDocumentTouchStart( event ) {
+
+ // We're only interested in one point taps
+ if (event.touches.length == 1) {
+ event.preventDefault();
+
+ var point = {
+ x: event.touches[0].clientX,
+ y: event.touches[0].clientY
+ };
+
+ // Define the extent of the areas that may be tapped
+ // to navigate
+ var wt = window.innerWidth * 0.3;
+ var ht = window.innerHeight * 0.3;
+
+ if( point.x < wt ) {
+ navigateLeft();
+ }
+ else if( point.x > window.innerWidth - wt ) {
+ navigateRight();
+ }
+ else if( point.y < ht ) {
+ navigateUp();
+ }
+ else if( point.y > window.innerHeight - ht ) {
+ navigateDown();
+ }
+
+ slide();
+
+ }
+ }
+
+
+ /**
+ * Handler for the window level 'hashchange' event.
+ *
+ * @param {Object} event
+ */
+ function onWindowHashChange( event ) {
+ readURL();
+ }
+
+ /**
+ * Updates one dimension of slides by showing the slide
+ * with the specified index.
+ *
+ * @param {String} selector A CSS selector that will fetch
+ * the group of slides we are working with
+ * @param {Number} index The index of the slide that should be
+ * shown
+ *
+ * @return {Number} The index of the slide that is now shown,
+ * might differ from the passed in index if it was out of
+ * bounds.
+ */
+ function updateSlides( selector, index ) {
+
+ // Select all slides and convert the NodeList result to
+ // an array
+ var slides = Array.prototype.slice.call( document.querySelectorAll( selector ) );
+
+ if( slides.length ) {
+ // Enforce max and minimum index bounds
+ index = Math.max(Math.min(index, slides.length - 1), 0);
+
+ slides[index].setAttribute('class', 'present');
+
+ // Any element previous to index is given the 'past' class
+ slides.slice(0, index).map(function(element){
+ element.setAttribute('class', 'past');
+ });
+
+ // Any element subsequent to index is given the 'future' class
+ slides.slice(index + 1).map(function(element){
+ element.setAttribute('class', 'future');
+ });
+ }
+ else {
+ // Since there are no slides we can't be anywhere beyond the
+ // zeroth index
+ index = 0;
+ }
+
+ return index;
+
+ }
+
+ /**
+ * Updates the visual slides to represent the currently
+ * set indices.
+ */
+ function slide() {
+ indexh = updateSlides( '#main>section', indexh );
+ indexv = updateSlides( 'section.present>section', indexv );
+
+ writeURL();
+ }
+
+ /**
+ * Reads the current URL (hash) and navigates accordingly.
+ */
+ function readURL() {
+ // Break the hash down to separate components
+ var bits = window.location.hash.slice(2).split('/');
+
+ // Read the index components of the hash
+ indexh = bits[0] ? parseInt( bits[0] ) : 0;
+ indexv = bits[1] ? parseInt( bits[1] ) : 0;
+
+ navigateTo( indexh, indexv );
+ }
+
+ /**
+ * Updates the page URL (hash) to reflect the current
+ * navigational state.
+ */
+ function writeURL() {
+ var url = '/';
+
+ // Only include the minimum possible number of components in
+ // the URL
+ if( indexh > 0 || indexv > 0 ) url += indexh
+ if( indexv > 0 ) url += '/' + indexv
+
+ window.location.hash = url;
+ }
+
+ /**
+ * Triggers a navigation to the specified indices.
+ *
+ * @param {Number} h The horizontal index of the slide to show
+ * @param {Number} v The vertical index of the slide to show
+ */
+ function navigateTo( h, v ) {
+ indexh = h === undefined ? indexh : h;
+ indexv = v === undefined ? indexv : v;
+
+ slide();
+ }
+
+ function navigateLeft() {
+ indexh --;
+ indexv = 0;
+ slide();
+ }
+ function navigateRight() {
+ indexh ++;
+ indexv = 0;
+ slide();
+ }
+ function navigateUp() {
+ indexv --;
+ slide();
+ }
+ function navigateDown() {
+ indexv ++;
+ slide();
+ }
+
+ // Initialize the program. Done right before returning to ensure
+ // that any inline variable definitions are available to all
+ // functions
+ initialize();
+
+ // Expose some methods publicly
+ return {
+ navigateTo: navigateTo,
+ navigateLeft: navigateLeft,
+ navigateRight: navigateRight,
+ navigateUp: navigateUp,
+ navigateDown: navigateDown
+ };
+
+})();
+