热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

是否可以在CSS背景中设置类似于SVG起点和终点位置的渐变起点和终点位置?

如何解决《是否可以在CSS背景中设置类似于SVG起点和终点位置的渐变起点和终点位置?》经验,为你挑选了1个好方法。

在SVG渐变中,您可以设置起始xy和终止xy位置。是否有可能在CSS中做到这一点。

这是原始设计:

这是我的线性梯度的SVG:

.myRectangle {
	width: 331px;
	height: 137px;
	left: 0px;
	top: 0px;
}

  
    
    
    
    
  
  
  

这是我的CSS线性渐变:

#rectangle {
  width: 100%;
  height: 200px;
  position: absolute;
  top: 0;
  left: 0;
  background: linear-gradient(225deg, rgba(255,255,255,1) 0%, rgba(250,0,0,1) 27.59%, rgba(108,22,95,1) 76.35%, rgba(39,32,32,1) 100%)
}

我一直在引用此页面的MDN与此页面上的W3C。

SVG包含渐变的方向

x1="1" x2="0.5" y1="0" y2="0.5"

元素还具有其他几个属性,这些属性指定渐变的大小和外观。渐变的方向由两个点控制,这两个点由属性x1,x2,y1和y2指定。这些属性定义了一条渐变线。渐变默认为水平方向,但可以通过更改它们来旋转。上面示例中的Gradient2设计为创建垂直渐变。-来自https://developer.mozilla.org/zh-CN/docs/Web/SVG/Tutorial/Gradients

从其他文档中:

渐变线起点的X和Y位置,为对象边界框的倍数:X = 0表示边界框的左边缘,X = 1表示右边缘。渐变线可能在对象边界框外开始或结束,因此值可能<0或> 1。

Temani Afif.. 13

您可以将色标的所有值除以相同的系数,以减小渐变的大小并使它类似于SVG。

我使用CSS变量使其变得简单,但这不是强制性的

.rectangle {
  width: 100%;
  height: 200px;
  --s:2;
  background: 
   linear-gradient(225deg, 
    rgba(255,255,255,1) 0%, 
    rgba(250,0,0,1)   calc(27.59%/var(--s)), 
    rgba(108,22,95,1) calc(76.35%/var(--s)), 
    rgba(39,32,32,1)  calc(100%/var(--s)));
}

您可以添加一个额外的变量来补偿渐变,该渐变将模拟起点:

.rectangle {
  width: 100%;
  height: 200px;
  --s:2;
  --p:10%;
  background: 
   linear-gradient(225deg, 
    rgba(255,255,255,1) var(--p), 
    rgba(250,0,0,1)   calc(27.59%/var(--s) + var(--p)), 
    rgba(108,22,95,1) calc(76.35%/var(--s) + var(--p)), 
    rgba(39,32,32,1)  calc(100%/var(--s) + var(--p)));
}


这是SVG和CSS渐变之间的一些比较:

.rectangle {  
  background: 
   linear-gradient(var(--a), 
    #f7f7f7  var(--p), 
    #ea0000  calc(26.6%/var(--s) + var(--p)), 
    #6c165f  calc(76.85%/var(--s) + var(--p)), 
    #272020  calc(100%/var(--s) + var(--p)));
}

.myRectangle,
.rectangle {
  width:100px;
  height:100px;
  display:inline-block;
}

  
    
    
    
    
  
  
  

您可以保持颜色和percetange值相同。对于SVG,您可以调整x,y值;对于CSS,您可以调整变量(角度,偏移量和除法器)

角度的公式如下:

angle = arctang(Height*(x2 - x1)/Width*|y2 - y1|)

如果y2 > y1我们再做一步angle = 180deg - angle

为了找到分频器,我们需要考虑CSS梯度的长度,该长度等于

Dc = |Width * sin(angle)| + |Height * cos(angle)|

SVG梯度的长度等于:

Ds = sqrt(Width²*(x2 - x1)² + Height²*(y2 - y1)²)

然后我们做一个简单的除法 Dc/Ds

偏移量的公式p((Dc/2 - d)*100) / Dc,它Dc是先前定义的CSS渐变的长度,d等于:

d = (Width²*(x1-0.5)*(x1-x2)+Height²*(y1-0.5)*(y1-y2))/(sqrt(Width²*(x2-x1)²+Height²*(y2-y1)²))

这是一个互动演示

angle = arctang(Height*(x2 - x1)/Width*|y2 - y1|)
Dc = |Width * sin(angle)| + |Height * cos(angle)|
Ds = sqrt(Width²*(x2 - x1)² + Height²*(y2 - y1)²)

当处理正方形时,以上给出了完美的结果。对于矩形形状,仍然存在一些差异。检查公式...



1> Temani Afif..:

您可以将色标的所有值除以相同的系数,以减小渐变的大小并使它类似于SVG。

我使用CSS变量使其变得简单,但这不是强制性的

.rectangle {
  width: 100%;
  height: 200px;
  --s:2;
  background: 
   linear-gradient(225deg, 
    rgba(255,255,255,1) 0%, 
    rgba(250,0,0,1)   calc(27.59%/var(--s)), 
    rgba(108,22,95,1) calc(76.35%/var(--s)), 
    rgba(39,32,32,1)  calc(100%/var(--s)));
}

推荐阅读
  • TortoiseSVN与VisualSVN Server的安装及基本操作指南
    本文详细介绍了如何安装VisualSVN Server以及TortoiseSVN客户端,并提供了基本的操作步骤,包括配置仓库、用户管理及权限设置等关键环节。 ... [详细]
  • 本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ... [详细]
  • 本文介绍如何在 Visual Studio Code 中使用 Jupyter Notebook 插件,包括创建、编辑和运行笔记本的基本操作。 ... [详细]
  • 724. 寻找数组的中轴索引
    给定一个整数数组 `nums`,编写一个方法返回该数组的“中轴”索引。定义中轴索引为该索引左侧所有数字之和等于右侧所有数字之和的索引。如果不存在这样的索引,则返回 -1。如果有多个中轴索引,返回最左边的一个。 ... [详细]
  • 使用WinForms 实现 RabbitMQ RPC 示例
    本文通过两个WinForms应用程序演示了如何使用RabbitMQ实现远程过程调用(RPC)。一个应用作为客户端发送请求,另一个应用作为服务端处理请求并返回响应。 ... [详细]
  • 本文详细介绍如何通过设置SSH密钥来获取连接GitHub远程仓库的权限,包括生成密钥、添加到GitHub账户以及验证连接等步骤。 ... [详细]
  • iOS 开发技巧:TabBarController 自定义与本地通知设置
    本文介绍了如何在 iOS 中自定义 TabBarController 的背景颜色和选中项的颜色,以及如何使用本地通知设置应用程序图标上的提醒个数。通过这些技巧,可以提升应用的用户体验。 ... [详细]
  • 解决MacOS Catalina升级后VMware Fusion黑屏问题的详细指南
    本文深入探讨了如何在MacOS Catalina升级后解决VMware Fusion黑屏的问题。通过详细的步骤和代码示例,帮助用户快速恢复虚拟机的正常运行,并提供了额外的安全建议。适用于希望提升工作效率或学习新技术的读者。 ... [详细]
  • 近期我们开发了一款包含天气预报功能的万年历应用,为了满足这一需求,团队花费数日时间精心打造并测试了一个稳定可靠的天气API接口,现正式对外开放。 ... [详细]
  • 本文旨在回顾并总结近期学习的.NET Core基础知识,通过具体的操作指南加深理解,并为初学者提供实用建议,避免常见的错误和陷阱。内容涵盖CentOS的安装配置、.NET Core环境搭建及网站部署等。 ... [详细]
  • 如何在SQL Server 2008中通过Profiler跟踪特定数据库及获取客户端信息
    本文介绍如何利用SQL Server Profiler工具来监控特定数据库的操作,并获取执行这些操作的客户端计算机名和账户名。步骤包括创建新的跟踪、配置跟踪属性以及设置列筛选器以精确过滤数据。 ... [详细]
  • cJinja:C++编写的轻量级HTML模板引擎
    本文介绍了cJinja,这是一个用C++编写的轻量级HTML模板解析库。它利用ejson来处理模板中的数据替换(即上下文),其语法与Django Jinja非常相似,功能强大且易于学习。 ... [详细]
  • 本文探讨了C#语言中类的嵌套使用,特别是当嵌套类作为方法参数时,其内部状态是否会因方法调用而发生改变的问题。通过实例分析,详细说明了引用类型在不同情况下的行为。 ... [详细]
  • 如何从python读取sql[mysql基础教程]
    从python读取sql的方法:1、利用python内置的open函数读入sql文件;2、利用第三方库pymysql中的connect函数连接mysql服务器;3、利用第三方库pa ... [详细]
  • 深入解析:OpenShift Origin环境下的Kubernetes Spark Operator
    本文探讨了如何在OpenShift Origin平台上利用Kubernetes Spark Operator来管理和部署Apache Spark集群与应用。作为Radanalytics.io项目的一部分,这一开源工具为大数据处理提供了强大的支持。 ... [详细]
author-avatar
西瓜246
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有