整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

学会使用 CSS 自定义滚动条,能让你做的产品更有用户体验

定义滚动条现在越来越流行,很值得研究一翻。为什么需要自定义滚动?浏览器的默认的滚动条让UI在多个操作系统中看起来不一致,使用定义滚动我们可以统一风格。

我一直对如何在CSS中定制滚动条很感兴趣,但一直没有机会这样做。今天,我就记录一下自己的学习过程。

简介

首先需要介绍一下滚动条的组成部分。滚动条包含 trackthumb,如下图所示:

track是滚动条的基础,其中的 thumb是用户拖动支页面或章节内的滚动。

还有一件重要的事情要记住,滚动条可以水平或垂直地工作,这取决于设计。另外,在一个多语言网站上工作时,这一点也会发生变化,该网站在从左到右(LTR)和从右到左(RTL)两个方向上工作。

自定义滚动条设计

拥有一个自定义的滚动条曾经是webkit的专利,所以Firefox和IE被排除在游戏之外。我们有一种新的语法,只在Firefox中使用,当它被完全支持时,将使我们的工作更容易。我们先看一下旧的Webkit语法,然后再介绍新的语法。

旧的语法

滚动条的宽度

首先,我们需要定义滚动条的大小。这可以是垂直滚动条的宽度,也可以是水平滚动条的高度

.section::-webkit-scrollbar {
    width: 10px;
}

有了这一设置,我们就可以设置滚动条本身的样式。

滚动条 track

这代表了滚动条的基础。我们可以通过添加backgroundshadowsborder-radiusborder来对它进行造型。

.section::-webkit-scrollbar-track {
    background-color: darkgrey;
}

滚动条 thumb

准备好了滚动条的基础后,我们就需要对滚动条的thumb进行样式设计。这很重要,因为用户可能会拖动这个thumb与滚动条进行交互。

.section::-webkit-scrollbar-thumb {
    box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
}

至此,我们已经介绍了CSS中定制滚动条的老方法。让我们探索一下新的语法。

新语法

Scrollbar Width

正如它所说的,这定义了滚动条的宽度,有两个值autothin。不好的地方就是,我们不能像webkit的语法那样定义一个具体的数字。

.section {
  scrollbar-width: thin;
}

Scrollbar Color

有了这个属性,我们可以为滚动条 trackthumb定义成对值的颜色。

.section {
    scrollbar-color: #6969dd #e0e0e0;
    scrollbar-width: thin;
}

尽管这个新语法很简单,但它是有限制的。我们只能添加颜色。我们不能添加shadows``、gradientsrounded`,或任何类似的东西,我们被允许定制的只是颜色。

指定自定义滚动条的范围

要知道的一个重要问题是,在哪里定制滚动条。你希望样式是通用的,对网站上的所有滚动条都有效吗?还是你只想让它用于特定的部分?

使用旧的语法,我们可以编写选择器,而不必将它们附加到元素上,它们将应用于所有可滚动的元素。

::-webkit-scrollbar {
    width: 10px;
}

::-webkit-scrollbar-track {
    background-color: darkgrey;
}

::-webkit-scrollbar-thumb {
    box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
}

如果你想只适用于一个特定的部分,你需要在选择器之前附加元素。

.section::-webkit-scrollbar {
    width: 10px;
}

.section::-webkit-scrollbar-track {
    background-color: darkgrey;
}

.section::-webkit-scrollbar-thumb {
    box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
}

对于新的语法,它几乎是一样的。我注意到的是,如果你想要一个通用的样式,它应该被应用于<html>元素,而不是<body>

html {
    scrollbar-color: #6969dd #e0e0e0;
    scrollbar-width: thin;
}

我尝试为<body>添加上面的内容,但它没有像预期的那样工作。

现在我们知道了新旧语法的工作原理,接着,我们开始定制一些滚动条设计。

自定义滚动条设计

例1

在研究定制滚动条之前,值得讨论一下Mac OS中的默认样式。下面是它的外观。

  • 滚动条track 的左右两边都有边框,背景色为纯色。
  • 滚动条thumb是圆形的,左右两边都有空间。

对于Windows,它有点不同。

下面是我们根据上面的模拟图来定制滚动条。

.section::-webkit-scrollbar {
    width: 16px;
}
 
.section::-webkit-scrollbar-track {
    background-color: #e4e4e4;
    border-radius: 100px;
}
 
.section::-webkit-scrollbar-thumb {
    background-color: #d4aa70;
    border-radius: 100px;
}

trackthumb添加border-radius是必要的,因为它在::webkit-scrollbar上不起作用。

在新的语法中,我们不能调整滚动条的宽度,唯一能做的的是改变 trackthumb的背景颜色。

.section {
    scrollbar-color: #D4AA70 #e4e4e4;
}

例2

对于这个例子,设计有点重,因为它包含渐变和阴影。我们可以应用内部阴影和渐变来模仿这种效果。来看看怎么做!

.section::-webkit-scrollbar-thumb {
    background-image: linear-gradient(180deg, #D0368A 0%, #708AD4 99%);
    box-shadow: inset 2px 2px 5px 0 rgba(#fff, 0.5);
    border-radius: 100px;
}

示例地址:https://codepen.io/shadeed/pen/VwpOReG

例3

我们还可以为 thumbtrack添加边框,这可以帮助我们处理一些棘手的设计。

.section::-webkit-scrollbar-thumb {
    border-radius: 100px;
    background: #8070D4;
    border: 6px solid rgba(0,0,0,0.2);
}

基于同样的例子,我们可以重置顶部和底部边界为零,这样thumb获得一个有趣的效果。注意thumb顶部和底部的那些小元素。

示例地址:https://codepen.io/shadeed/pen/qBrGvOx

可以添加悬停效果吗?

我们可以为新旧语法的滚动条thumb添加悬停效果。

/* 旧语法 */
.section::-webkit-scrollbar-thumb:hover {
    background-color: #5749d2;
}

/* 新语法 */
.section {
    scrollbar-color: #d4aa70 #e4e4e4;
    transition: scrollbar-color 0.3s ease-out;
}

.section:hover {
    scrollbar-color: #5749d2;
}

需要时显示滚动条

创建一个可滚动的元素是可以通过给overflow属性添加一个除visible以外的值。建议使用auto关键字,因为它只在内容超过其容器时才会显示滚动条。

.section {
    overflow-y: auto;
}

可访问性问题

在定制滚动条设计时,请记住在 thumbtrack之间要有良好的对比,这样它就容易被用户注意。

考虑一下下面这个自定义滚动条的 "坏 "例子。

thumb 的颜色几乎看不出来。这对用户来说不是好事,因为如果他们习惯于通过thumb 滚动,这将增加他们的难度。


作者:ishadeed 译者:前端小智 来源:ishadeed

原文:https://ishadeed.com/article/custom-scrollbars-css/

情介绍


文章目录

  • 二、网站描述

  • 网站介绍

  • 四、网站演示

  • TML结构代码

  • 如何让学习不再盲目


  • 七、更多干货

题目


HTML静态网页设计作业使用dreamweaver制作,采用DIV+CSS布局,共有多个页面,首页使用CSS排版比较丰富,色彩鲜明有活力。顶部导航及底部区域背景色为100%宽度,主体内容区域宽度

一套优质的网页设计应该包含 (具体可根据个人要求而定)


  1. 页面分为页头、菜单导航栏(最好可下拉)、中间内容板块、页脚四大部分。

  2. 所有页面相互超链接,可到三级页面,有5-10个页面组成。

  3. 页面样式风格统一布局显示正常,不错乱,使用Div+Css技术。

  4. 菜单美观、醒目,二级菜单可正常弹出与跳转。

  5. 要有JS特效,如定时切换和手动切换图片轮播。

  6. 页面中有多媒体元素,如gif、视频、音乐,表单技术的使用。

  7. 页面清爽、美观、大方,不雷同。。

  8. 不仅要能够把用户要求的内容呈现出来,还要满足布局良好、界面美观、配色优雅、表现形式多样等要求。

<h

网站布局方面:计划采用目前主流的、能兼容各大主流浏览器、显示效果稳定的浮动网页布局结构。

网站程序方面:计划采用最新的网页编程语言HTML5+CSS3+JS程序语言完成网站的功能设计。并确保网站代码兼容目前市面上所有的主流浏览器,已达到打开后就能即时看到网站的效果。


网站素材方面:计划收集各大平台好看的图片素材,并精挑细选适合网页风格的图片,然后使用PS做出适合网页尺寸的图片。

网站文件方面:网站系统文件种类包含:网页结构文件、css网页样式文件、js网页特效文件、images网页图片文件;


网页编辑方面:网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad++ 等任意html编辑软件进行运行及修改编辑等操作)。
其中:
(1)html文件包含:其中index.html是首页、其他html为二级页面;


(2) css文件包含:css全部页面样式,文字滚动, 图片放大等;
(3) js文件包含:js实现动态轮播特效, 表单提交, 点击事件等等(个别网页中运用到js代码)。


<h



<h

HTML结构代码

<!--
* @Author: your name
* @Date: 2022-02-16 22:58:33
* @LastEditTime: 2022-02-16 22:58:54
* @LastEditors: your name
* @Description: 打开koroFileHeader查看配置 进行设置:
* @FilePath: 北京黎红学院 网页成品4页面\index.html

CSS样式代码

@charset "utf-8";body{ background:#fff;}.head{ width:100%; height:200px; margin:auto; background: url(../images/head_bj.png) top repeat-x #5d644a;}.head_in{ width:930px; height:200px; margin:auto; background: url(../images/head.png) top repeat-x #5d644a;}.head h1{ font-size:56px; line-height:158px; color:#900; text-align:center;}.nav{width:930px; height:40px; border:1px solid #646a52; margin:auto; background:#4c4d3d; }.nav ul{margin:auto;}.nav li{ height:30PX; float:left; padding:5px 20px;}.nav li a{ font-size:24px; color:#ccc; line-height:30px;}.nav li a:hover{ color:#362f2d;}.nav li:hover{ background:#fff}.nav li:hover a{ color:#362f2d;}.center{ text-align:center}.main{ width:100%; height:auto; min-height:500px; margin:auto;}.main_nav{width:940px; height:auto; margin:10px auto;}.main_nav li{ float:left; margin:10px; }.main_con{ width:100%; height:auto; min-height:300px; margin:auto;padding-top:20px; background:#006699;}.main_ad{ width:920px; height:260px; margin:auto; }.main_news{width:900px; height:auto; margin:auto; margin-top:10px; padding-bottom:20px;}.main_news h2{ font-size:26px; line-height:38px; color:#fff;}.main_news p{ font-size:14px; line-height:22px; color:#fff;}.main_news ul{padding-left:20px; }.main_news li{ padding-left:20px;}.main_news li a{ font-size:18px; line-height:32px; color:#fff; }.main_news li a:hover{ font-size:18px; line-height:32px; color:#ffd9b4; }.main_des{width:900px; height:auto; margin:auto; padding-bottom:50px; }.main_des h1{ font-size:28px; line-height:68px; color:#362f2d; text-align:center;}.main_des p{ font-size:16px; line-height:28px; color:#333; text-indent:2em;}.main_zhanshi{width:920px; height:auto; margin:auto;}.main_zhanshi li{ float:left; margin:10px;}.main_zhanshi img{ width:280px; height:200px;}.foot{ width:100%; height:90px; background:#600; margin:auto;text-align:center;}.foot_in{ width:960px; height:90px; padding-top:15px;margin:auto;text-align:center;}.foot_in p{ font-size:16px; line-height:26px; color:#fff; }*{ margin:0; padding:0; font-family:黑体; }.clear{ clear:both;}.fl{ float:left;}.fr{ float:right;}img{ border:none;}a{ text-decoration:none;}a:hover{ text-decoration:none;}li{ list-style-type:none;}.p10{ padding:10px;}.main .main_con .main_news h2 a {color: #FFF;}1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374<h

第一、带着目标去学习,无论看书报课还是各种线下活动。
首先要明确自己的学习目标是什么,是想解决什么问题,实现怎样的目标。

第二、学习要建立个人知识体系
知识是学不完的,书籍是浩如烟海的。我们尽情徜徉其中的时候,千万不要被海水淹死,没有自我了。在学习过程中,我们会发现每一个知识点都是有她的边界和背景的,我们要善于归纳整理知识

第三、学到了就要用到

有时,我们一天下来感觉学到了很多干货,那么我们一定要将这些知识点和实际工作和生活联系起来。知识和实践相互联系靠拢。爱学习是一件好事,但只有会学习的人,才有价值。

.定位

  • 定位是一种更加高级的布局手段
    • 通过定位可以将元素摆放到页面 - 使用position属性来设置定位可选值:
    • static 默认值,元素是静止的没有开启定位
    • relative 开启元素的相对定位
    • absolute 开启元素的绝对定位
    • fixed 开启元素的固定定位
    • sticky 开启元素的粘滞定位
    • 通过定位可以将元素摆放到页面的任意位置

1.1 相对定位

  • 当元素的position属性值设置为relative时则开启了元素的相对定位
  • 相对定位的特点:
    • 1.元素开启相对定位以后,如果不设置偏移量元素不会发生任何的变化
    • 2.相对定位是参照于元素在文档流中的位置进行定位的
    • 3.相对定位会提升元素的层级
    • 4.相对定位不会使元素脱离文档流
    • 5.相对定位不会改变元素的性质块还是块,行内还是行内
position: relative;

1.2 绝对定位

  • 当元素的position属性值设置为absolute时,则开启了元素的绝对定位
  • 绝对定位的特点:
    • 1.开启绝对定位后,如果不设置偏移量元素的位置不会发生变化
    • 2.开启绝对定位后,元素会从文档流中脱离
    • 3.绝对定位会改变元素的性质,行内变成块,块的宽高被内容撑开
    • 4.绝对定位会使元素提升一个层级
    • 5.绝对定位元素是相对于其包含块进行定位的
  • 包含块( containing block )
    • 正常情况下:包含块就是离当前元素最近的祖先块元素
  • 绝对定位的包含块:
    • 包含块就是离它最近的开启了定位的祖先元素,如果所有的祖先元素都没有开启定位则根元素就是它的包含块
position: absolute;

1.3 固定定位

  • 将元素的position属性设置为fixed则开启了元素的固定定位
  • 固定定位也是一种绝对定位,所以固定定位的大部分特点都和绝对定位一样唯一不同的是固定定位永远参照于浏览器的视口进行定位固定定位的元素不会随网页的滚动条滚动
  • position: fixed;

1.4 粘滞定位

  • 当元素的position属性设置为sticky时则开启了元素的粘滞定位
  • 粘滞定位和相对定位的特点基本一致,不同的是粘滞定位可以在元素到达某个位置时将其固定
  • position: sticky;

1.5 绝对定位元素的布局

  • 水平布局left + margin-left + border-left + padding-left + width + padding-right + border-right + margin-right + right = 包含块的内容区的宽度
    • 当我们开启了绝对定位后:水平方向的布局等式就需要添加left 和 right 两个值此时规则和之前一样只是多添加了两个值: 当发生过度约束: 如果9个值中没有 auto 则自动调整right值以使等式满足 如果有auto,则自动调整auto的值以使等式满足
    • 可设置auto的值 margin width left right
    • 因为left 和 right的值默认是auto,所以如果不指定left和right
    • 则等式不满足时,会自动调整这两个值
  • 垂直方向布局的等式的也必须要满足top + margin-top/bottom + padding-top/bottom + border-top/bottom + height = 包含块的高度

1.6 元素的层级

  • 对于开启了定位元素,可以通过z-index属性来指定元素的层级
  • z-index需要一个整数作为参数,值越大元素的层级越高
  • 元素的层级越高越优先显示
  • 如果元素的层级一样,则优先显示靠下的元素
  • 祖先的元素的层级再高也不会盖住后代元素
z-index: 3;


2. 偏移量(offset)

  • 当元素开启了定位以后,可以通过偏移量来设置元素的位置
  • top 定位元素和定位位置上边的距离
  • bottom 定位元素和定位位置下边的距离
  • 定位元素垂直方向的位置由top和bottom两个属性来控制 通常情况下我们只会使用其中一
    • top值越大,定位元素越向下移动
    • bottom值越大,定位元素越向上移动
  • left 定位元素和定位位置的左侧距离
  • right 定位元素和定位位置的右侧距离
  • 定位元素水平方向的位置由left和right两个属性控制 通常情况下只会使用一个
    • left越大元素越靠右
    • right越大元素越靠左
position: relative;

           left: 100px;
           top: -200px;

1. 字体

  • font-face可以将服务器中的字体直接提供给用户去使用
@font-face {
               /* 指定字体的名字 */
           font-family:'myfont' ;
           /* 服务器中字体的路径 */
           src: url('./font/ZCOOLKuaiLe-Regular.ttf') format("truetype");
      }

1.1 字体相关样式

  • color 用来设置字体颜色
  • font-size 字体的大小
    • em 相当于当前元素的 一个font-size
    • rem 相对于根元素的一个font-size
    • 相关的单位
  • font-family 字体族(字体的格式)可选值:
    • 指定字体的类别,浏览器会自动使用该类别下的字体
    • serif 衬线字体
    • sans-serif 非衬线字体
    • monospace 等宽字体
    • font-family 可以同时指定多个字体,多个字体间使用,隔开字体生效时优先使用第一个,第一个无法使用则使用第二个 以此类推
Microsoft YaHei,Heiti SC,tahoma,arial,Hiragino Sans GB,"B8BF53",sans-serif
font-family: 'Courier New', Courier, monospace;

2. 图标字体

  • 在网页中经常需要使用一些图标,可以通过图片来引入图标但是图片大小本身比较大,并且非常的不灵活
  • 所以在使用图标时,我们还可以将图标直接设置为字体,然后通过font-face的形式来对字体进行引入
  • 这样我们就可以通过使用字体的形式来使用图标
  • fontawesome 使用步骤
    • 1.下载 https://fontawesome.com/
    • 2.解压
    • 3.将css和webfonts移动到项目中
    • 4.将all.css引入到网页中
    • 5.使用图标字体 - 直接通过类名来使用图标字体 class="fas fa-bell" class="fab fa-accessible-icon"
  • 通过伪元素来设置图标字体
    • 1.找到要设置图标的元素通过before或after选中
    • 2.在content中设置字体的编码
    • 3.设置字体的样式
fab
  font-family: 'Font Awesome 5 Brands';

fas
  font-family: 'Font Awesome 5 Free';
  font-weight: 900;
<i class="fas fa-cat"></i>
通过实体来使用图标字体:
          &#x图标的编码;
<span class="fas"></span>

3. 行高

  • 可以将行高设置为和高度一样的值,使单行文字在一个元素中垂直居中
line-height: 200px;
  • 行高指的是文字占有的实际高度
    • 行间距 = 行高 - 字体大小
    • 也可以直接为行高设置一个整数
    • 如果是一个整数的话,行高将会是字体的指定的倍数
    • 可以通过line-height来设置行高
    • 行高可以直接指定一个大小(px em)
    • 行高经常还用来设置文字的行间距
  • 字体框
    • 字体框就是字体存在的格子,设置font-size实际上就是在设置字体框的高度
  • 行高会在字体框的上下平均分配
/* line-height: 1.33; */
           /* line-height: 1; */
           /* line-height: 10 */

4. 字体属性

  • font 可以设置字体相关的所有属性
    • font: 字体大小/行高 字体族
    • 行高 可以省略不写 如果不写使用默认值
    • 语法:
font: 50px/2 微软雅黑, 'Times New Roman', Times, serif;
  • font-weight 字重 字体的加粗
    • normal 默认值 不加粗
    • bold 加粗
    • 100-900 九个级别(没什么用)
    • 可选值:
  • font-style 字体的风格
    • normal 正常的
    • italic 斜体
font-weight: bold;
font-weight: 500;
font-style: italic;

5. 文本样式

  • text-align 文本的水平对齐
    • left 左侧对齐
    • right 右对齐
    • center 居中对齐
    • justify 两端对齐
    • 可选值:
text-align: justify;
  • vertical-align 设置元素垂直对齐的方式
    • baseline 默认值 基线对齐
    • top 顶部对齐
    • bottom 底部对齐
    • middle 居中对齐
    • 可选值:
vertical-align:baseline;
  • text-decoration 设置文本修饰
    • none 什么都没有
    • underline 下划线
    • line-through 删除线
    • overline 上划线
    • 可选值:
text-decoration: overline;
  • white-space 设置网页如何处理空白
    • normal 正常
    • nowrap 不换行
    • pre 保留空白
    • 可选值:
white-space: nowrap;