select 宽度跟随option内容自适应

传统的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下拉列表的情况。

具体代码如下:

<div class="fake-select">
    <select name="select">
        <option>测试</option>
        <option>测试</option>
        <option>测试</option>
        <option>我是最长的测试</option>
    </select>
    <div class="select-show-text">
        <div class="J-select-slot placeholder">默认值</div>
    </div>
</div>                                        
.fake-select {
    position: relative;
}
.fake-select > select {
    width: 100%;
    height: 100%;
    left: 0;
    top: 0;
    position: absolute;
    background: transparent !important;
    color: transparent !important;
    z-index: 1;
}
function fake(opts){
    let {
      element = ‘.fake-select‘,
      slot = ‘.J-select-slot‘,
    } = opts;
    let select = $(element).find(‘select‘);
    select.on(‘change‘, function () {
      let $this = $(this);
      let val = $this.find(‘option:selected‘).val();
      let text = $this.find(‘option:selected‘).text();
      //$(this).siblings().find(‘.J-select-slot‘).text(val).removeClass(‘placeholder‘);
    })
  }

fake({
      element: ‘.fake-select‘,     //表示包围这个select的父元素
      slot: ‘.J-select-slot‘,        //表示select值改变,将这个值放到那个容器里
    });

原文地址:https://www.cnblogs.com/sheep-sheep/p/9964026.html

时间: 2024-10-08 13:45:29

select 宽度跟随option内容自适应的相关文章

CSS如何实现div宽度根据内容自适应

在实际应用中,可能有这样的需求,那就是需要div根据内容进行宽度自适应.有很多开发者可能误以为如果不设定div的宽度就可以实现宽度随内容自适应,其实这是错误的,因为在默认状态下,div的宽度值是百分之百,也就是会占满整个父元素宽度.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content=&qu

IE8 下 select option 内容过长 , 展开时信息显示不全解决办法

1 IE8 下 select option 内容过长 , 展开时信息显示不全 , 简单折衷的方式就是给 option 加上 title 属性 , 2 但是又不想一个个的修改,怎么办呢,代码如下 : 3 4 //select option bind title 5 $(document).delegate('select', 'mouseover', function() 6 { 7 var $this = $(this); 8 if($this.data('data-bind-title'))

margin+absolute布局:右栏固定主内容自适应 demo

margin+absolute布局:右栏固定主内容自适应 demo 头部 Aside侧边栏区域 Main主内容区域 底部 #demo{width:80%;margin:auto;height:300px;} #hd2,#ft2{height:50px;background-color:#aaa;} #bd2{position:relative;margin:10px 0;} #aside2{position:absolute;top:0;right:0;width:200px;backgroun

下拉框&mdash;&mdash;把一个select框中选中内容移到另一个select框中遇到的问题

在使用jQuery实现把一个select框中选中内容移到另一个select框中功能时遇到了一个问题,就是点击按钮时内容可以到另一个select框中,但是到了另一个select框中的内容却很快闪退回原来的select框中,代码如下:                  <select class="select1" name="select1" multiple="multiple">                     <op

jquery新增,删除 ,修改,清空select中的option

jQuery获取Select选择的Text和Value: 1. var checkText=jQuery("#select_id").find("option:selected").text(); //获取Select选择的Text 2. var checkValue=jQuery("#select_id").val(); //获取Select选择的option Value 3. var checkIndex=jQuery("#sele

select保留选中option

1 $("#bankAreaCode").val(areacode); 2 var _option =$("#bankAreaCode").find("option:selected"); 3 $("#bankAreaCode").empty(); 4 $("#bankAreaCode").append("<option value='"+_option.val()+"'

ios-UILabel居中随内容自适应,后面的控件跟在其后

如图绿蓝框所示,UILabel显示名字,Label框随名字长短而自适应,后面的性别图片跟在其后显示 分两部分:第一部分先布局 //名字 self.nameLab = [[UILabel alloc]initWithFrame:CGRectMake(0, 200, SCREEN_WIDTH, 20)]; self.nameLab.textColor = [UIColor whiteColor]; self.nameLab.font = [UIFont fontWithName:@"Helvetic

常用布局-列宽度是固定宽度还是自适应

如何去理解一个页面需要仔细分析,页面结构形式再怎么变化,最终都还是基于两列布局结构的演变. 不同布局之间最大的区别是:列宽度是固定宽度还是自适应      布局思路:主要利用浮动和定位方式,借助负边距 宽度值与浮动的关系: 盒模型宽度默认auto,宽度撑满浏览器窗口宽度或其父级宽度,拥有padding和margin值及宽度默认值auto时盒模型的宽度大小始终保持在浏览器窗口或父级所显示的范围内. 盒模型宽度默认auto加上float时,盒模型的宽度由内容撑开.只能添加具体的width值保证盒模型

Jquery获取select选中的option的文本信息

注意:下面用的$(this)代表当前选中的select框 第一种: $(this).children("option:selected").text(); 第二种: $(this).children("option:selected").html(); Jquery获取select选中的option的文本信息,布布扣,bubuko.com