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

              
                form.search-form
    input.search(type="text" placeholder="City or State")
    ul.suggestions
        li Filter for a city
        li or a state
              
            
!

CSS

              
                    html {
        box-sizing: border-box;
        background: #ffc600;
        font-family: 'helvetica neue';
        font-size: 20px;
        font-weight: 200;
    }

    *,
    *:before,
    *:after {
        box-sizing: inherit;
    }

    input {
        width: 100%;
        padding: 20px;
    }

    .search-form {
        max-width: 400px;
        margin: 50px auto;
    }

    input.search {
        margin: 0;
        text-align: center;
        outline: 0;
        border: 10px solid #F7F7F7;
        width: 120%;
        left: -10%;
        position: relative;
        top: 10px;
        z-index: 2;
        border-radius: 5px;
        font-size: 40px;
        box-shadow: 0 0 5px rgba(0, 0, 0, 0.12), inset 0 0 2px rgba(0, 0, 0, 0.19);
    }


    .suggestions {
        margin: 0;
        padding: 0;
        position: relative;
        /*perspective:20px;*/
    }

    .suggestions li {
        background: white;
        list-style: none;
        border-bottom: 1px solid #D8D8D8;
        box-shadow: 0 0 10px rgba(0, 0, 0, 0.14);
        margin: 0;
        padding: 20px;
        transition: background 0.2s;
        display: flex;
        justify-content: space-between;
        text-transform: capitalize;
    }

    .suggestions li:nth-child(even) {
        transform: perspective(100px) rotateX(3deg) translateY(2px) scale(1.001);
        background: linear-gradient(to bottom, #ffffff 0%, #EFEFEF 100%);
    }

    .suggestions li:nth-child(odd) {
        transform: perspective(100px) rotateX(-3deg) translateY(3px);
        background: linear-gradient(to top, #ffffff 0%, #EFEFEF 100%);
    }

    span.population {
        font-size: 15px;
    }


    .details {
        text-align: center;
        font-size: 15px;
    }

    .hl {
        background: #ffc600;
    }

    .love {
        text-align: center;
    }

    a {
        color: black;
        background: rgba(0, 0, 0, 0.1);
        text-decoration: none;
    }
              
            
!

JS

              
                let cities = []
const endpoint = 'https://gist.githubusercontent.com/Miserlou/c5cd8364bf9b2420bb29/raw/2bf258763cdddd704f8ffd3ea9a3e81d25e2c6f6/cities.json'

// Step1: Fetch Data
fetch(endpoint)
.then(blob => blob.json())
.then(data => {
    cities = data
})

// Step2: 找到對應使用者輸入內容的陣列
function findMatch (wordToMatch, cities) {
    return cities.filter(place => {
        /**
         * g: global search
         * i: case insensitive search
         **/
        let regex = new RegExp(wordToMatch, 'gi')
        return place.city.match(regex) || place.state.match(regex)
    })
}

// snippet: 把數字加上逗號
function numberWithCommas(x) {
    return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}

// Step3: 監聽使用者輸入的內容並回傳結果
function displayMatch (e) {
    // Step 3-1: 取得配對到的內容
    let matchArray = findMatch(e.target.value, cities)
    // Step 3-2: 把被配到的陣列內容改成 html
    let html = matchArray.map(place => {
        let regex = new RegExp(e.target.value, 'gi')
        let cityNameHighlight = place.city.replace(regex, `<span class="hl">${e.target.value}</span>`)
        let stateNameHighlight = place.state.replace(regex, `<span class="hl">${e.target.value}</span>`)
        return `<li>
            <span class="name">${cityNameHighlight}, ${stateNameHighlight}</span>
            <span class="population">${numberWithCommas(place.population)}</span>
        </li>`
    })
    // step 3-3: 添加到 dom 中
    suggestions.innerHTML = html.join('')
}

const searchInput = document.querySelector('.search');
const suggestions = document.querySelector('.suggestions');

searchInput.addEventListener('input', e => {
    displayMatch(e)
})

              
            
!
999px

Console