Pen Settings

HTML

CSS

CSS Base

Vendor Prefixing

Add External Stylesheets/Pens

Any URLs added here will be added as <link>s in order, and before the CSS in the editor. You can use the CSS from another Pen by using its URL and the proper URL extension.

+ 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

Auto Save

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

              
                <div id="container">
<div class="input-field border-top">
	<input type="text" class="form-input" id="input1">
	<label class="input-label" data-empty-input="Enter your name" data-filled-input="Your name" for="input1"></label>
</div>
	
<div class="input-field border-bottom">
	<input type="text" class="form-input" id="input2">
	<label class="input-label" data-empty-input="Enter your name" data-filled-input="Your name" for="input2"></label>
</div>
	
<div class="input-field top-inline">
	<input type="text" class="form-input" id="input3">
	<label class="input-label" data-empty-input="Enter your name" data-filled-input="Your name" for="input3"></label>
</div>
	
<div class="input-field bottom-inline">
	<input type="text" class="form-input" id="input4">
	<label class="input-label" data-empty-input="Enter your name" data-filled-input="Your name"  for="input4"></label>
</div>
</div>
              
            
!

CSS

              
                body
	background-color: #eee
	font-family: Arial, calibri, helvetica
	font-size: 12px

h1
	text-align: center
	font-size: 1.5rem
	color: rgba(0,0,0,0.2)
	line-height: 2
	border-bottom: 1px solid rgba(0,0,0,0.2)
	margin-bottom: 20px

#container
	width: 80%
	background-color: #fff
	margin: 20px auto
	padding: 40px
	box-shadow: 0 5px 5px rgba(0,0,0,0.1)

//--- GENERIC --------- //
label,
input
	display: block
	box-sizing: border-box

.form-input,
.input-label
	color: white
	font-weight: normal
	font-size: 20px

.input-label
	position: absolute
	top: 50%
	transform: translateY(-50%)
	transition: top 0.1s linear
	&:hover
		cursor: text

.input-field
	margin: 0 0 10px
	&.active
		margin: 0 0 30px

.form-input
	background-color: transparent
	border: none
	padding: 0px
	width: 100%
	&:focus
		outline: none

//--- BORDER AT THE TOP --------//
.input-field.border-top
	background-color: #434343
	padding: 10px
	position: relative
	cursor: text
	&:hover > label
		color: rgba(255,255,255,0.3)
	
	//--- ACTIVE STATIE --- //
	&.active
		padding: 10px 10px 20px
		.input-label
			background-color: pink
			color: #fff
			text-transform: uppercase
			font-weight: bold
			font-size: 10px
			width: 100%
			left: 0px
			padding: 10px
			top: 0
			transform: none
			&:hover
				cursor: default
	
		.form-input
			margin-top: 40px

//--- BORDER AT THE BOTTOM --------//
.input-field.border-bottom
	background-color: #fff
	border: 1px solid orange
	padding: 10px
	position: relative
	cursor: text
	&:hover > label
		color: rgba(255, 166, 0, 0.5)

	.form-input,
	.input-label
		color: #ffa500
		font-weight: normal
		font-size: 20px
	
	// ACTIVE STATIE
	&.active
		padding: 10px

		.input-label
			background-color: #ffa500
			color: #fff
			text-transform: uppercase
			font-weight: bold
			font-size: 10px
			width: 100%
			left: 0px
			padding: 5px
			top: initial // Override generic 
			bottom: 0
			transform: none
			&:hover
				cursor: default
	
		.form-input
			margin-bottom: 20px

//--- TEXT INLINE AT THE TOP --------//
.input-field.top-inline
	background-color: transparent
	border: 1px solid #434343
	padding: 10px
	position: relative
	cursor: text
	&:hover > label
		color: rgba(0,0,0,0.2)
	
	.form-input,
	.input-label
		color: #434343
		font-weight: normal
		font-size: 20px
	
	// ACTIVE STATIE
	&.active
		padding: 10px

		.input-label
			background-color: #fff
			color: #434343
			text-transform: uppercase
			font-weight: bold
			font-size: 10px
			width: auto
			left: 10px
			padding: 0px 10px
			top: -5px
			transform: none
			&:hover
				cursor: default

//--- TEXT INLINE AT THE BOTTOM ---------//
.input-field.bottom-inline
	background-color: transparent
	border: 1px solid pink
	padding: 10px
	position: relative
	cursor: text
	&:hover > label
		color: rgba(255, 192, 203, 0.5)
	
	.form-input,
	.input-label
		color: pink
		font-weight: normal
		font-size: 20px
	
	// ACTIVE STATIE
	&.active
		padding: 10px

		.input-label
			background-color: #fff
			color: pink
			text-transform: uppercase
			font-weight: bold
			font-size: 10px
			width: auto
			right: 10px
			padding: 0px 10px
			top: initial // Override generic
			bottom: -5px
			transform: none
			&:hover
				cursor: default
              
            
!

JS

              
                var placeholder = {

	init: function(){
		var me = this;
		
		me.enhance(function(){
			me.bindEvents();	
		});
		
	},
	
	enhance: function( callback ){
		var scope 	= $("body");
		var labels 	= scope.find(".input-label");
		
		labels.each(function(){
			var label 	= $(this);
			var text 	= label.data("empty-input");
			label.text( text );
		});
		
		callback();
		
	},
	
	bindEvents: function(){
		var me 				= this;
		var scope 			= $("body");
		var fieldWrappers = scope.find(".input-field");
		var inputs 			= scope.find(".form-input");
		var placeholder 	= fieldWrappers.find(".input-label");
	
		fieldWrappers.on("click", function(){
			$(this).find( inputs ).focus();			
		});
		
		inputs.focusin(function(){
			var input 			= $(this);
			var fieldWrapper 	= input.parent();			
			var placeholder	= fieldWrapper.find(".input-label")
		});
		
		inputs.on("keydown", function(){
			var input 			= $(this);
			var fieldWrapper 	= input.parent();
			var label			= fieldWrapper.find(".input-label")
			var text 			= label.data("filled-input");
		
			fieldWrapper.addClass("active");
			label.text(text);
		});
		
		inputs.focusout(function(){
			var input 			= $(this);
			var fieldWrapper 	= input.parent();
			var label 			= fieldWrapper.find(".input-label");
			var text 			= label.data("empty-input");
		
			if( input.val().length <= 0 ){
				fieldWrapper.removeClass("active");
				label.text( text ); // Reset to original text
			}

		});
		
	}
};

placeholder.init();
              
            
!
999px

Console