RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1601526
Accepted
Евгения
Евгения
Asked:2024-12-03 16:26:57 +0000 UTC2024-12-03 16:26:57 +0000 UTC 2024-12-03 16:26:57 +0000 UTC

如何使用 css mask 制作这样的形状?

  • 772

告诉我,是否可以使用 CSS 制作这样的遮罩,以便将来您可以插入任何照片? 在此输入图像描述

html
  • 2 2 个回答
  • 76 Views

2 个回答

  • Voted
  1. Best Answer
    Leonid
    2024-12-05T04:07:00Z2024-12-05T04:07:00Z

    我们在 Corel 中创建以下形状的曲线并将其另存为.png和.svg。这是一个封闭的图形,充满黑色。

    摄影遮罩

    然后我们通过以下方式将该文件指定png为掩码css:

    img {
        mask: url(https://isstatic.askoverflow.dev/cWUEWhKg.png);
        mask-size: cover;
    }
    <img src="https://isstatic.askoverflow.dev/iDgYDYj8.png">

    或者我们指定svg这样一个简单的类型作为掩码。这是“文件的文本” svg(无法将其作为答案的外部文件上传到某处)。但结果是一样的,但界限清晰。

    img {
      mask: url(./mask.svg);
      mask-size: cover;
    }
    <svg xmlns="http://www.w3.org/2000/svg" width="350px" height="400px" viewBox="0 0 350 400">
    
      <path d="M37.76 19.02c41.72,-33.16 86.23,-12.77 137.24,-13.3 51.01,0.53 95.52,-19.86 137.24,13.3 36.14,28.72 42.24,90.93 35.19,193.44 -7.31,106.24 -16.44,121.99 -48.36,160.59 -14.77,17.86 -64.62,28.52 -124.07,26.76 -59.46,1.76 -109.3,-8.9 -124.07,-26.76 -31.92,-38.6 -41.05,-54.35 -48.36,-160.59 -7.05,-102.51 -0.95,-164.72 35.19,-193.44z"/>
    
    </svg>

    例如,使用mask-position和mask-size可以将遮罩调整到中心,并将其调整为所需的尺寸。事实证明,它是一个通用的照片遮罩,无论有多少张。

    UPD。您可以从文本创建 URLsvg并分配mask-image。这更多的是模拟外部svg文件作为遮罩的操作:

    const svg = `<svg id="mask" xmlns="http://www.w3.org/2000/svg" width="350px" height="400px" viewBox="0 0 350 400">
    
    <path d="M37.76 19.02c41.72,-33.16 86.23,-12.77 137.24,-13.3 51.01,0.53 95.52,-19.86 137.24,13.3 36.14,28.72 42.24,90.93 35.19,193.44 -7.31,106.24 -16.44,121.99 -48.36,160.59 -14.77,17.86 -64.62,28.52 -124.07,26.76 -59.46,1.76 -109.3,-8.9 -124.07,-26.76 -31.92,-38.6 -41.05,-54.35 -48.36,-160.59 -7.05,-102.51 -0.95,-164.72 35.19,-193.44z"/>
    
    </svg>`;
    
    const svg_url = `data:image/svg+xml;base64,${btoa(svg)}`;
    
    document.getElementById('photo').style.maskImage = `url(${svg_url})`;
    img {
        mask-size: cover;
    }
    <img id="photo" src="https://isstatic.askoverflow.dev/iDgYDYj8.png">

    • 4
  2. Alexandr_TT
    2024-12-04T22:10:29Z2024-12-04T22:10:29Z

    告诉我,是否可以使用 CSS 制作这样的遮罩,以便将来您可以插入任何照片?

    换句话说,您不需要插入照片,而是根据给定的曲线图案对其进行裁剪。在CSS中,图像裁剪不是通过遮罩执行的,
    而是通过clip-path执行的

    在 CSS 中创建曲线图案是clip-path有问题的,而且是劳动密集型的。
    但 SVG 可以轻松处理这个任务。

    在矢量编辑器中,根据给定模式创建曲线模板(路径):

    在此输入图像描述

    然后使用 SVG mask 剪切出图像的一个片段:

    .img {
    mask:url(#msk);
    } 
    .container {
    width:50vw;
    height:50vh;
    }
    <div class="container">
    <svg id="svg1" xmlns="http://www.w3.org/2000/svg"  xmlns:xlink="http://www.w3.org/1999/xlink" 
     viewBox="0 0 760 860" version="1.1"  style="border:0px solid red">
     <mask id="msk" > 
     
       <path id="p1"   fill="white" d="M45.6 798C20.3 722.3 20 630.9 12.8 546.7c-4.6-52.3-6-105-7.1-157.4C4.6 338.4 3.3 289 5.9 237 9.5 165 9.5 50 71.1 31 122.8 0 194 1.7 249.6 1.8c18.7 1 37.1 4.6 55.7 6.6 13.3 1.4 26.6 3.2 40 3.9 19.7.9 39.5 1 59.2 0 33.7-2 66.9-9.7 100.5-11.6 19.3-1.2 38.7-.7 58 0 19 .6 38.1.2 56.7 3.8 22.7 4.5 47 8.3 65.7 22C706.6 41.8 721.4 66 732 90c14.5 32.7 17.6 69.6 21.7 105.2 6.9 59.5 4.8 119.8 4.8 179.8 0 54.5-.8 110.4-4.2 163.4-2 31.9-3.6 63.8-5.4 95.7-1.8 30.3-2.4 60.8-5.5 91 1 51.4-21.5 89-76.5 107.6-44.8 17.3-94.2 21-142.2 23.7-52.5 3-105-7.6-157.6-8.2-54.3-.7-109.7.8-163 4.5-23.7 1.7-63.8 10.6-93 0-26.7-9.7-56.6-27.6-65.5-54.6z" > 
      </path>
    </mask> 
    
     <image class="img"  xlink:href="https://isstatic.askoverflow.dev/rU0Ewb7k.png" width="100%" height="100%" /> 
    </svg>  
    </div>

    • 1

相关问题

  • 具有非均匀背景的块内的渐变边框

  • 离开页脚

  • 如何将三个字段的数据收集到一封电子邮件中?

  • Html 元素刚从父元素中出来

  • 如何在css中制作这个背景?

  • 如何制作带有斜条纹的背景?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5