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 is required to process package imports. If you need a different preprocessor remove all packages first.

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

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

              
                
              
            
!

CSS

              
                // Juice v0.0.8
// ------------

// ----------------------------------
// Variable settings
// ----------------------------------

// Base px
$base-px-default: 16px !default;
// Breakpoints
$hdpi-ratio-default: 1.3 !default;
// Border Radius
$border-radius-default: 5px !default;
// Placeholder Color
$placeholder-color-default: #555555 !default;
// Triangle
$triangle-direction-default: right !default;
$triangle-size-default: $base-px-default !default;
$triangle-color-default: #222222 !default;
$triangle-element-default: after !default;
// Circle
$circle-size-default: $base-px-default !default;
$circle-color-default: inherit !default;
$circle-border-width-default: null !default;
$circle-border-color-default: #222222 !default;
$circle-display-default: inline-block !default;
// Position
$position-default: null !default;
// Tint/Shade
$mix-percent-default: 15% !default;


// ----------------------------------
// Mixins
// ----------------------------------

// Breakpoints
// -----------
$breakpoints: (
	"xxlarge":	(min-width: 120.0625em),														// >= 1921px
	"xlarge-only":	(min-width: 90.0625em) and (max-width: 120em),	// 1441px - 1920px
	"xlarge-up":	(min-width: 90.0625em),														// <= 1920px
	"xlarge":	(max-width: 120em),																		// <= 1920px
	"large-only":	(min-width: 64.0625em) and (max-width: 90em),			// 1025px - 1440px
	"large-up":	(min-width: 64.0625em),															// <= 1440px
	"large":	(max-width: 90em),																		// <= 1440px
	"medium-only":	(min-width: 40.0625em) and (max-width: 64em),		// 641px - 1024px
	"medium-up":	(min-width: 40.0625em),														// <= 1024px
	"medium":	(max-width: 64em),																		// <= 1024px
	"not-small":	(min-width: 40.0625em),														// >= 641px
	"small":	(max-width: 40em),																		// <= 640px
	"xsmall":	(max-width: 30em),																		// <= 480px
	"xxsmall":	(max-width: 20em),																	// <= 320px
	"iphone3":	(min-device-width: 320px) and (max-device-width: 480px) and (-webkit-device-pixel-ratio: 1),
	"iphone3-landscape":	(min-device-width: 320px) and (max-device-width: 480px) and (-webkit-device-pixel-ratio: 1) and (orientation: landscape),
	"iphone3-portrait":	(min-device-width: 320px) and (max-device-width: 480px) and (-webkit-device-pixel-ratio: 1) and (orientation: portrait),
	"iphone4":	(min-device-width: 320px) and (max-device-width: 480px) and (-webkit-device-pixel-ratio: 2) and (device-aspect-ratio: 2/3),
	"iphone4-landscape":	(min-device-width: 320px) and (max-device-width: 480px) and (-webkit-device-pixel-ratio: 2) and (device-aspect-ratio: 2/3) and (orientation: landscape),
	"iphone4-portrait":	(min-device-width: 320px) and (max-device-width: 480px) and (-webkit-device-pixel-ratio: 2) and (device-aspect-ratio: 2/3) and (orientation: portrait),
	"iphone5":	(min-device-width: 320px) and (max-device-width: 568px) and (-webkit-device-pixel-ratio: 2) and (device-aspect-ratio: 40/71),
	"iphone5-landscape":	(min-device-width: 320px) and (max-device-width: 568px) and (-webkit-device-pixel-ratio: 2) and (device-aspect-ratio: 40/71) and (orientation: landscape),
	"iphone5-portrait":	(min-device-width: 320px) and (max-device-width: 568px) and (-webkit-device-pixel-ratio: 2) and (device-aspect-ratio: 40/71) and (orientation: portrait),
	"iphone6":	(min-device-width: 375px) and (max-device-width: 667px) and (-webkit-device-pixel-ratio: 2),
	"iphone6-landscape":	(min-device-width: 375px) and (max-device-width: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape),
	"iphone6-portrait":	(min-device-width: 375px) and (max-device-width: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait),
	"iphone6-plus":	(min-device-width: 414px) and (max-device-width: 736px) and (-webkit-device-pixel-ratio: 3),
	"iphone6-plus-landscape":	(min-device-width: 414px) and (max-device-width: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape),
	"iphone6-plus-portrait":	(min-device-width: 414px) and (max-device-width: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait),
	"ipad":	(min-device-width: 768px) and (max-device-width: 1024px),
	"ipad-landscape":	(min-device-width: 768px) and (max-device-width: 1024px) and (orientation: landscape),
	"ipad-portrait":	(min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait),
	"ipad-retina":	(min-device-width: 768px) and (max-device-width: 1024px) and (-webkit-device-pixel-ratio: 2),
	"ipad-retina-landscape":	(min-device-width: 768px) and (max-device-width: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape),
	"ipad-retina-portrait":	(min-device-width: 768px) and (max-device-width: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait),
	"hdpi":	"(-webkit-min-device-pixel-ratio: $hdpi-ratio-default),
					only screen and (min--moz-device-pixel-ratio: $hdpi-ratio-default),
					only screen and (-moz-min-device-pixel-ratio: $hdpi-ratio-default),
					only screen and (-o-min-device-pixel-ratio: #{$hdpi-ratio-default}/1),
					only screen and (min-resolution: #{round($hdpi-ratio-default*96)}dpi),
					only screen and (min-resolution: #{$hdpi-ratio-default}dppx)"
);
@mixin bp($break, $viewport1: null) {
	// preset breakpoint
	@if not $viewport1 {
		@if map-has-key($breakpoints, $break) {
			@media only screen and #{inspect(map-get($breakpoints, $break))} { @content; }
		}
		@else {
			@warn "Couldn't find a breakpoint named #{$break}.";
		}
	}
	@else {
		// min breakpoint
		@if $break == min {
			@media screen and (min-width: $viewport1) { @content; }
		}
		// max breakpoint
		@else if $break == max {
			@media screen and (max-width: $viewport1) { @content; }
		}
		// min & max breakpoint
		@else {
			@media screen and (min-width: $break) and (max-width: $viewport1) { @content; }
		}
	}
}


// Single side border radius
// -------------------------
@mixin border-top-radius($radius: $border-radius-default) {
	border-top-right-radius: $radius;
	border-top-left-radius: $radius;
}
@mixin border-right-radius($radius: $border-radius-default) {
	border-top-right-radius: $radius;
	border-bottom-right-radius: $radius;
}
@mixin border-bottom-radius($radius: $border-radius-default) {
	border-bottom-right-radius: $radius;
	border-bottom-left-radius: $radius;
}
@mixin border-left-radius($radius: $border-radius-default) {
	border-top-left-radius: $radius;
	border-bottom-left-radius: $radius;
}


// Transforms
// ----------
@mixin transform-single($property, $value) {
	transform: #{$property}unquote('('#{$value}')');
}
@mixin rotate($deg) {
	@include transform-single(rotate, $deg);
}
@mixin rotateX($deg) {
	@include transform-single(rotateX, $deg);
}
@mixin rotateY($deg) {
	@include transform-single(rotateY, $deg);
}
@mixin rotateZ($deg) {
	@include transform-single(rotateZ, $deg);
}
@mixin rotate3d($x, $y, $z, $deg) {
	$multi-var: $x, $y, $z, $deg;
	@include transform-single(rotate3d, $multi-var);
}
@mixin scale($ratio) {
	@include transform-single(scale, $ratio);
}
@mixin scaleX($ratio) {
	@include transform-single(scaleX, $ratio);
}
@mixin scaleY($ratio) {
	@include transform-single(scaleY, $ratio);
}
@mixin scaleZ($ratio) {
	@include transform-single(scaleZ, $ratio);
}
@mixin scale3d($x, $y, $z) {
	$multi-var: $x, $y, $z;
	@include transform-single(scale3d, $multi-var);
}
@mixin skew($x, $y) {
	$multi-var: $x, $y;
	@include transform-single(skew, $multi-var);
	backface-visibility: hidden;
}
@mixin skewX($deg) {
	@include transform-single(skewX, $deg);
	backface-visibility: hidden;
}
@mixin skewY($deg) {
	@include transform-single(skewY, $deg);
	backface-visibility: hidden;
}
@mixin translate($x, $y) {
	$multi-var: $x, $y;
	@include transform-single(translate, $multi-var);
}
@mixin translateX($x) {
	@include transform-single(translateX, $x);
}
@mixin translateY($y) {
	@include transform-single(translateY, $y);
}
@mixin translateZ($z) {
	@include transform-single(translateZ, $z);
}
@mixin translate3d($x, $y, $z) {
	$multi-var: $x, $y, $z;
	@include transform-single(translate3d, $multi-var);
}


// Emboss effect
// -------------
@mixin box-emboss($opacity, $opacity2){
	box-shadow: rgba(white,$opacity) 0 1px 0, inset rgba(black,$opacity2) 0 1px 0;
}

// Letterpress effect
// ------------------
@mixin letterpress($opacity){
	text-shadow: rgba(white,$opacity) 0 1px 0;
}

// Placeholder text
// ----------------
@mixin placeholder-color($color: $placeholder-color-default) {
	&::placeholder {
		color: $color;
	}
}

// Sizing
// ------
@mixin size($width, $height: $width) {
	width: $width;
	height: $height;
}
@mixin square($size) {
	@include size($size, $size);
}

// Normal & hover state
// --------------------
@mixin hoverer($property, $normal, $hovered) {
	#{$property}: $normal;
	&:hover {
		#{$property}: $hovered;
	}
}

// Add responsive styling for multiple breakpoints
// -----------------------------------------------
@mixin responsive($property, $full, $medium:false, $small:false) {
	#{$property}: $full;
	@if $medium {
		@include bp(medium) {
			#{$property}: $medium;
		}
	}
	@if $small {
		@include bp(small) {
			#{$property}: $small;
		}
	}
}

// Create a triangle using borders (add in the option to make a border and triangle shape)
// Cut down on the code (Use sass maps for "trbl" and translate direction, maybe direction and border direction)
// ------------------------------------------------------------------------------------------------------------------
@mixin triangle($direction: $triangle-direction-default,
								$size: $triangle-size-default,
								$color: $triangle-color-default,
								$center: false,
								$element: $triangle-element-default) {
	&:#{$element} {
		@if not $center {
			position: absolute;
		}
		content:'';
		@include square(0);
		-webkit-transform: rotate(360deg);
		border-style: solid;
		@if $direction == up {
			border-width: 0 $size ($size*1.625) $size;
			border-color: transparent transparent $color transparent;
			@if $center {
				@include absolute(null,null,100%,50%);
				transform: translateX(-$size);
			}
		}
		@else if $direction == up-right {
			border-width: 0 $size $size 0;
			border-color: transparent $color transparent transparent;
			@if $center {
				@include absolute(0,0);
			}
		}
		@else if $direction == right {
			border-width: $size 0 $size ($size*1.625);
			border-color: transparent transparent transparent $color;
			@if $center {
				@include absolute(50%,null,null,100%);
				transform: translateY(-$size);
			}
		}
		@else if $direction == down-right {
			border-width: 0 0 $size $size;
			border-color: transparent transparent $color transparent;
			@if $center {
				@include absolute(null,0,0);
			}
		}
		@else if $direction == down {
			border-width: ($size*1.625) $size 0 $size;
			border-color: $color transparent transparent transparent;
			@if $center {
				@include absolute(100%,null,null,50%);
				transform: translateX(-$size);
			}
		}
		@else if $direction == down-left {
			border-width: $size 0 0 $size;
			border-color: transparent transparent transparent $color;
			@if $center {
				@include absolute(null,null,0,0);
			}
		}
		@else if $direction == left {
			border-width: $size ($size*1.625) $size 0;
			border-color: transparent $color transparent transparent;
			@if $center {
				@include absolute(50%,100%);
				transform: translateY(-$size);
			}
		}
		@else if $direction == up-left {
			border-width: $size $size 0 0;
			border-color: $color transparent transparent transparent;
			@if $center {
				@include absolute(0,null,null,0);
			}
		}
		@else {
			@warn "Available directions: up, up-right, right, down-right, down, down-left, left, up-left.";
		}
		@content;
	}
}

// Create a circle, with an optional border
@mixin circle($size: $circle-size-default,
						$color: $circle-color-default,
						$border-width: $circle-border-width-default,
						$border-color: $circle-border-color-default,
						$display: $circle-display-default) {
	display: $display;
	border-radius: 50%;
	@if $border-width {
		@include square($size);
		background-color: $color;
		border: $border-width solid $border-color;
	}
	@else{
		@if $color == inherit {
			border-width: $size/2;
			border-style: solid;
			@include square(0);
		}
		@else {
			@include square($size);
			background-color: $color;
		}
	}
}

// Advanced positioning
// --------------------
@mixin position($type,
								$top: $position-default,
								$right: $position-default,
								$bottom: $position-default,
								$left: $position-default) {
	position: $type;
	$allowed_types: absolute relative fixed;
	@if not index($allowed_types, $type) {
		@warn "Unknown position: #{$type}.";
	}
	@each $data in top $top, right $right, bottom $bottom, left $left {
		#{nth($data, 1)}: nth($data, 2);
	}
}
@mixin absolute($top: $position-default, $right: $position-default, $bottom: $position-default, $left: $position-default) {
	@include position(absolute, $top, $right, $bottom, $left);
}
@mixin relative($top: $position-default, $right: $position-default, $bottom: $position-default, $left: $position-default) {
	@include position(relative, $top, $right, $bottom, $left);
}
@mixin fixed($top: $position-default, $right: $position-default, $bottom: $position-default, $left: $position-default) {
	@include position(fixed, $top, $right, $bottom, $left);
}


// ----------------------------------
// Placeholders
// ----------------------------------

// Clearfix
// --------
%clearfix {
	*zoom: 1;
	&:before,
	&:after {
		display: table;
		content:'';
		line-height: 0;
	}
	&:after {
		clear: both;
	}
}

// Hide text
// ---------
%hide-text {
	font: 0/0 a;
	color: transparent;
	text-shadow: none;
}

// Center an element vertically and horizontally
// ---------------------------------------------
%centerer {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
}

// Center an element vertically
// ----------------------------
%vert-centerer {
	position: relative;
	top: 50%;
	transform: translateY(-50%);
}

// Cover everything
// ----------------
%coverer {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
}

// Center a block level element
// ----------------------------
%center-block {
	display: block;
	margin-left: auto;
	margin-right: auto;
}


// ----------------------------------
// Functions
// ----------------------------------

// Mix white with another color
// ----------------------------
@function tint($color, $percent: $mix-percent-default){
	@return mix(white, $color, $percent);
}
 
// Mix black with another color
// ----------------------------
@function shade($color, $percent: $mix-percent-default){
	@return mix(black, $color, $percent);
}

// Strip the units from a value
// ----------------------------
@function strip-units($value) {
	@return $value / ($value * 0 + 1);
}

// Calculate rems from a px value
// ------------------------------
@function rem-calc($px, $base-val: $base-px-default) {
	@if not unitless($px) {
		$px: strip-units($px);
	}
	@if not unitless($base-val) {
		$base-val: strip-units($base-val);
	}
	@return ($px / $base-val) * 1rem;
}

// Calculate ems from a px value
// ------------------------------
@function em-calc($px, $base-val: $base-px-default) {
	@if not unitless($px) {
		$px: strip-units($px);
	}
	@if not unitless($base-val) {
		$base-val: strip-units($base-val);
	}
	@return ($px / $base-val) * 1em;
}

// Create a random color
// ---------------------
@function random-color($min: 0, $max: 255, $alpha: 1) {
	@if $min < 0 {
		$min: -1;
	} @else {
		$min: $min - 1;
	}
	@if $max > 255 {
		$max: 256;
	} @else {
		$max: $max + 1;
	}
	$red: random($max) + $min;
	$green: random($max) + $min;
	$blue: random($max) + $min;
	@return rgba($red, $green, $blue, $alpha);
}

// Reverse a string
// ----------------
@function reverse($string) {
	$reversed-string: '';
	@for $i from 1 through str-length($string) {
		$char: str-slice($string, $i, $i);
		$reversed-string: "#{$char}#{$reversed-string}";
	}
	@return #{$reversed-string};
}

              
            
!

JS

              
                
              
            
!
999px

Console