0

我有一个背景设置为某些 img 的页面。我在顶部有一个 div(比如 div_1):50%,它是一个不透明度为 0.6 的水平黑条。在左侧 50% 的右侧上方,我想显示一个白色背景的 div(其中包含一些内容),它是一个不透明度为 0.6 的圆角框,例如 div_2。

我希望 div_2 看起来像直接在页面背景上,而不受 div_1 的影响。可能有点混乱。事情就像 div_2 在 div_1 上并且 div_2 具有透明背景,div_1 正在影响 div_2 的外观。(因为我将白色透明框放在黑框上)。那么为什么不删除 div_1 ..?我不能因为我想要页面中心的黑色条带。

也许我需要这个

1)类似于反剪辑的反转,这样我就可以切断 div_1 的确切部分,其中 div_2 将出现,以便 div_2 在页面背景上看起来正确,而不受 div_1 的干扰。

2) 取一个额外的 div(div_3) 并显示 div_2 下方存在的页面背景的确切部分,并将其放在 div_1 上,然后将 div_2 放在页面背景上,使其看起来好像在页面背景上。

但是我无法知道如何至少执行这两种解决方案中的一种。任何其他解决方案也很乐意接受。

编辑

这是我到目前为止的代码,

[Code](http://jsfiddle.net/5sDce/)

请检查在 div_2 中看不到的“必需”标签的外观,因为 div_1 在它后面,我不能让 div_1 漂浮在 div_2 旁边,因为 div_2 是圆角的。

自己试了一下,解决了,如果有人需要,请参考我下面的回答。

提前致谢。

4

3 回答 3

1

我假设您正在寻找与此类似的东西。

计算机图形学中两种常用的操作是裁剪和遮罩。这两种操作都隐藏了元素的可视部分。如果您以前使用过 SVG 或 HTML Canvas,那么这些操作对您来说可能并不新鲜。裁剪定义了元素的可见区域。该区域周围的所有内容都不会被渲染 - 它会被“剪辑”。在遮罩时,遮罩图像与元素合成,影响该元素的 Alpha 通道。被遮罩元素的某些部分变得完全或部分透明。新的 CSS Masking 规范旨在将这两个操作带入 HTML 世界。

CSS 2.1 中的剪辑

CSS 2.1 已经指定了 clip 属性。此属性仅限于使用 rect() 函数对顶部、右侧、底部和左侧边缘采用四个距离参数进行矩形裁剪。烦人的部分:clip 属性仅适用于绝对定位的元素。该属性只是在其他元素上被忽略。

CSS:

img {
  position: absolute;
  clip: rect(10px, 290px, 190px, 10px);
}

HTML:

<img src="image.jpg" width="568">

在此处输入图像描述

在此处输入图像描述

clip 属性也仅限于 SVG 中的特定元素。这就是为什么 SVG 规范添加了现在由 CSS Masking 改编的 clip-path 属性的原因之一。

剪辑路径属性

clip-path 属性可以应用于所有 HTML 元素、SVG 图形元素和 SVG 容器元素。它要么引用一个元素,要么引用 CSS Exclusions 引入的基本形状之一。

该元素从 SVG 中获取任何图形元素并将它们用作剪切区域。SVG 中的图形元素是 、 、 、 、 和 。还允许组合多个图形元素。然后将所有形状的联合用作剪切区域。以下示例演示了 的用法:

CSS:

img {
  clip-path: url(#clipping);
}

HTML:

<svg>
  <defs>
    <clipPath id="clipping">
      <circle cx="284" cy="213" r="213" />
    </clipPath>
  </defs>
</svg>

<img src="image.jpg" width="568">

另一方面,基本形状不需要任何 SVG 标记。它们被添加到剪辑路径中,为简单的剪辑操作提供简单的速记功能。

  • rectangle(, , , , , ) 定义了一个矩形,类似于 clip 的 rect() 函数,并为圆角矩形添加了两个可选的半径参数。
  • circle(, , ) 定义一个具有中心点和半径的简单圆。
  • ellipse(, , , ) 定义一个椭圆,其中心点为水平半径和垂直半径。
  • polygon( , , ..., ) 根据传递的点列表定义一个多边形。

CSS 标记可能类似于以下示例:

img {
  clip-path: polygon(0px 208px, 146.5px 207px, 147px 141.2px, ...);
}

剪辑对于视觉内容的呈现非常有用。以下示例将不同的裁剪操作应用于图像。

在此处输入图像描述

希望这可以帮助。

编辑

更新的解决方案。你有两个解决方案。一个是现有的场景,下一个是你想要的相反的场景。

你必须使用masking相同的概念。

的HTML:

<svg>
  <defs>
    <linearGradient id="gradient" x1="0" y1="00%" x2 ="0" y2="100%">
      <stop stop-color="black" offset="0"/>
      <stop stop-color="white" offset="1"/>
    </linearGradient>

    <mask id="masking" maskUnits="objectBoundingBox" maskContentUnits="objectBoundingBox">
      <rect y="0.3" width="1" height=".7" fill="url(#)" />
      <circle cx=".5" cy=".5" r=".35" fill="white" />
    </mask>
  </defs>
</svg>

<img id="a" src="http://1-ps.googleusercontent.com/x/s.html5rocks-hrd.appspot.com/www.html5rocks.com/en/tutorials/masking/adobe/xclip1a.png.pagespeed.ic.zv42frgxly.jpg">


        <svg>
  <defs>
    <linearGradient id="gradient" x1="0" y1="00%" x2 ="0" y2="100%">
      <stop stop-color="black" offset="0"/>
      <stop stop-color="white" offset="1"/>
    </linearGradient>

    <mask id="masking1" maskUnits="objectBoundingBox" maskContentUnits="objectBoundingBox">
      <rect y="0.3" width="1" height=".7" fill="url(#gradient)" />
      <circle cx=".5" cy=".5" r=".35" fill="black" />
    </mask>
  </defs>
</svg>

<img id="b" src="http://1-ps.googleusercontent.com/x/s.html5rocks-hrd.appspot.com/www.html5rocks.com/en/tutorials/masking/adobe/xclip1a.png.pagespeed.ic.zv42frgxly.jpg">

CSS:

img#a {
  mask: url(#masking);
}

img#b {
  mask: url(#masking1);
}

希望这可以帮助。

于 2013-05-15T09:54:44.800 回答
0

我想我明白你在做什么,但我不明白为什么你的 div_1 完全在 div_2 之下,而不是仅仅漂浮在它旁边,如果 div_1 它将被 div_2 隐藏。也许我发布你所拥有的会更容易。

于 2013-05-15T00:25:36.863 回答
0

这是我在尝试了 css 中的大部分内容后所做的。

我将 div_1 设置为 div_2 的父级,并给 div_2 一个巨大的阴影,它可以轻松地遍布整个页面,然后我将溢出作为隐藏的父级 div_1 并将其大小固定为我需要的条带的宽度和高度。它所做的只是在有限的空间中以固定的矩形形状显示 div_2 的阴影,它看起来像我需要的 div_2 后面的黑色条带,这次 div_2 后面没有任何黑色条带的干扰(记住它只是一个影子!!)。所以我有我需要的东西,它几乎可以在所有浏览器中工作。如果将来有人需要,这里是代码:)

[Code](http://jsfiddle.net/uP8UU/)
于 2013-05-16T12:58:15.353 回答