首页 > 其他分享 >裁剪的3种方式,CSS 如何隐藏移动端的滚动条?

裁剪的3种方式,CSS 如何隐藏移动端的滚动条?

时间:2024-06-05 15:54:59浏览次数:12  
标签:clip 裁剪 滚动条 10px overflow 隐藏 CSS

在移动端开发中,经常会碰到需要横向滚动的场景,例如这样的

但很多时候是不需要展示这个滚动条的,也就是这样的效果,如下

你可能想到直接设置滚动条样式就可以了,就像这样

::-webkit-scrollbar {
  display: none;
}

目前来看好像没什么问题,但在某些版本的 iOS 上却无效(具体待测试),滚动条仍然出现。

那有没有其他方式可以解决这个问题呢?下面介绍几个方法

一、通过 overflow 隐藏

既然有时候修改滚动条样式无法解决,我们可以想办法把它隐藏。

下面是一个横向滚动列表

<div class="list">
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
</div>

简单修饰一下,让这个列表可以横向滚动

.list{
  display: flex;
  overflow: auto;
  gap: 10px;
  padding: 10px;
}
.item{
  width: 100px;
  height: 100px;
  background: royalblue;
  border-radius: 8px;
  flex-shrink: 0;
}

效果如下

通过overflow隐藏的方式很简单,我们需要一个父级

<div class="wrap">
  <div class="list">

  </div>
</div>

然后,将列表底部padding设置的稍微大一些,比如

.list{
  /**/
  padding-bottom: 20px;
}

可以看到列表下方的距离变大了,滚动条也更靠下了,效果如下

如何让整体尺寸仍然保持原有呢?答案是借助负margin,比如之前底部padding10,现在改成了20,所以需要-10margin

.list{
  /**/
  margin-bottom: -10px;
}

这样整体尺寸就正常了,不过滚动条仍然是可见的,只是出去了

最后只需要设置父级的 overflow为隐藏就可以了

.wrap{
  /**/
  overflow: hidden;
}

原理示意如下

这样就完美隐藏了滚动条

当然,不仅仅是 overflow,下面这种方式也可以实现超出隐藏

.wrap{
  /**/
  contain: paint;
}

这个属性比较新,可以控制元素在容器内的绘制规则,了解一下即可

https://developer.mozilla.org/zh-CN/docs/Web/CSS/contain

二、通过 clip 裁剪

第一种方式需要借助父级的超出隐藏,需要额外一层,好像有点麻烦,有没有办法自身也可以裁剪呢?

那就是 clip-path

https://developer.mozilla.org/zh-CN/docs/Web/CSS/clip-path

相信大家对这个属性应该很熟练了,非常直观的裁剪属性。

比如这种情况,只需要把滚动条的那一部分裁剪掉就可以了,这里要用到clip-pathinset方法

clip-path: inset()

这里简单介绍一下。inset最多可以传4个参数,分别表示裁剪掉距离上、右、下、左的部分

所以,要把滚动条隐藏就很简单了,只需要把下方的裁剪距离设置大于滚动条尺寸的值就行了,这里就用10px

.list{
  clip-path: inset(0 0 10px)
}

效果如下

一行代码轻松解决\~

三、通过 mask 遮罩

其实和 clip思路是一致的,只不过实现方式不一样。

关于 mask 遮罩,之前在多篇文章中都有提到,非常使用的小技巧,主要原理是显示遮罩图片不透明的部分,透明的则会被裁剪,示意如下

回到这里,我们只需要绘制一个不包含滚动条部分的纯色渐变就行了,可以直接绘制一个纯色渐变,然后设置背景尺寸,如下

.list{
  -webkit-mask: linear-gradient(red, red) 0 0/100% calc(100% - 10px) no-repeat;
}

原理示意如下

也能很好的隐藏滚动条

除此以外,mask 还可以很好的实现滚动边界渐隐的效果,只需要叠加一层从透明→纯色→透明的渐变就行了

.list{
  -webkit-mask: linear-gradient(to right, transparent, red 15px calc(100% - 15px), transparent),  
  linear-gradient(red, red) 0 0/100% calc(100% - 10px) no-repeat;
  -webkit-mask-composite: source-in;
}

就可以得到这样的效果

由于是遮罩实现,并不是简单的颜色覆盖,所以换一种背景颜色也可以很好的融合

四、总结一下

以上共介绍了 3 种方式来隐藏滚动条,各有千秋

  1. overflow兼容性最好,也最直观,符合大多数人思路,缺点是需要单独嵌套一层父级
  2. clip实现最简洁,也比较好理解,在本案例中最为推荐
  3. mask思路和clip,实现起来稍微复杂一点,还可以实现更为复杂的渐隐效果,能够掌握更好

标签:clip,裁剪,滚动条,10px,overflow,隐藏,CSS
From: https://www.cnblogs.com/moranjl/p/18096102

相关文章

  • Css var 的基础使用
    Cssvar语法var(custom-property-name,value)-custom-property-name必须变量必须以--开头后面可以是英文、数字连接符,区分大小写-value不必须默认值当custom-property-name不存在时使用优先级style>id>class>tag>*>:root伪类:root相当于文档根元......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript美食网站(甜品)
    HTML+CSS+JS【美食网站】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript个人网站(图书爱好)
    HTML+CSS+JS【个人网站】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......
  • 弹窗中的vxe-table的横向滚动条不灵敏
    问题:弹窗是基于el-dialog封装的,里面嵌套了vxe-table,开发过程中没发现不灵敏最近才发现切换点击详情弹窗时有时候点击空白点不中,拖中也拖动不了定位问题:1.可能是z-index层级问题造成了遮挡,F12调整层级没效果2.当F12调整时.el-scrollbar__bar.is-horizontal里面有个样式positi......
  • :empty 选择器在 css 中不起作用
    我在.error类中使用了:empty选择器。问题是,即使在带有error类的div中没有内容,error类也不会被完全删除。当我在firebug中进行测试时,我发现div中仍有一些空白,而当我删除这些额外的空格时,div就会消失。.error{border:solid1px#ff0000;color:#ff......
  • 【vue+css】实现叠层轮播图切换组件
    halo,小伙伴们,当我们需要开发一个自定义样式的叠层轮播图切换组件,在AntDesign或elementUI都没有满意的,我们是不是会考虑自己写一个,如下图所示的:笔者这次带来的支持左右切换循环切换、自动切换,话不多说,上代码:新建一个页面文件为carouselImg.vue,编写如下:<template><div......
  • css网格布局
    CSS网格布局网格是一组相交的水平线和垂直线,它定义了网格的列和行。CSS提供了一个基于网格的布局系统,带有行和列,可以让我们更轻松地设计网页,而无需使用浮动和定位。以下是一个简单的网页布局,使用了网格布局,包含六列和三行:  »浏览器支持目前最新的一些浏览器版本......
  • [CSS] Animate A Card's Width on Hover with Flexbox
    ThecardsontheDJIsitehaveaneffectwherethehoveredcardexpandsandtheothercardsshrink:Inordertoemulatethiseffectwe'lluseFlexbox.We'llstartbyaddingtheclasses flex-1 and hover:grow-[2] tothe li element,andremovingt......
  • [CSS] Use CSS Grid to Animate Elements with Dynamic Height
    Currentlyweareanimatingtoafixedheightof100pxonhoversincebrowserscan'tanimatefrom0to auto:<pclass="h-0overflow-hiddentext-white/70transition-allgroup-hover:h-[100px]"> Loremipsumdolorsit,ametconsecteturad......
  • 如何使用 css 变量来包含与另一个变量一起使用的混合颜色
    我在css(由sass生成)中创建了名为--secondary的变量,其值为red(#f00)我想为不透明度创建更多变量,如--secondary-100和--secondary-90。我想为不透明度创建更多变量,如--secondary-100,--secondary-90......