user993177
user993177

Reputation: 188

HTML dropdown multi columns

I have a question about a select in HTML. Now I have 2 dropdowns with values. for example:

<select name="healthy" id="healthy">
    <optgroup="fruit"></optgroup>
    <option value="apple">apple</option>
    <option value="pineapple">pineapple</option>
    <optgroup="vegetables"></optgroup>
    <option value="carrots">carrots</option>
    <option value="tomato">Tomato</option>
</select>

Now instead of showing these groups in 1 column, I would want to show them in different columns. Is that possible, without changing the code to much?

Edit After getting the same answer twice, that it's not possible, I will change this question a little. Is it possible to make your own form element? For example in Actionscript, VB.Net, asp.Net it's possible to make your own elements. I know you can change the layout with CSS, but that's not the solution. So what I try to say, I just want to make my own element for HTML, based on a select.

Upvotes: 1

Views: 8751

Answers (3)

Chris
Chris

Reputation: 788

In case anyone else is still looking for this:

        <style>
        .selectedOrder {
            height: 30px; 
            display:none; 
        }

    /* class applies to select element itself, not a wrapper element */
    .select-css {
        font-size: 12px;
        font-family: sans-serif;
        font-weight: 700;
        color: #444;
        line-height: 1.3;
        padding: .6em 1.4em .5em .8em;
        /* width: 100%; */
        max-width: 100%; /* useful when width is set to anything other than 100% */
        box-sizing: border-box;
        margin: 0;
        border: 1px solid #aaa;
        box-shadow: 0 1px 0 1px rgba(0,0,0,.04);
        border-radius: .5em;
        -moz-appearance: none;
        -webkit-appearance: none;
        appearance: none;
        background-color: #fff;
        /* note: bg image below uses 2 urls. The first is an svg data uri for the arrow icon, and the second is the gradient. 
            for the icon, if you want to change the color, be sure to use `%23` instead of `#`, since it's a url. You can also swap in a different svg icon or an external image reference
            
        */
        background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23007CB2%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E'),
          linear-gradient(to bottom, #ffffff 0%,#e5e5e5 100%);
        background-repeat: no-repeat, repeat;
        /* arrow icon position (1em from the right, 50% vertical) , then gradient position*/
        background-position: right .7em top 50%, 0 0;
        /* icon size, then gradient */
        background-size: .65em auto, 100%;
    }
    /* Hide arrow icon in IE browsers */
    .select-css::-ms-expand {
        display: none;
    }
    /* Hover style */
    .select-css:hover {
        border-color: #888;
    }
    /* Focus style */
    .select-css:focus {
        border-color: #aaa;
        /* It'd be nice to use -webkit-focus-ring-color here but it doesn't work on box-shadow */
        box-shadow: 0 0 1px 3px rgba(59, 153, 252, .7);
        box-shadow: 0 0 0 3px -moz-mac-focusring;
        color: #222; 
        outline: none;
    }

    /* Set options to normal weight */
    .select-css option {
        font-weight:normal;
    }

    /* Support for rtl text, explicit support for Arabic and Hebrew */
    *[dir="rtl"] .select-css, :root:lang(ar) .select-css, :root:lang(iw) .select-css {
        background-position: left .7em top 50%, 0 0;
        padding: .6em .8em .5em 1.4em;
    }

    /* Disabled styles */
    .select-css:disabled, .select-css[aria-disabled=true] {
        color: graytext;
        background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22graytext%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E'),
          linear-gradient(to bottom, #ffffff 0%,#e5e5e5 100%);
    }

    .select-css:disabled:hover, .select-css[aria-disabled=true] {
        border-color: #aaa;
    }
</style>

<div id="orderSelectContainer">
    <div id="selectedOrder" class="selectedOrder select-css" style="width: 533px; display: block;">
        <div class="currentSelectedOrder" data-value="45628" style="float: left;">
                <span style="float:left; min-width:200px;">Store 1</span>
                <span style="float:left; min-width:50px"> 55628</span>
                <span style="float:left; min-width: 150px;"> Quantity Discrepancy</span>
                <span style="float:left; min-width:100px">  </span>

        </div>
    </div>
    <div id="orderSelect" class="select-css" style="position: absolute; z-index: 1000; background-image: none; display: none;">
        <div class="orderContainer">
            <div class="order" data-value="45628" style="float: left; background: white;">
                <span style="float:left; min-width:200px;">Store 1</span>
                <span style="float:left; min-width:50px"> 55628</span>
                <span style="float:left; min-width: 150px;"> Quantity Discrepancy</span>
                <span style="float:left; min-width:100px">  </span>
            </div>
        </div>
        <div class="orderContainer">
            <div class="order" data-value="45536" style="float: left; background: lightblue;">
                <span style="float:left; min-width:200px;">Store 2</span>
                <span style="float:left; min-width:50px"> 55536</span>
                <span style="float:left; min-width: 150px;"> Quantity Discrepancy</span>
                <span style="float:left; min-width:100px"> Bad UPCs</span>
            </div>
        </div>
        <div class="orderContainer">
            <div class="order" data-value="45682" style="float: left; background: white;">
                <span style="float:left; min-width:200px;">Store 3</span><span style="float:left; min-width:50px"> 55682</span>
                <span style="float:left; min-width: 150px;"> Quantity Discrepancy</span>
                <span style="float:left; min-width:100px"> Bad UPCs</span>
            </div>
        </div>
        <div class="orderContainer">
            <div class="order" data-value="45625" style="float: left; background: white;">
                <span style="float:left; min-width:200px;">Store 4</span>
                <span style="float:left; min-width:50px"> 55625</span>
                <span style="float:left; min-width: 150px;"> Quantity Discrepancy</span>
                <span style="float:left; min-width:100px">  </span>
            </div>
        </div>
        <div class="orderContainer">
            <div class="order" data-value="45556" style="float: left; background: white;">
                <span style="float:left; min-width:200px;">Store 5</span>
                <span style="float:left; min-width:50px"> 55556</span>
                <span style="float:left; min-width: 150px;"> Quantity Discrepancy</span>
                <span style="float:left; min-width:100px"> Bad UPCs</span>
            </div>
        </div>
    </div>
    <br style="clear:both"><br>
</div>

<script>
    $(document).on(`click`, `.order`, function() {
        if ($(this).data(`value`) !== $(`#selectedOrder >.currentSelectedOrder`).data(`value`)) {
            $(`#orderContainer`).html(``);
        }
        $(`#selectedOrder`).html($(this).prop(`outerHTML`)).find(`.order`).removeClass(`order`).css(`background`, ``).addClass(`currentSelectedOrder`);
        $(`.order`).css(`background`, `white`);
        $(this).css(`background`, `lightblue`);
        $(`#selectedOrder`).show();
        $(`#orderSelect`).hide();
    });

    $(document).on(`click`, `#selectedOrder`, function() {
        //$(`#selectedOrder`).hide();
        $(`#orderSelect`).toggle();
    });

    $(document).on(`mouseenter`, `.order`, function() {
        $(`.order`).css(`background`, `white`);
        $(this).css(`background`, `lightblue`);
    });

    $(document).on(`mouseexit`, `.order`, function() {
        $(this).css(`background`, `white`);
    });
<script>

fiddle: https://jsfiddle.net/schmidtc63/xu8zgpc9/

Upvotes: 1

user993177
user993177

Reputation: 188

I think I found an answer. my html code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<link href="select.css" rel="stylesheet" type="text/css" />
</head>

<body>
<select name="sel" id="sel">
<optgroup label="group1">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</optgroup>
<optgroup label="group2">
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
</optgroup>
</select>
</body>
</html>

And my css code

@charset "utf-8";
/* CSS Document */

#sel{
    background-color:#FF0;
    width:40px;
    }
#sel optgroup{
    background-color:#CFF;
    display:inline-table;
    width:20px;

    }

-- edit -- problem: IE and chrome doesn't recognize inline-table. so it won't work on those browsers.

Upvotes: 2

mas-designs
mas-designs

Reputation: 7536

thats not possible as far as I know. But you could make 2 select boxes next to each other !

Upvotes: 0

Related Questions