SelectBoxIt插件与自定义CSS样式冲突问题求助
解决SelectBoxIt jQuery插件与自定义CSS的样式冲突问题
我帮你分析下问题的根源:你的自定义CSS中给#containerSelect设置了display: flex和flex-flow: row wrap,而SelectBoxIt插件动态生成的下拉选项容器会继承这个flex布局属性,导致原本应该垂直排列的选项变成了水平排列,空间不足时就出现了折叠的情况。
解决方案
你只需要添加一段CSS,强制覆盖插件下拉选项容器的flex布局属性,让它恢复默认的垂直排列:
/* 修复SelectBoxIt下拉选项的布局冲突 */ .selectboxit-container .selectboxit-options { display: block !important; flex-flow: initial !important; flex-direction: column !important; }
修改后的完整代码
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>JS Bin</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery.selectboxit/3.8.0/jquery.selectBoxIt.css" /> <style> body{ background: linear-gradient(0deg, rgba(100,100,100,1) 0%, rgba(165,165,165,1) 46%, rgba(186,186,190,1) 49%, rgba(205,205,208,1) 50%, rgba(222,218,218,1) 58%, rgba(221,221,221,1) 91%, rgba(181,182,182,1) 100%); height: 1080px; } nav{ background-color: turquoise; } ul{ list-style-type: none; display: flex; justify-content: space-between; align-items: center; width: 70%; margin: auto; padding-top:5%; } #containerInput{ display: flex; flex-flow: row wrap; justify-content: space-between; width: 40%; margin: auto; margin-top:10%; } input{ border: none; height: 160px; width: 220px; background-color: #0e3d73; color: white; font-size:2em; text-align: center; } #arrow{ margin-top:9%; } #arrow img{ height:50px; width:50px; } #containerSelect{ display: flex; justify-content: space-between; flex-flow: row wrap; width: 40%; margin: auto; margin-top:2%; } select{ width: 220px; height: 40px; } /* 新增的修复样式 */ .selectboxit-container .selectboxit-options { display: block !important; flex-flow: initial !important; flex-direction: column !important; } </style> </head> <body onload="convertDineroBottom()"> <div id="containerSelect"> <select id="from" onchange="convertDineroBottom()" > <option value="EUR" data-iconurl="https://upload.wikimedia.org/wikipedia/commons/b/b7/Flag_of_Europe.svg">EUR</option> <option value="USD" data-iconurl="https://cdn.countryflags.com/thumbs/united-states-of-america/flag-400.png">USD</option> <option value="GBP" data-iconurl="https://cmkt-image-prd.global.ssl.fastly.net/0.1.0/ps/221487/910/607/m1/fpnw/wm0/united-kingdom-flag-1-.jpg?1414512427&s=f16b2cb24fd704ffcf14b18ee18b5f4e">GBP</option> <option value="JPY">JPY</option> <option value="HKD">HKD</option> </select> <select id="to" onchange="convertDineroTop()"> <option value="GBP">GBP</option> <option value="EUR">EUR</option> <option value="USD">USD</option> <option value="JPY" selected>JPY</option> <option value="HKD">HKD</option> </select> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.selectboxit/3.8.0/jquery.selectBoxIt.min.js"></script> <script> function convertDineroBottom() { var fromCurrency = document.getElementById("from").value; var toCurrency = document.getElementById("to").value; fetch("https://api.exchangeratesapi.io/latest?base=" + fromCurrency) .then((resp) => resp.json()) .then(function(data){ (fromCurrency===toCurrency) ? document.getElementById("toQuantity").value = document.getElementById("fromQuantity").value : document.getElementById("toQuantity").value = data.rates[toCurrency]*document.getElementById("fromQuantity").value; }) .catch(function(error) { console.log(error); }); } function convertDineroTop() { var fromCurrency = document.getElementById("from").value; var toCurrency = document.getElementById("to").value; fetch("https://api.exchangeratesapi.io/latest?base=" + toCurrency) .then((resp) => resp.json()) .then(function(data){ (toCurrency===fromCurrency) ? document.getElementById("fromQuantity").value = document.getElementById("toQuantity").value : document.getElementById("fromQuantity").value = data.rates[fromCurrency]*document.getElementById("toQuantity").value; }) .catch(function(error) { console.log(error); }); } $(function() { var selectBox = $("select").selectBoxIt(); }); </script> </body> </html>
额外说明
如果你不想用!important,也可以调整#containerSelect的CSS,让flex布局只作用于原始的<select>元素,比如给两个select加个共同的类,然后用#containerSelect .select-class来设置flex子元素样式,这样插件生成的动态元素就不会继承flex布局了。不过上面的方案更直接,能快速解决问题。
内容的提问来源于stack exchange,提问作者silver_hoodlum
相关产品推荐
相关产品推荐

