JSFiddle - React, Tailwind, and code Playground

by pxfunc

HTML

<div class="jobs search mainbar">
    <form class="nice" method="GET" action="/search/">
        <div>
            <input type="hidden" name="ct" value="{{ query }}" />
            <div class="input-group">
                <div class="tag tag-input"></div>
                <input name="q" id="search" class="input-text" multiple="multiple" placeholder="Search..." autocomplete="on" value="" />
            </div>
            <button class="btn btn-success" type="submit">Search</button>
        </div>
    </form>
    <div class="keywords">
        <span style="color:#43474B; font-size: 12px;">Recent Searches:</span>
        <div class="left" style="width:80%">
            <div class="tag">
                <a href="#">Example</a>
            </div>
            <div class="tag">
                <a href="#">Test</a>
            </div>
            <div class="tag">
                <a href="#">Query</a>
            </div>
        </div>
    </div>
</div>

CSS

body, input {font-family:arial;}

.input-group {position:relative;display:inline-block;overflow:hidden;}
.tag-input {
    position:absolute;
    top:9px;
    left:2px;
    z-index:-1;
    color:#F4F4F4!important;
}

.input-text{
    word-spacing:13px;
    background:transparent;
    border:1px solid #ddd;
    padding: 10px 12px;
    outline: none !important;
    box-shadow: inset 0 3px 8px -6px #333;
    -moz-box-shadow: inset 0 3px 8px -6px #333333;
    -webkit-box-shadow: inset 0 3px 8px -6px #333;
    width:250px;
    min-width:250px;
}
.keywords{
    margin-top: 5px;
}
.tag{
    display: inline-block;
}

.input-text, .tag a {
    font-size: 14px;
    line-height: 13px;
    color:#333;
}

.tag a{
    cursor: pointer;
    text-decoration: none;
    -webkit-border-radius: 3px;
    -moz-border-radius: 3px;
    border-radius: 3px;
    -moz-background-clip: padding;
    -webkit-background-clip: padding-box;
    background-color: #E4E4E4;
    filter: progid:dximagetransform.microsoft.gradient(startColorstr='#f4f4f4', endColorstr='#eeeeee', GradientType=0);
    background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #F4F4F4), color-stop(50%, #F0F0F0), color-stop(52%, #E8E8E8), color-stop(100%, #EEE));
    background-image: -webkit-linear-gradient(top, #F4F4F4 20%, #F0F0F0 50%, #E8E8E8 52%, #EEE 100%);
    background-image: -moz-linear-gradient(top, #F4F4F4 20%, #F0F0F0 50%, #E8E8E8 52%, #EEE 100%);
    background-image: -o-linear-gradient(top, #F4F4F4 20%, #F0F0F0 50%, #E8E8E8 52%, #EEE 100%);
    background-image: -ms-linear-gradient(top, #F4F4F4 20%, #F0F0F0 50%, #E8E8E8 52%, #EEE 100%);
    background-image: linear-gradient(top, #F4F4F4 20%, #F0F0F0 50%, #E8E8E8 52%, #EEE 100%);
    -webkit-box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05);
    -moz-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
    box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05);
    border: 1px solid #AAA;
    padding: 3px 5px 3px 5px;
...

JavaScript

var $input = $('#search'),
    $tagInput = $('.tag-input');

$input.bind('input', function() {
    var inputValues = $input.val().trim().split(' ');
    console.log(inputValues);
    $tagInput.html('');
    if ($input.val().trim().length > 0) {
        for (var i in inputValues) {
            $tagInput.append('<a>' + inputValues[i] + '</a>');
        }
    }
    $input.width($tagInput.width());
});

$('.keywords .tag').click(function(e){
    e.preventDefault();
    var $this = $(this);
    $input.val(($input.val() + ' ' + $this.text().trim()).trim());
    $input.trigger('input');
});