资讯专栏INFORMATION COLUMN

两种方式实现横向滚动条

番茄西红柿 / 611人阅读

摘要:前言在项目开发中,遇到了一个需求,实现一行上的导航栏过多使其产生横向滚动条。因为汉字和英文的不同,导致所占的宽度不一致,所以要留到个像素。

  前言:

  在项目开发中,遇到了一个需求,实现一行上的导航栏过多使其产生横向滚动条。一开始做项目,给的时间太短又着急,觉得网上有现成的,去搜发现没有,只好自己去写,一开始用的是平常css+js实现功能,之后学习了flex布局,所以又想到了用flex实现横向滚动条。两种方法,记录下来,供以后借鉴。

  正文: 

  两种方法各有各的好处,如果不考虑兼容性问题,还是用flex吧,毕竟还是喜欢那一句话:Write Less,Do More。哈哈

   html:

<div class="nav_wrap">
    <ul class="nav_mine">
        <li class="nav_item">全部li>
        <li class="nav_item">Adobeli>
        <li class="nav_item">微软li>
        <li class="nav_item">会计li>
        <li class="nav_item">绘画li>
        <li class="nav_item">Adobeli>
        <li class="nav_item">微软li>
        <li class="nav_item">会计li>
        <li class="nav_item">绘画li>
    ul>
div>
<script src="node_modules/jQuery/tmp/jquery.js">script>

 

  一 原始css + jquery 实现横向滚动条(原生js可以实现,为了方便才用的jQuery)

  css:

* {
    box-sizing: border-box;
    margin: 0;
    padding: 0
}
.nav_wrap{
    overflow-x: scroll;
}
.nav_mine {
    padding: 15px 10px;
    border-bottom: 1px solid #aca9a7;
    height: 75px;
    overflow-x: scroll;
    overflow-y: hidden;
}

.nav_mine .nav_item {
    border: 1px solid #1a110b;
    border-radius: 40px;
    color: #aca9a7;
    margin-right: 10px;
    font-size: 24px;
    padding: 4px 18px;
    float: left;
    list-style: none;
}

  js代码:

$(function(){
    var width = 0;
    for (let i = 0; i < $(.nav_item).length; i++) {
        width += $(.nav_item).eq(i).outerWidth(true);
    }
    $(.nav_mine).width(width+20);  //width只是内容的宽度,需要加上padding的宽度
})

    PS:为什么用js,是因为不知道tabs有多少个,不能把宽度写死,只能动态获取tabs的宽度,然后相加,获取总宽度,方便多次使用。outerWidth加上参数true,代表包含了padding+margin+border的宽度。

      

  二 css3  --  flex

  css:

* {
    box-sizing: border-box;
}

.nav_mine {
    padding: 15px 20px;
    border-bottom: 1px solid #aca9a7;
    height: 75px;
    display: flex;
    align-items: center;
    overflow-y: hidden;
    flex-wrap: nowrap;
}

.nav_mine .nav_item {
    border: 1px solid #aca9a7;
    border-radius: 40px;
    color: #aca9a7;
    margin-right: 22px;
    font-size: 24px;
    padding: 4px 18px;
    list-style: none;
    white-space: nowrap;
}

  

  对于white-space,item在没有用white-space:nowrap时,发现一个问题,在未设定宽度的情况下,一个单词不会换行,而汉字会换行,认为是和display:flex有关系,上网查阅,才知道:white-space是看空格来识别是否换行的,单词是作为一个字符,所以要针对于汉字和英文,都要设置white-space:nowrap不换行。因为汉字和英文的不同,导致所占的宽度不一致,所以要留1到2个像素。

 

  对应的笔记和实例,我放到了GitHub,https://github.com/sqh17/notes  如果想实践可以去clone下来。

  有什么问题请私信或留下评论,一起加油。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/2054.html

相关文章

  • 今天,你的浏览器 “滚动” 了吗?

    摘要:今天,你的浏览器滚动了吗序在页面中,一个有高度或者宽度的容器是最常见的构成元素,而在其中的子元素有很大的概率超过父容器的尺寸限制,我们称之为溢出。 今天,你的浏览器 滚动 了吗? 序 在 Web 页面中,一个有高度或者宽度的容器是最常见的构成元素,而在其中的子元素有很大的概率超过父容器的尺寸限制,我们称之为溢出。而应对溢出,隐藏或者滚动是最常见的处理方式。滚动,作为 FEers 最经常...

    leo108 评论0 收藏0
  • 今天,你的浏览器 “滚动” 了吗?

    摘要:今天,你的浏览器滚动了吗序在页面中,一个有高度或者宽度的容器是最常见的构成元素,而在其中的子元素有很大的概率超过父容器的尺寸限制,我们称之为溢出。 今天,你的浏览器 滚动 了吗? 序 在 Web 页面中,一个有高度或者宽度的容器是最常见的构成元素,而在其中的子元素有很大的概率超过父容器的尺寸限制,我们称之为溢出。而应对溢出,隐藏或者滚动是最常见的处理方式。滚动,作为 FEers 最经常...

    ad6623 评论0 收藏0
  • 微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动实现

    摘要:此时正确姿势如下变成这样子不让它换行到这里,就基本如我所愿了,大概长这样二隐藏滚动条在网上搜了很多,都是说加上这段代码就可以隐藏滚动条或者有的人说这样子隐藏滚动条然而两种方法我都试过,的滚动条依然存在。。 一、实践踩坑 项目使用mpvue开发 1. scroll-view默认是不滚动的。。所以要先设置scroll-x=true或者scroll-y=true showImg(https...

    wemall 评论0 收藏0
  • vueTable大数据展示优化

    摘要:懒加载方式常见的有淘宝一屏用元素占据一定的高度,然后再去拉图片数据。但这种方式还是需要元素占位,淘宝一页的数据量其实不算大,因为它结合了分页。 背景 showImg(https://segmentfault.com/img/bVbhSVh?w=1606&h=440);大数据项目根据用户输入代码查询数据,用户的代码不可控(比如select from db limit 5000),有可能...

    JasinYip 评论0 收藏0
  • 解决div出现横向滚动,背景色没铺满问题

    摘要:如图,初始情况,点击菜单后出现的文字长度超出原宽度,出现了滚动条注意设置才会出现滚动条,如果设成超出的文字会被隐藏,向右拉滚动条发现背景没铺满解决方式给最外层加样式说明注意是而不是,不然会出现其它错误。 问题描述(如图):div等块级元素默认宽度为100%,当页面渲染完后其宽度已经固定,这时候如果文字超出其宽度(如调用api后显示的结果),我们如果希望其出现滚动条,这时超过原宽度的部分...

    XBaron 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<