Pen Settings

HTML

CSS

CSS Base

Vendor Prefixing

Add External Stylesheets/Pens

Any URL's added here will be added as <link>s in order, and before the CSS in the editor. If you link to another Pen, it will include the CSS from that Pen. If the preprocessor matches, it will attempt to combine them before processing.

+ add another resource

JavaScript

Babel includes JSX processing.

Add External Scripts/Pens

Any URL's added here will be added as <script>s in order, and run before the JavaScript in the editor. You can use the URL of any other Pen and it will include the JavaScript from that Pen.

+ add another resource

Packages

Add Packages

Search for and use JavaScript packages from npm here. By selecting a package, an import statement will be added to the top of the JavaScript editor for this package.

Behavior

Save Automatically?

If active, Pens will autosave every 30 seconds after being saved once.

Auto-Updating Preview

If enabled, the preview panel updates automatically as you code. If disabled, use the "Run" button to update.

Format on Save

If enabled, your code will be formatted when you actively save your Pen. Note: your code becomes un-folded during formatting.

Editor Settings

Code Indentation

Want to change your Syntax Highlighting theme, Fonts and more?

Visit your global Editor Settings.

HTML

              
                h1 Slideshow
h2 using cool 3d showcase effects

section.slideshow
  ul.items
    li.item
      h3 First
      div.img.first
        h4 1
        span Put your website layout / whatever here
    li.item
      h3 Second
      div.img.second
        h4 2
        span Put your website layout / whatever here
    li.item
      h3 Third
      div.img.third
        h4 3
        span Put your website layout / whatever here
    li.item
      h3 Fourth
      div.img.fourth
        h4 4
        span Put your website layout / whatever here
  div.nav
    button.prev
    button.next
              
            
!

CSS

              
                body
  background: hsl(0, 100, 60)
  font-family: sans-serif
    
h1, h2
  position: absolute
  left: 50%
  transform: translateX(-50%)
  font-family: sans-serif
  text-transform: uppercase
  letter-spacing: 2px
h1
  top: 24px
  color: hsl(0, 0, 100)
  font-size: 12px
h2
  top: 44px
  color: hsl(0, 0, 100)
  font-size: 10px
  opacity: 0.7
  
.slideshow
  position: absolute
  width: 650px
  height: 350px
  top: 150px
  left: 50%
  background: hsl(0, 0, 100)
  border-radius: 4px
  box-shadow: 0 3px 18px hsl(0, 100, 40)
  transform: translateX(-50%)
  .item
    position: absolute
    width: 100%
    height: 100%
    opacity: 0
    transition: all 0.4s ease-in-out
    perspective: 800px
    h3
      position: absolute
      bottom: -6px
      left: 15px
      color: hsl(0, 0, 85)
      font-size: 50px
      font-weight: bold
      text-transform: uppercase
      letter-spacing: 2px
    .img
      position: absolute
      width: 320px
      height: 500px
      bottom: -30px
      right: 100px
      border-radius: 3px
      opacity: 0
      transition: transform 0.4s ease-in-out
      transform: rotateX(45deg) rotateZ(-30deg) translateY(0%)
      h4
        position: absolute
        bottom: -16px
        right: 0
        opacity: 0.4
        color: hsl(0, 0, 100)
        font-size: 160px
      span
        position: absolute
        top: 50%
        left: 50%
        color: hsl(0, 0, 100)
        font-size: 14px
        text-align: center
        text-shadow: -1px 1px 1px hsl(0, 0, 30)
        line-height: 20px
        transform: translate(-50%, -50%)
  .item.on
    z-index: 1
    opacity: 1
    transition: all 0.4s ease-in-out
    .img
      opacity: 1
      animation: on 0.6s ease-in-out
      animation-fill-mode: forwards
    .img.first
      background: hsl(210, 80, 30)
      box-shadow: -3px 3px hsl(210, 80, 20)
    .img.second
      background: hsl(30, 80, 70)
      box-shadow: -3px 3px hsl(30, 80, 60)
    .img.third
      background: hsl(270, 60, 50)
      box-shadow: -3px 3px hsl(270, 60, 40)
    .img.fourth
      background: hsl(170, 40, 30)
      box-shadow: -3px 3px hsl(170, 40, 20)

.nav
  z-index: 10
  position: absolute
  bottom: -15px
  right: 20px
  border-radius: 20px
  box-shadow: 0 8px 18px hsl(0, 100, 40)
  button
    position: relative
    display: block
    float: left
    width: 50px
    height: 40px
    background: hsl(0, 100, 60)
    box-shadow: 0 0 0 3px hsl(0, 0, 100) inset
    border: none
    outline: none
    cursor: pointer
    &::before, &::after
      position: absolute
      content: ''
    &::before
      width: 16px
      height: 2px
      top: 19px
      background: hsl(0, 0, 100)
    &::after
      width: 6px
      height: 6px
      top: 16px
      border-top: 2px solid hsl(0, 0, 100)
  button.next
    margin-left: -3px
    border-top-right-radius: 20px
    border-bottom-right-radius: 20px
    cursor: e-resize
    &::before
      left: 15px
    &::after
      left: 24px
      border-right: 2px solid hsl(0, 0, 100)
      transform: rotate(45deg)
  button.prev
    border-top-left-radius: 20px
    border-bottom-left-radius: 20px
    cursor: w-resize
    &::before
      right: 15px
    &::after
      right: 24px
      border-left: 2px solid hsl(0, 0, 100)
      transform: rotate(-45deg)
    
@keyframes on
  from
    opacity: 0
    transform: rotateX(45deg) rotateZ(-30deg) translateY(20%)
  to
    transform: rotateX(45deg) rotateZ(-30deg) translateY(0%)
              
            
!

JS

              
                // Still one error in console when we click next on last element or previous on first element. It is trying to add 'on' class on an empty element right before we go back to first/last child. Im working on it but help is always appreciated :3

function init() {
  first.classList.add('first', 'on');
  last.classList.add('last');
}

function slide(target) {
  var current = document.querySelector('.items .on'),
      next = current.nextElementSibling,
      prev = current.previousElementSibling;
  
  current.classList.remove('on');
  
  if (target.classList.contains('next') && current.classList.contains('last')) first.classList.add('on');
  if (target.classList.contains('next')) next.classList.add('on');
  
  if (target.classList.contains('prev') && current.classList.contains('first')) last.classList.add('on');
  if (target.classList.contains('prev')) prev.classList.add('on');
}

var first = document.querySelector('.items li:first-child'),
    last = document.querySelector('.items li:last-child');

window.onload = init;
document.body.onmouseup = function (event) {
    var target = event.target || event.toElement;
    if (target.tagName.toLowerCase() == 'button') slide(target);
};
              
            
!
999px

Console