【问题标题】:HTML dropdown multi columnsHTML 下拉多列
【发布时间】:2012-01-09 15:37:48
【问题描述】:

我对 HTML 中的选择有疑问。 现在我有 2 个带有值的下拉菜单。 例如:

<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>

现在我不想在 1 列中显示这些组,而是希望在不同的列中显示它们。这可能吗,而不需要对代码进行太多更改?

编辑 在两次得到相同的答案之后,这是不可能的,我会稍微改变这个问题。 是否可以制作自己的表单元素?例如,在 Actionscript、VB.Net、asp.Net 中,可以制作自己的元素。我知道您可以使用 CSS 更改布局,但这不是解决方案。 所以我想说的是,我只想根据一个选择为 HTML 制作自己的元素。

【问题讨论】:

  • 如何组织这些列?也就是说,这个数据表格如何?如果有人在这样的下拉列表中选择了一行,那两列应该是“选择”的那一列?我同意@EvilP 的回答,值得退一步考虑这些数据在表单上的真正含义以及应如何组织。
  • 这更有意义:

标签: html css forms drop-down-menu multiple-columns


【解决方案1】:

我想我找到了答案。 我的html代码:

<!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>

还有我的css代码

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

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

    }

-- 编辑-- 问题:IE 和 chrome 无法识别内联表。所以它不适用于那些浏览器。

【讨论】:

    【解决方案2】:

    据我所知,这是不可能的。但你可以让 2 个选择框彼此相邻!

    【讨论】:

    • 那行不通,因为我只是举了一个例子,但真正的下拉菜单有动态选项。所以你永远不知道会有多少物品。
    • 是的,如果它是动态创建选择列表的,并且如果有更多,那么假设您创建下一个选择列表的 20 个选项,如果还有 20 个选项要创建下一个!
    • 如果您有超过 200 条记录(有可能),您将有 10 个选择列表。我认为这有点过分了。但我想做的是让你自己选择一个表格。我知道您可以更改布局,但我想制作自己的选择列表。就像在 Flex、Vb.net、ASP.net 中一样,这是可能的,所以也许使用 javascript 和 php?
    • Javascript 和 php 没有任何共同之处。您可以使用 PHP 来传递您的数据,并使用 Javascript 来处理它,但 php 是服务器端的,而 javascript 是客户端的。你正在尝试做的事情是行不通的。我建议使用一个表并自己实现所有逻辑,但这将是一项艰巨的工作。
    【解决方案3】:

    如果其他人还在寻找这个:

            <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>
    

    小提琴:https://jsfiddle.net/schmidtc63/xu8zgpc9/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-23
      • 2016-04-04
      • 1970-01-01
      • 2011-05-20
      • 2019-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多