簡體   English   中英

兩個在一個容器div中具有相等寬度的列表框

[英]Two listboxes with equal width in one container div

我嘗試在我的在線應用程序中創建復雜的控件。 控件有兩個列表框和兩個按鈕之間。 列表框的寬度(listbox-target,listbox-source)必須相等。 控制按鈕的寬度可以固定。 所有控制的高度也必須相等。 下面是HTMLJS代碼。

我試着用css做這個,但不能。 我寫了javascript來計算每個元素的寬度和高度。

Width of listbox-target = listbox-source = ('fullwidth of attributeref-two-listboxes' - 'width of control-buttons') / 2. 

它工作得很好,但必須每次從resize事件調用。 有時調整大小事件不會觸發,控件寬度也不會改變。

我想,最重要的是只用css制作這個,但是怎么樣?! 請幫忙!

function resizeAttributerefTwoListboxes() {
var is_ff = navigator.userAgent.toLowerCase().indexOf('firefox') > -1,
    is_ie = navigator.userAgent.toLowerCase().indexOf('MSIE') > -1 || /Trident.*rv[ :]*(\d+\.\d+)/.test(navigator.userAgent);
$("div.attributeref-two-listboxes div").removeAttr("style");
$("div.attributeref-two-listboxes").each(function(){
    var that = $(this),
        target = that.find(".listbox-target"),
        source = that.find(".listbox-source"),
        control = that.find(".control-buttons");
    if (this.offsetWidth < 420) {
        control.find('a[method="add"] > i').addClass("fa-angle-up").removeClass("fa-angle-left");
        control.find('a[method="remove"] > i').addClass("fa-angle-down").removeClass("fa-angle-right");
        target.css({"width":"100%"});
        control.css({"width":"100%"});
        control.children().css({"display":"inline-block"});
        source.css({"width":"100%"});
    } else {    //horizontal alignment
        control.find('a[method="add"] > i').addClass("fa-angle-left").removeClass("fa-angle-up");
        control.find('a[method="remove"] > i').addClass("fa-angle-right").removeClass("fa-angle-down");
        var w = Math.ceil((this.offsetWidth - control[0].offsetWidth - (is_ff || is_ie ? 2 : 1))/2);
        target.css({"width":w+"px"});
        source.css({"width":w+"px"});
        control.children().css({"height":(target[0].offsetHeight-20)+"px"}); //20 - paddings from top and bottom (10+10)
        control.css({"height":target[0].offsetHeight+"px"});
    }
});
}

<div class="attributeref-two-listboxes">
<div class="listbox-target" style="width: 549px;">
    <select id="Objectint_chg_management_change_user" acode="chg_management_change_user" atype="8" astyle="3" aislist="0" class="form-control tooltipstered" multiple="multiple" style="max-width: 750px;" size="4" name="Objectint[chg_management_change_user][]"></select>
</div>
<div class="control-buttons" style="height: 90px;">
    <div style="height: 70px;">
        <a class="btn btn-primary option mover" target="Objectint_chg_management_change_user" source="Objectint_chg_management_change_user_select" method="add" href="#">
            <i class="fa fa-angle-left"></i>
        </a>
        <a class="btn btn-primary option mover" target="Objectint_chg_management_change_user" source="Objectint_chg_management_change_user_select" method="remove" href="#">
            <i class="fa fa-angle-right"></i>
        </a>
    </div>
</div>
<div class="listbox-source" style="width: 549px;">
    <select id="Objectint_chg_management_change_user_select" acode="chg_management_change_user" atype="8" astyle="3" aislist="0" class="form-control" multiple="multiple" style="max-width: 750px;" size="4" name="[]">
        <option value="68">User 1</option>
        <option value="61">User 2</option>
        <option value="76">User 3</option>
    </select>
</div>

正確調整大小后,這是我的控制

在調整錯誤后,這是我的控制

使用float: leftmin-width

min-width應至少為元素的寬度。 如果該部分可以跨越頁面的整個寬度,使用960px並不是一個壞主意,因為它在大多數形狀因子(平板電腦,智能手機,PC,占1080p顯示器的1/2)中表現良好。

這樣你也可以避免使用display: inline-block ,這在舊瀏覽器中是不受支持的(盡管那個窗口不斷向前滑動,所以這些日子除了企業網絡應用程序之外都沒有太大的問題)。

 .attributeref-two-listboxes { min-width: 960px; overflow: hidden; font-size: 0; } .chooser { float: left; width: 300px; height: 100px; font-size: 14px; } .buttons { float: left; } .buttons input { width: 30px; height: 30px; background-color: rgb(34,131,203); color: #fff; border: 1px solid #333; display: block; margin: 13px 16px; font-size: 16px; } 
 <div class="attributeref-two-listboxes"> <select multiple size=4 class='chooser'> <option>Uno</option> <option>Dos</option> <option>Tres</option> </select> <div class='buttons'> <input type='button' value='&lt;' /> <input type='button' value='&gt;' /> </div> <select multiple size=4 class='chooser'> <option>Uno</option> <option>Dos</option> <option>Tres</option> </select> </div> 

Flex-box允許在某些情況下避免使用JS。

鏈接到jsfiddle

@media screen and (max-width: 500px) {
    .flex_container {
        flex-direction: column;
        flex-basis: 100%;
    }
.arrays_v {display : none}
.arrays_h {display : inline}    
}

我想我的解決方案對你有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM