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

              
                #loginBox
    .firstName
        h4 First Name
        .firstNameIcon.icon
            i.fa.fa-user.fa-2x(aria-hidden='true')
        input(name="firstName" type="text")
    .lastName
        h4 Last Name
        .lastNameIcon.icon
            i.fa.fa-user.fa-2x(aria-hidden='true')
        input(name="lastName" type="text") 
    .language
        h4 Language
        .languageIcon.icon
             i.fa.fa-language.fa-2x(aria-hidden='true')
        .styleSelect
            select#lang
                option(value="en") English
                option(value="zh") 中文
    button.button →
#login
    .close 
        span.closeButton x
    p.msg
    span.blink
              
            
!

CSS

              
                $iconBox: 40px
$loginBoxWidth: 380px
$colorPurple: #B993D6
$colorBlue: #8CA6DB
$colorRed: rgb(186, 49, 80)
*
    // border: 1px solid

body, html
    margin: 0
    box-sizing: border-box
    padding: 15px
    background: linear-gradient(to left, $colorPurple , $colorBlue)
    width: 100%
    height: 100%
    display: flex
h4
    margin: 0
    padding: 30px 40px 0px 50px
    opacity: 0.5
#loginBox
    width: $loginBoxWidth
    margin: auto
    position: relative
    z-index: 1
    padding-bottom: 40px
    border-radius: 8px
    background-color: #EEE
    padding: 20px 20px 60px
    box-shadow: 0 0 10px #777
    transition: 0.5s
    &:hover
        background-color: #FFF
    
.icon
    width: $iconBox
    height: $iconBox
    text-align: center
.icon, input, .styleSelect
    display: inline-block
    vertical-align: bottom
input
    margin-bottom: 5px
    margin-left: 10px
    width: calc(90% - #{$iconBox})
    height: 27px
    border: 0px solid 
    border-bottom: 2px solid rgba($colorPurple, 0.3)
    outline: none
    transition: 0.3s
    font-size: 20px
    background-color: transparent
    &:focus
        border-color: $colorPurple
    &.warn
        border-bottom-color: $colorRed
.styleSelect
    margin-top: 15px
    margin-left: 5px
    margin-bottom: 5px
    background: url(http://i62.tinypic.com/15xvbd5.png) no-repeat 96% 0
    height: 32px
    overflow: hidden
    width: calc(95% - #{$iconBox})
    border: 1px solid $colorPurple
    #lang
        background: transparent
        border: none
        font-size: 14px
        height: 32px
        padding: 5px
        width: 150%
.button
    border-radius: 50%
    background-color: $colorRed
    color: white
    position: absolute
    width: 50px
    height: 50px
    right: 20px
    font-size: 22px
    bottom: -18px
    border: none
    cursor: pointer
    box-shadow: 0 0 10px #777
    
#login
    position: absolute
    width: 50%
    height: auto
    left: 50%
    top: 50%
    transform: translate(-50%, -50%)
    z-index: 3
    background-color: #EFEFEF
    padding: 20px 20px 60px
    box-shadow: 0 0 10px #777
    transition: 0.5s
    border-radius: 10px
    display: none
    .close
        text-align: right
        box-sizing: border-box
        margin-bottom: 10px
        .closeButton
            font-size: 40px
            display: inline-block
            cursor: pointer
            width: 40px
            height: 40px
            line-height: 30px
            text-align: center
    p
        width: 100%
        margin: 0 auto
        font-size: 20px
        padding-right: 0.1em
        height: 100%
        display: inline
    .active
        border-right: 2px solid #333
              
            
!

JS

              
                // Constructor
let greetr = function(firstName, lastName, language) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.language = language;
}
greetr.prototype = {
    greeting: function() {
        if (this.language === "en") {
            return "Hello, " + this.firstName + ' ' + this.lastName;
        } else {
            return "你好, " + this.firstName + ' ' + this.lastName;
        }
    }
}

//  Add TypeWritter Effect
let count = 0;
let blink = function() {
    if (count == 0) {
        $('.blink').addClass('active');
        count = 1;
    } else {
        $('.blink').removeClass('active');
        count = 0;
    }
}
let end = 0;
let typeWriter = function(msg) {
    blink();
    end++;
    $('.msg').html(msg.substr(0, end));
    if (end == msg.length + 1) clearInterval(clock);
    blink();
}

//  Check InputValue
let checkInputVal = function(el) {
    $(el).focus().addClass('warn');
    $(el).blur(function() {
        if ($(this).val()) {
            $(this).removeClass('warn');
        };
    })
}

let guest, clock, blinkr, firstName, lastName, language, msg;
$("#loginBox").on('click', ".button", function() {
    firstName = $('input[name=firstName]').val();
    lastName = $('input[name=lastName]').val();
    language = $("#lang").val();

    if (firstName && lastName) {
        guest = new greetr(firstName, lastName, language);
        msg = guest.greeting();
        $("#loginBox").hide();
        $("#login").show();
        clock = setInterval(typeWriter, 100, msg);
        blinkr = setInterval(blink, 500);
    } else {
        if (!firstName) {
            checkInputVal('input[name="firstName"]');
        } else if (!lastName) {
            checkInputVal('input[name="lastName"]');
        };

    }
})

$('.closeButton').on('click', function() {
    $("#loginBox").show();
    $("#login").hide();
    $('.msg').html('');
    clearInterval(blinkr);
    clearInterval(clock);
    end = 0;
})

//  for debug

// $("#loginBox").hide();
// $("#login").show();
// let msg = "Lorem Ipsum is simply dummy text of the printing ";
// let clock = setInterval(typeWriter, 50, msg);
// let blinkr = setInterval(blink, 500);

              
            
!
999px

Console