滚动条样式属性,以及去掉移动端滚动条解决方案

第一部分:

 ::-webkit-scrollbar         滚动条整体部分
 ::-webkit-scrollbar-thumb             滚动条里面的小方块,能上下左右移动(取决于是垂直滚动条还是水平滚动条)
 ::-webkit-scrollbar-track      滚动条的轨道(里面装有thumb)
 ::-webkit-scrollbar-button      滚动条轨道两端的按钮,允许通过点击微调小方块的位置
 ::-webkit-scrollbar-track-piece    内层轨道,滚动条中间部分(除去)
 ::-webkit-scrollbar-corner     边角,及两个滚动条的交汇处
 ::-webkit-resizer       两个滚动条的交汇处上用于通过拖动调整元素大小的小控件

任何对象都可以设置:边框、阴影、背景图片等等,创建的滚动条任然会按照操作系统本身的设置来完成其交互的行为。下面的伪类可以应用到上面的伪元素中。

:horizontal(horizontal伪类适用于任何水平方向上的滚动条)

:vertical(vertical伪类适用于任何垂直方向的滚动条)

:decrement(decrement伪类适用于按钮和轨道碎片。表示递减的按钮或轨道碎片,例如可以使区域向上或者向右移动的区域和按钮)

:increment(increment伪类适用于按钮和轨道碎片。表示递增的按钮或轨道碎片,例如可以使区域向下或者向左移动的区域和按钮)

:start(start伪类适用于按钮和轨道碎片。表示对象(按钮 轨道碎片)是否放在滑块的前面)

:end(end伪类适用于按钮和轨道碎片。表示对象(按钮 轨道碎片)是否放在滑块的后面)

:double-button(double-button伪类适用于按钮和轨道碎片。判断轨道结束的位置是否是一对按钮。也就是轨道碎片紧挨着一对在一起的按钮。)

:single-button(single-button伪类适用于按钮和轨道碎片。判断轨道结束的位置是否是一个按钮。也就是轨道碎片紧挨着一个单独的按钮。)

:no-button(no-button伪类表示轨道结束的位置没有按钮。)

:corner-present(corner-present伪类表示滚动条的角落是否存在。)

:window-inactive(适用于所有滚动条,表示包含滚动条的区域,焦点不在该窗口的时候。)

::-webkit-scrollbar-track-piece:start {
   /*滚动条上半边或左半边*/
}

::-webkit-scrollbar-thumb:window-inactive {
   /*当焦点不在当前区域滑块的状态*/

}

::-webkit-scrollbar-button:horizontal:decrement:hover {
   /*当鼠标在水平滚动条下面的按钮上的状态*/

}

参考 http://my.oschina.net/hehongbo/blog/205128

 

第二部分:去掉移动端滚动条解决方案

在移动端项目中往往我们会遇到宽度超出屏幕或父元素时可以左右滚动,在滚动的时候会出现左右的滚动条,这个根据设计要求有时候是不让显示的。

解决原理:ios无法直接让滚动条隐藏::-webkit-scrollbar {display: none;}是没有用的,所以我的思路就是让滚动条离远点超出父元素的范围,在通过隐藏父元素的超出部分让滚动条消失。

安卓手机:这个在安卓手机上可以直接按照我们正常的处理左右滚动的样式就可以实现或者加上::-webkit-scrollbar {display: none;}就可以,不用特意去考虑但是流畅度不好。

IOS:直接上代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<style>
body {width: 100%;overflow: hidden;}
* { margin: 0;padding: 0;}
.con {
    position: relative;
    width: 100%;
    /*height: 200px;*/ /*为了处理safari出现的滚动条*/
    overflow: hidden;/*把处理到元素外面的滚动条隐藏*/
}
.aa {
    /*height: 205px;*/ /*为了处理safari出现的滚动条*/
    position: relative;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;/*这个属性可以使滚动更流畅有左右弹动*/
    margin-top: -.3rem;
    padding-bottom: .3rem;
    -webkit-transform: translateY(0.3rem) !important;
    transform: translateY(0.3rem);
}
.bb {width: 1890px;}
.bb span {
    display: inline-block;
    width: 200px;
    height: 200px;
    background: #ccc;
    margin-right: 10px;
    float: left;
}
</style>
<body>
    <!-- 最少要有三层,在第三层放滚动的元素 -->
    <div class="con"><!-- 第一层必须要 有overflow: hidden-->
        <div class="aa"><!-- 第二层 处理盒子位置 进而把滚动条处理到元素下面(外面)以便隐藏滚动条-->
            <div class="bb"><!-- 第三层写具体的宽度-->
                <span>1</span>
                <span>2</span>
                <span>3</span>
                <span>4</span>
                <span>4</span>
                <span>6</span>
                <span>7</span>
                <span>8</span>
                <span>9</span>
            </div>
        </div>
    </div>
</body>
</html>

上面的代码在ios各个浏览器是没问题的,只是我在测试的时候发现在safari上还是会出现滚动条,于是我就强行加了个高度,给最外层以及滚动盒子都加了高度,滚动盒子的高度>最外层高度,那样就可以隐藏掉了。(这样处理的问题就在于强行给了高度,也会影响以后元素的位置)

posted @ 2017-10-30 11:11  小兔额乖乖  阅读(10840)  评论(0编辑  收藏  举报