CSS滚动条原理与自定义样式指南,CSS滚动条样式失效,滚动条样式无效,-webkit-scrollbar无效,overflow不显示滚动条

news/2025/2/25 17:18:25

滚动内容形成的必要条件

CSS Overflow属性解析

MDN官方文档-Overflow属性
菜鸟教程-Overflow属性

overflow 属性控制内容溢出元素框时在对应的元素区间内是否添加滚动条。

描述
visible默认值。内容不会被修剪,会呈现在元素框之外。
hidden内容会被修剪,并且其余内容是不可见的。
scroll内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。
auto如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。
inherit规定应该从父元素继承 overflow 属性的值。

⚠️ 重要注意事项:

  1. 仅对明确设置高度的块级元素生效
  2. MacOS系统默认隐藏滚动条(需滑动时才会显示,即使设置scroll值)

实现局部滚动需要满足两个核心条件:

  1. 容器具有确定的高度值(非auto)
  2. 设置overflow: scrolloverflow: auto

典型问题场景分析

<!DOCTYPE html>
<head>
  <style>
    * {
      margin: 0;
      padding: 0;
    }

    .nav {
      width: 100%;
      height: 64px;
      background: lightcoral;
    }

    .main {
      /*这里的100%应该为100vh*/
      height: calc(100% - 64px);
      background: lightblue;
    }

    .content {
      height: 1300px;
    }
  </style>
</head>

<body>
  <nav class="nav"></nav>
  <main class="main">
    <div class="content"></div>
  </main>
</body>
</html>

看起main被设置了高度,滚动条应该出现在main内,但实际运行会发现滚动条还是在body上的。

原因是:默认情况下,htmlbody 的高度由内容撑开,而非视口高度。

  • 当 .main 设置 height: calc(100% - 64px) 时,100% 继承的是 body 的高度,而 body 的高度此时等于其内容高度(即 .nav 的 64px + .main 的内容高度),形成循环依赖。

所以解决办法就是

  • 给body或html设定高度为100vh,
  • 或把height: calc(100% - 64px)100%设置为100vh

滚动条样式

浏览器兼容

目前(2025/2/20),推荐使用老的::-webkit-scrollbar属性

因为新的属性没有旧的能改的多,像是圆角和hover之类

  • scrollbar-color: initial;
  • scrollbar-width

⚠️注意:设置了新的scrollbar-color和scrollbar属性会覆盖老webkit属性,导致webkit属性失效

* {
  /* 平滑锚点跳转时的滚动 */
  scroll-behavior: smooth;
  /*谷歌121版本后的新属性与旧webkit-scrollbar冲突*/
  scrollbar-color: initial;
  scrollbar-width: initial;
}

/* 针对所有元素的Webkit内核浏览器滚动条进行全局样式设置 */
*::-webkit-scrollbar {
  height: 6px;    /* 水平滚动条的高度 */
  width: 6px;     /* 垂直滚动条的宽度 */
}

/* 隐藏滚动条两端的箭头按钮 */
*::-webkit-scrollbar-button {
  display: none;  /* 不显示滚动条按钮 */
}

/* 自定义滚动条滑块样式 */
*::-webkit-scrollbar-thumb {
  background-color: var(--scrollbar-color);  /* 使用CSS变量定义滑块颜色 */
  border-radius: 3px;                        /* 滑块圆角(半径是高度/宽度的一半) */
}

/* 鼠标悬停时滑块的样式变化 */
*::-webkit-scrollbar-thumb:hover {
  background-color: var(--scrollbar-hover-color);  /* 悬停时使用更醒目的颜色 */
}

/* 
注意事项:
1. 这些样式仅在Webkit内核浏览器生效(Chrome/Safari/Edge等)
2. --scrollbar-color 和 --scrollbar-hover-color 是CSS变量,需在根元素定义
3. 通过调整 width/height 值可以改变滚动条粗细
4. border-radius 设置为尺寸的一半会呈现胶囊形状
5. 通配符 * 表示应用于所有元素,可根据需要替换为特定选择器
*/

http://www.niftyadmin.cn/n/5865755.html

相关文章

FastExcel 实现数据分批次导入、导出

是基于 FastExcel 实现数据分批次导入和保存的完整解决方案&#xff0c;结合了高性能流式读取与分批处理机制&#xff1a; 一、环境准备 依赖配置 <dependency><groupId>cn.idev.excel</groupId><artifactId>fastexcel</artifactId><version&…

Java Set实现类面试题

Java Set实现类面试题 HashSet Q1: HashSet的实现原理是什么&#xff1f; HashSet是基于HashMap实现的&#xff0c;使用HashMap的key来存储元素&#xff0c;value统一使用一个Object对象。 public class HashSetPrincipleExample {// 模拟HashSet的基本实现public class Si…

bitcoinjs学习笔记2-P2SH

BitcoinJS 学习笔记 2 - P2SH 1.概述 1.1 P2SH 是什么&#xff1f; 1.1.1 定义&#xff1a;Pay to Script Hash P2SH 允许你将比特币发送到一个“脚本的哈希值”上&#xff0c;而不是像P2PKH直接发送到一个“公钥的哈希值”上即P2SH的地址的脚本的哈希值&#xff0c;而P2PKH的…

服务器能否拒绝非浏览器发起的HTTP请求?

互联网各领域资料分享专区(不定期更新): Sheet 前言 服务器可以采取多种方法来拒绝非浏览器发起的HTTP请求,但需要明确的是:HTTP协议本身并不限制客户端类型,任何符合协议规范的请求都会被处理。因此,拒绝非浏览器请求需依赖额外策略。 正文 一、基于请求头过滤 1、Us…

【备赛】点亮LED

LED部分的原理图 led前面有锁存器&#xff0c;这是为了防止led会受到lcd的干扰&#xff08;lcd也需要用到这些引脚&#xff09;。 每次想要对led操作&#xff0c;就需要先打开锁存器&#xff0c;再执行操作&#xff0c;最后关闭锁存器。 这里需要注意的是&#xff0c;引脚配置…

mysql 学习17 SQL 锁

概述 全局锁 通过全局锁 进行数据备份 表级锁 表锁 元数据锁 意向锁 原先 A线程 开启了一个事务&#xff0c;udpate id 3的数据&#xff0c;就会有一个行级锁&#xff0c;锁定第三行 这时候如果B线程要 lock tables 这个表 read&#xff0c;那么理论上就要锁定这一行表。 那…

8.spring对logback的支持

文章目录 一、入口二、源码解析LoggingApplicationListener 三、其它支持四、总结 本节以logback为背景介绍的 一、入口 gav: org.springframework.boot:spring-boot:3.3.4 spring.factories文件中有如下两个配置 org.springframework.boot.logging.LoggingSystemFactory\ …

【Java 8】Lambda表达式介绍

目录 1、Lambda简介 2、语法介绍 3、Lambda表达式示例 3.1、无参数的 Lambda 表达式 3.2、单个参数的 Lambda 表达式 3.3、多个参数的 Lambda 表达式 3.4、带语句块的 Lambda 表达式 4、Lambda使用场景 4.1、替代匿名内部类 4.2、集合操作 4.3、排序 4.4、函数式接口…