带遮罩的全宽图像

Posted

技术标签:

【中文标题】带遮罩的全宽图像【英文标题】:Full width image with mask 【发布时间】:2015-12-18 03:02:00 【问题描述】:

我有一个带有图像标题(全角)的响应式网站。在该图像之上,我有一个 SVG 蒙版,我有这个,所以我在标题的底部有一个类似绘画的外观。问题是,我的图像没有缩放以适应宽度。我希望它是 100% 宽和 700px 高(或者像覆盖它的父级,就像你通常做的那样:背景大小:覆盖)。

这就是我想要的:

这就是我迄今为止所取得的成就(图像不同但没关系:

这就是我需要刷子的原因:

我正在使用的代码:

<div class="cover">
        <svg   baseProfile="full" version="1.2">
            <defs>
                <mask id="svgmask2" maskUnits="objectBoundingBox" maskContentUnits="objectBoundingBox" transform="scale(1)">
                    <image   xlink:href="/images/brush-header.png" />
                </mask>
            </defs>
            <image id="the-mask" mask="url(#svgmask2)"   y="0" x="0" xlink:href="/images/header-image.png" />
        </svg>
    </div>

cover 有 css 的地方:

.cover
  height: 700px;
  width: 100%;

我想要的: - 图片的宽度必须为100%,遮罩必须覆盖整个图片宽度,画笔不能是顶部的图片:我想看到标题后面的网站内容,就像你在第二张图片中看到的那样.

图片尺寸: 1920x1256 刷子尺寸: 1422x721

【问题讨论】:

尝试使用background-size: cover;,也许可以解决问题。 width="100%" 将图像的宽度设置为 100%。如果图像是 200px 宽,它将是 200px 宽,并且不会填满整个浏览器窗口。 有没有办法让它填满宽度? (就像 background-size: cover 如果它是没有蒙版的背景一样;)) @BartBurg 会 this 回答您评论中的问题吗? 【参考方案1】:

把它放在你的 CSS 样式中

 #the-mask 
      position: fixed; 
      top: 0; 
      left: 0; 

      /* Preserve aspet ratio */
      min-width: 100%;
      min-height: 100%;
    

你可以用它来应用它全屏背景图片

html  
  background: url(/images/header-image.png) no-repeat center center fixed; 
  -webkit-background-size: cover;
  -moz-background-size: cover;
  -o-background-size: cover;
  background-size: cover;

【讨论】:

如果我只想要一张没有遮罩的全宽图像,它确实有效,但遮罩很重要。我想要底部的刷状饰面。 将该笔刷应用到一个 div 并使用 z-index 将其放在前面并使其透明。【参考方案2】:

如果您希望 SVG 缩放以适应其容器 (cover),您需要告诉浏览器 SVG 的内容有多大。如果它不知道它有多大,它就无法缩放 SVG。

您可以使用 viewBox 属性来做到这一点。

您没有提供任何关于您的图片有多大的信息。但假设,为了这个例子,它是 1024x768。然后将您的 SVG 根标签更改为:

<svg  viewBox="0 0 1024 768">

您可能还想更改preserveAspectRatio 属性,使其位于容器的顶部:

<svg  viewBox="0 0 1024 768" preserveAspectRatio="xMidYMin meet">

更新

下面是一个缩放 400x200 图像以适应页面的示例。

body 
  margin: 0;


.cover 
  height: 700px;
  width: 100%;
<div class="cover">
    <svg  viewBox="0 0 400 200" preserveAspectRatio="xMidYMin meet">
        <image id="the-mask" mask="url(#svgmask2)"   y="0" x="0" xlink:href="http://lorempixel.com/400/200/" />
    </svg>
</div>

【讨论】:

您的回答似乎合乎逻辑,但您能给我举个小例子吗?我的仍然没有缩放以覆盖其容器。非常感谢!【参考方案3】:

非常感谢 Paul LeBeau 和 this overflow answer,我发现我的画笔和图像都需要具有相同的尺寸。结合正确设置的 viewBox 尺寸,我设法解决了这个问题!

代码:

<svg   baseProfile="" version="1.2" preserveAspectRatio="xMinYMax slice" viewBox="0 0 1920 1256">
            <defs>
                <mask id="svgmask2" maskUnits="userSpaceOnUse" maskContentUnits="userSpaceOnUse" transform="scale(1)">
                    <image   xlink:href="/images/brush-header3.png" /> 
                </mask>
            </defs>
            <image id="the-mask" mask="url(#svgmask2)"   y="0" x="0" xlink:href="<?= $s_Background ?>" />
        </svg>

【讨论】:

以上是关于带遮罩的全宽图像的主要内容,如果未能解决你的问题,请参考以下文章

创建带遮罩的文本框,但在空白时隐藏带遮罩的字符

如何使用 Accelerate Framework 将带有遮罩的图像组合成一个 UIImage?

固定高度的全宽图像

SVG 图像在 ie 中没有获得视口的全宽

如何在 swift 中设置 UIScrollView 内的全宽图像

如何使背景标题图像扩展到浏览器的全宽