重拾CSS,前端样式精读-函数(颜色,计算,图像和图形)

news2024/9/20 22:00:39

前言

本文收录于CSS系列文章中,欢迎阅读指正

在计算机编程中,函数有着重要的作用和意义,它可以实现封装,复用,模块化,参数等功能效果,在如何在CSS中写变量?一文带你了解前端样式利器文章中,我介绍了CSS中的变量的使用方式,通过var函数以及--变量的写法实现了动态修改css的效果。除此之外CSS还提供了哪些函数供开发者使用?

我将CSS的函数分为以下几类方便理解及归类:颜色,计算,图像和图形,渐变,滤镜,变换,其他。本文将详细介绍CSS中颜色,计算,图像和图形函数以及使用方式。更多函数及详细使用参照:CSS 值函数 - CSS:层叠样式表 | MDN

颜色函数

rgb()

定义颜色使用红色(R)、绿色(G)和蓝色(B)三个颜色通道的值,格式为rgb(255,255,255),其中值的范围为0到255。

rgba()

与rgb()功能相似,但增加了一个alpha通道来指定透明度,格式为rgba(255,255,255,0.5),其中最后一个值的范围为0到1表示透明度。

hsl()

使用色相(Hue)、饱和度(Saturation)、亮度(Lightness)来定义颜色,格式为hsl(120,100%,50%)。

hsla()

hsl()的扩展,增加了一个alpha通道来控制透明度,格式为hsla(120,100%,50%,0.3)。

opacity()

控制元素整体的透明度,且透明度的继承方式有所不同,在新版本中常用于rgba()或hsla()函数内。

上述函数的用法如下:

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <title>CSS颜色函数</title>
    <style>
        .color-box {
            padding: 20px;
            margin: 10px 0;
            color: #fff;
            text-shadow: 1px 1px 1px #000;
            border: 1px solid #ddd;
            /* 添加边框便于观察透明度效果 */
        }

        .rgb {
            background-color: rgb(255, 0, 0);
            /* 纯红色 */
        }

        .rgba {
            background-color: rgba(0, 255, 0, 0.5);
            /* 50% 透明度的绿色 */
        }

        .hsl {
            background-color: hsl(240, 100%, 50%);
            /* 鲜艳的蓝色 */
        }

        .hsla {
            background-color: hsla(60, 100%, 50%, 0.3);
            /* 30% 透明度的黄色 */
        }

        .opacity {
            background-color: #0000ff;
            /* 蓝色 */
            opacity: 0.75;
            /* 75% 的透明度 */
        }
    </style>
</head>

<body>
    <div class="color-box rgb">这是一个背景为RGB颜色的div。</div>
    <div class="color-box rgba">这是一个背景为带透明度的RGBA颜色的div。</div>
    <div class="color-box hsl">这是一个背景为HSL颜色的div。</div>
    <div class="color-box hsla">这是一个背景为带透明度的 HSLA 颜色的 div。</div>
    <div class="color-box opacity">这是一个背景颜色为蓝色且设置了75%透明度的div。</div>
</body>

</html>

 

计算函数

calc()

它允许你在CSS属性值中进行计算。它可以用来加、减、乘以或除以任何数值,并且可以结合使用不同的单位。这是一个强大的函数,因为它允许混合使用百分比、像素、REM等单位,从而实现复杂的布局。

min()

接受一组值作为参数,并返回最小的值。在响应式设计中特别有用,因为它可以帮助确保值不会超出所需的范围。

max()

与min()相反,max()函数从所提供的一系列值中取最大值。这同样适合响应式设计,允许设置一个值不低于某个特定的范围。

clamp()

clamp()函数是min()和max()的结合体,用于将一个值限制在一个范围之内。它接收三个参数:最小值、理想值(通常是一个可变的值,如视口的宽度的百分比),以及一个最大值。

var()

参照文章:如何在CSS中写变量?一文带你了解前端样式利器。用于插入自定义属性的值,这些自定义属性通常称为CSS变量。有一点在之前文章没提到:它接收两个参数,第一个是变量值。第二个是默认值,当变量不存在时就会默认使用第二个值。它们在全局或局部作用域定义,然后可以在文档的任何地方重复使用。

我们同样使用一个html文件对上述函数做个案例介绍

<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <title>CSS计算函数</title>
    <style>
        :root {
            --main-padding: 10px;
            /* CSS变量 */
        }

        .container {
            max-width: 800px;
            margin: 0 auto;
            padding: var(--main-padding, 20px);
            /* 使用CSS变量var */
            border: 2px solid #333;
            background-color: lightblue;
        }

        .dynamic-width {
            background-color: lightcoral;
            width: calc(100% - 2 * var(--main-padding));
            /* 使用calc()计算宽度 */
            margin: 20px 0;
            padding: 20px;
            text-align: center;
        }

        .default-width {
            background-color: lightseagreen;
            width: var(--main-width, 200px);
            /* var的第一个参数取不到时,使用第二个参数的默认值 */
            margin: 20px 0;
            padding: 20px;
            text-align: center;
        }

        .min-max-example {
            background-color: lightcyan;
            width: max(300px, 50%);
            /* 使用max() */
            height: min(150px, 25%);
            /* 使用min() */
            margin: 20px 0;
            padding: 20px;
            text-align: center;
        }

        .clamp-example {
            background-color: lightgreen;
            width: 100%;
            padding: 20px;
            font-size: clamp(12px, 2vw, 18px);
            /* 使用clamp() */
            text-align: center;
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="dynamic-width">
            文字框(宽度动态计算)
        </div>
        <div class="default-width">
            使用默认宽度
        </div>
        <div class="min-max-example">
            此框体的宽度不小于300px,且不超过父容器的50%,高度为150px或父容器的25%,取较小值。
        </div>

        <div class="clamp-example">
            字体大小会根据视口宽度动态调整,但不会小于12px,也不会超过18px。
        </div>
    </div>
</body>

</html>

 

图像

url()

url用于引入外部资源,如图像或Web字体文件。它通常用于background-image或border-image等属性。

image-set()

image-set允许作者根据屏幕的分辨率提供一组图像。浏览器会选择最适合设备的图像来显示。

图形

以下函数常用于clip-path、offset-path和shape-outside属性中

circle()

circle(<shape-radius>, <position>)函数用于创建剪切路径,形成一个圆形的剪裁区域。

ellipse()

与circle类似,ellipse(<shape-radius>, <position>)函数用于创建椭圆形的剪裁路径。

inset()

inset(top right bottom left round border-radius)函数用于创建一个矩形的裁剪路径,位置参数类型是<length-percentage>,round: 是可选关键词,后面跟着矩形的圆角半径。

polygon()

polygon用于创建多边形的剪裁路径,可以指定多个点来定义多边形的每个角,polygon(<fill-rule>, x1 y1, x2 y2, x3 y3)。

path()

path是用于定义一个复杂的剪裁路径。此函数使用SVG的路径语法来规定一个shape。

我们使用一个例子来介绍一下上述函数,其中图像集背景效果可以使用鼠标滚轮对页面缩放来观察效果

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <title>CSS图像和图形函数</title>
    <style>
        div {
            float: left;
            width: 300px;
            height: 300px;
            background-size: cover;
            text-align: center;
            line-height: 300px;
        }

        .background-image {
            background-image: url('../img/example.jpg');
        }

        .background-image-set {
            background-image: image-set('../img/example2.jpg' 1x, '../img/example.jpg' 2x);
        }

        .clip-path-circle {
            background: pink;
            clip-path: circle(50% at 50% 50%);
        }

        .clip-path-ellipse {
            background: lightblue;
            clip-path: ellipse(50% 25% at 50% 50%);
        }

        .clip-path-inset {
            background: lightseagreen;
            clip-path: inset(50px 100px 30px 70px round 30px);
        }

        .clip-path-polygon {
            background: lightgreen;
            clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
        }

        .clip-path-path {
            background: lightsalmon;
            clip-path: path('M10 80 Q 95 10 180 80 T 280 80');
        }
    </style>
</head>

<body>
    <div class="background-image">背景图片</div>
    <div class="background-image-set">图像集背景</div>
    <div class="clip-path-circle">圆形裁剪</div>
    <div class="clip-path-ellipse">椭圆裁剪</div>
    <div class="clip-path-inset">矩形裁剪</div>
    <div class="clip-path-polygon">多边形裁剪</div>
    <div class="clip-path-path">复杂裁剪</div>
</body>

</html>

总结

文章对css的颜色,计算,图像和图形三类函数做了介绍,并且简述了它们的使用方式及效果,希望可以帮助到你。

最后,感谢你看到了这里,如果觉得本篇或者这个系列写的不错,还望三连支持一下,你的支持就是我创作的最大动力,谢谢!

相关代码

myCode: 基于js的一些小案例或者项目 - Gitee.com

参考

CSS 值函数 - CSS:层叠样式表 | MDN

<url> - CSS:层叠样式表 | MDN

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1940510.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聊聊HuggingFace Transformer

项目组件 一个完整的transformer模型主要包含三部分&#xff1a;Config、Tokenizer、Model。 Config 用于配置模型的名称、最终输出的样式、隐藏层宽度和深度、激活函数的类别等。 示例&#xff1a; {"architectures": ["BertForMaskedLM"],"atte…

蓝屏死机不再怕!CrowdStrike故障修复指南中心上线!

系统之家于7月22日发出最新报道&#xff0c;安全公司CrowdStrike因其Windows更新引发全球 850 万台电脑蓝屏死机问题后&#xff0c;上线了全新的“修复和指南中心”&#xff08;Remediation and Guidance Hub&#xff09;&#xff0c;该中心汇集了与其错误更新相关的详细信息&a…

昇思25天学习打卡营第25天 | RNN实现情感分类

学习心得&#xff1a;RNN实现情感分类 在自然语言处理&#xff08;NLP&#xff09;的领域中&#xff0c;情感分类是一个极具挑战性的任务&#xff0c;它要求模型能够准确地从文本中识别出情感倾向。通过使用MindSpore框架和RNN模型进行情感分类&#xff0c;我获得了许多有关构…

【QT】定时器事件 - QTimerEvent QTimer

qt 系统 - 定时器 定时器1. QTimerEvent2. QTimer3. 获取系统日期及时间 定时器 Qt 中在进行窗口程序的处理过程中&#xff0c;经常要周期性的执⾏某些操作&#xff0c;或者制作⼀些动画效果&#xff0c;使用定时器就可以实现。所谓定时器就是在间隔⼀定时间后&#xff0c;去执…

《python语言程序设计》第6章第1题数,数学方面:五角数n(3n-1)/2 前100个五角数

第4次做第6章 def getPentagonalNumber(n):count 0for i in range(1, n):count 1pen_num round(i * ((3 * i) - 1) / 2)print(f"{pen_num}", end" ")if count % 10 0:print()getPentagonalNumber(100)

Java语言程序设计基础篇_编程练习题**15.15 (几何问题:添加或删除点)

**15.15 (几何问题:添加或删除点) 请编写一个程序&#xff0c;让用户在面板上单击以自动创建或移去点(参见15-28a)。当用户左击鼠标时(主按钮)&#xff0c;就创建一个点并且显示在鼠标的位置&#xff0c;用户还可以将鼠标移到一个点上&#xff0c;然后右击鼠标(次按钮)以移去这…

C语言-网络编程-UDP通信创建流程

UDP 通信创建流程 UDP 是⼀个传输层的⽆连接的协议&#xff0c;我们编写代码⼀般是分为两个端。⼀个我们称之为发送端&#xff0c;另⼀ 个我们称之为接收端。正常⼀般是接收端先运⾏&#xff0c;然后等待结束发送端发送过来的数据。 创建套接字 首先&#xff0c;我们需要创建…

JDK8升级到JDK17,报错Error:java:错误:不支持的发行版本5

1 问题描述&#xff1a; 我原来用到是JDK8,后来重新安装了JDK17后&#xff0c;并更换了JAVA_HOME的配置&#xff0c;在CDM上面查看JAVA版本确认安装无误。 当我打开IDEA运行代码时&#xff0c;就报错java&#xff1a;错误&#xff1a;不支持的发行版本5&#xff0c;至始至终我都…

Leetcode509. 斐波那契数(递归和常规两种写法)

问题描述&#xff1a; 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0c;…

Python酷库之旅-第三方库Pandas(037)

目录 一、用法精讲 116、pandas.Series.div方法 116-1、语法 116-2、参数 116-3、功能 116-4、返回值 116-5、说明 116-6、用法 116-6-1、数据准备 116-6-2、代码示例 116-6-3、结果输出 117、pandas.Series.truediv方法 117-1、语法 117-2、参数 117-3、功能 …

C语言编译报错:error: expected declaration or statement at end of input(缺了括号)

文章目录 报错信息分析解决步骤&#xff1a; 排查 报错信息 /userdata/testOtherPrj/20240715_box_circuit_breaker/test/external/modbus_vendorA/src/vendor_a_modbus.c: In function ‘VendorA_PowerStop’: /userdata/testOtherPrj/20240715_box_circuit_breaker/test/exte…

25届近4年电子科技大学自动化考研院校分析

电子科技大学 目录 一、学校学院专业简介 二、考试科目指定教材 三、近4年考研分数情况 四、近4年招生录取情况 五、最新一年分数段图表 六、初试大纲复试大纲 七、学费&奖学金&就业方向 一、学校学院专业简介 二、考试科目指定教材 1、考试科目介绍 2、指定教…

EasyAnimate-v3 实测,阿里开源视频生成模型,5 分钟带你部署体验,支持高分辨率超长视频

自从 Sora 发布以来&#xff0c;AI 视频生成的热度不减&#xff0c;社区中涌现了大量类 Sora 的开源项目。 前不久&#xff0c;快手开放了可灵视频生成模型的内测&#xff0c;不过可灵是闭源的&#xff0c;相信很多小伙伴还没拿到内测名额。 今天给大家分享一款开源的视频生成…

Springboot 启动时Bean的创建与注入(一)-面试热点-springboot源码解读-xunznux

Springboot 启动时Bean的创建与注入&#xff0c;以及对应的源码解读 文章目录 Springboot 启动时Bean的创建与注入&#xff0c;以及对应的源码解读构建Web项目流程图&#xff1a;堆栈信息&#xff1a;堆栈信息简介堆栈信息源码详解1、main:10, DemoApplication (com.xun.demo)2…

currentTarget和target

*.wxml *.js 点击按钮 发现 currentTarget 获取的是事件绑定者的参数 target 获取的是事件触发者的参数

vue3前端开发-小兔鲜项目-一级页面产品列表渲染

vue3前端开发-小兔鲜项目-一级页面产品列表渲染&#xff01; 这一次做两件事。第一个是给导航栏增加一个动态标记的属性。第二件事是渲染一下一级页面内产品列表。 第一件事&#xff0c;很简单&#xff0c;路由器插件&#xff0c;自带了这种属性。 如图所示&#xff0c;有一个…

最新CSM客户成功 OKR 案例:以指导、激励和调整您的团队

客户是任何企业的命脉&#xff0c;而客户服务是与客户接触的第一站&#xff0c;是实现目标和扩大组织规模是以保留客户和追加销售为前提的。 客户成功CSM是一种商业方法&#xff0c;确保客户在使用你的产品/服务时达到他们想要的结果。客户成功是以关系为中心的客户管理&#…

昇思25天学习打卡营第22天|ResNet50图像分类

ResNet网络介绍 ResNet50网络是2015年由微软实验室的何恺明提出&#xff0c;获得ILSVRC2015图像分类竞赛第一名。在ResNet网络提出之前&#xff0c;传统的卷积神经网络都是将一系列的卷积层和池化层堆叠得到的&#xff0c;但当网络堆叠到一定深度时&#xff0c;就会出现退化问…

Linux系统编程基础

Linux操作系统 Linux不是一个具体的操作系统&#xff0c;而是一类操作系统的总称&#xff0c;具体版本成为发行版。 Red Hat&#xff1a;目前被IBM收购&#xff0c;收费版&#xff0c;目前最大的Linux供应商CentOS&#xff1a; Red Hat退出的免费版Ubuntu&#xff1a;界面比较友…

公司技术栈用到了RocketMQ,我对此块知识进行了回顾(初始RocketMQ)

前言 作为24届的校招生&#xff0c;不知道大伙儿们是否都已经到了工作岗位上。为了以后更方便的接触到公司的业务&#xff0c;我司为我们安排了将近一个月的实操。虽然不用敲代码&#xff0c;但是… 了解到我司使用到的技术栈&#xff0c;在空闲时间正好对RocketMQ这块技术做个…