经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JSJS库框架 » jQuery » 查看文章
select 宽度跟随option内容自适应
来源:cnblogs  作者:_枪枪  时间:2018/11/16 10:19:34  对本文有异议

传统的select在没有设置固定宽度的情况,会因为自身的 option 选项的里,宽度最宽的option作为select本身的宽度

例如

可见效果为:

select的宽度因为“宽度最宽的option作为select本身的宽度”导致select变宽

但是这跟我们想要的select宽度跟随option内容自适应,相违背

解决方案:

很普遍的,大家会选择用JS来控制select的宽度。大概是判断option的内容长度,然后js控制select宽度

而这里讲的自适应,是做一个select的容器

大致的设计为:

主要是通过css+js来实现

红色框表示一个假的select容器DIV,DIV会因为,自身内容而自动宽度。
而我们要做的就是将蓝色框的真正select,做一个彻底透明和隐藏,当我们点击DIV的时候,其实点击的是select本身,由于select被透明化,所以我们会看到点击红色框DIV的时候,
出现option下拉列表的情况。

具体代码如下:

  1. <div class="fake-select">
  2. <select name="select">
  3. <option>测试</option>
  4. <option>测试</option>
  5. <option>测试</option>
  6. <option>我是最长的测试</option>
  7. </select>
  8. <div class="select-show-text">
  9. <div class="J-select-slot placeholder">默认值</div>
  10. </div>
  11. </div>
  1. .fake-select {
  2. position: relative;
  3. }
  4. .fake-select > select {
  5. width: 100%;
  6. height: 100%;
  7. left: 0;
  8. top: 0;
  9. position: absolute;
  10. background: transparent !important;
  11. color: transparent !important;
  12. z-index: 1;
  13. }
  1. function fake(opts){
  2. let {
  3. element = '.fake-select',
  4. slot = '.J-select-slot',
  5. } = opts;
  6. let select = $(element).find('select');
  7. select.on('change', function () {
  8. let $this = $(this);
  9. let val = $this.find('option:selected').val();
  10. let text = $this.find('option:selected').text();
  11. //$(this).siblings().find('.J-select-slot').text(val).removeClass('placeholder');
  12. })
  13. }
  14. fake({
  15. element: '.fake-select', //表示包围这个select的父元素
  16. slot: '.J-select-slot', //表示select值改变,将这个值放到那个容器里
  17. });
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号