【问题标题】:Circular mask an image with the use of just the image itself and pure CSS仅使用图像本身和纯 CSS 对图像进行圆形遮罩
【发布时间】:2014-05-09 00:05:07
【问题描述】:

我实际上想知道是否可以使用单个伪元素(即图像本身)将图像屏蔽为圆形?假设它是一个矩形图像(不是正方形),并且您希望将其蒙版为圆形,而不压缩图像?

所以你有:

HTML

<img src="#" class="mask">

CSS

.mask {
  A lot of CSS possibilities, up to you
}

我知道,使用父 div 并使用 overflow:hiddenborder-radius:50% 是可能的,但你可以不使用第二个伪元素来做到这一点吗?

更新!

我注意到许多用户似乎认为我只是在寻找 CSS 代码 border-radius:50% 来创建圆形,但事实并非如此。图像应该变成圆形,而不是椭圆形。您可以简单地使用彼此相等的widthheight,但随后图像会被挤压。 答案应包含未压缩的图像结果

解决方案的要求
- 图像应该是一个完美的圆形,而不是椭圆
- 无论原始纵横比如何,都不应挤压图像。 即使你使用全景图片,你也只会看到中间部分为圆形,其余部分被隐藏。

【问题讨论】:

  • 您尝试过什么,您是否在小提琴或 codepen 中有在线示例?
  • 我想不出不将 img 包裹在 span 或类似中的方法
  • BTW 伪元素不能用于 img 标签stackoverflow.com/questions/7396469/…
  • 对于发布答案的每个人,请确保您注意问题中要求在不挤压矩形图像的情况下进行此操作的部分。当前的答案都没有这样做。
  • @web-tiki 仍然感谢您的想法!我不够清楚。我已经全部更新了。

标签: image css mask


【解决方案1】:

如果您只能使用 img 标签在其自身上生成掩码,那么我能想到的唯一解决方法是:DEMO

.mask {
    width: 0px;
    height: 0px;
    border-radius: 100%;
    background:url(http://placehold.it/300x400) center;/* define position to choose clipped area */
    padding:50px;/* this makes a 100px square, so a perfect circle can be made with border-radius */
}

如果您可以使用包装器,它可以保留图像使用的原始空间,并且可以通过坐标将遮罩放置在其顶部的任何位置。 DEMO

标记:

<div class="mask r150 top100 left150">
    <img src="http://placehold.it/300x400" />
</div>

CSS:

.mask {
    position:relative;
    overflow:hidden;
    display:inline-block;/* preserve display behavior of initila image to mask*/
    box-shadow:0 0 0 1px;/* show where i stands */
}
.mask img {
    display:block;/* a way to remove bottom gap*/
}
.mask:before {
    content:'';
    position:absolute;
    border-radius:100%;
    box-shadow:0 0 0 2000px white;
}
.r150:before {
    height:150px;
    width:150px;
}
.top100:before {
    top:100px; 
}
.left150:before {
    left:150px;
}

使用额外的类可以帮助您调整不同的大小和蒙版位置。

【讨论】:

  • 嗯,这……很聪明!你认为如果不使用background:url,这将成为可能吗?让我们想象一个您不能使用父项的情况,只能使用图像本身,并且无法访问 CSS 的用户只能上传他的个人资料图片。他无法编辑background:url CSS 以匹配他的个人资料图片URL,那么他的选择是什么? - 再一次,不是一个真实的情况,而是真正检查可能性^^
  • @SanderSchaeffer 用户上传的图片应裁剪为正方形。此外,系统应该注意插入 CSS,而不是用户。并且 URL 应该保持不变,只是图像内容必须更改。
  • @SanderSchaeffer Image 在这里同时存在 html 和 css 格式,因此如果未应用 CSS,您将获得一个未屏蔽图像。如果您使用包装器,您可以尝试类似的东西,但不会减少图像最初需要的空间。 jsfiddle.net/8CuXQ/3(这些都不值得一提:)? )
  • 呵呵,我忘了那个!我经常投票给每一个足够的答案,但如果可以的话,这个答案应该得到两个。 :-) 我等了几天才接受寻找不同的方法,但这将是一个千钧一发的决定。非常感谢!
  • 没关系,我也很好奇看到其他方法,除了通过服务器脚本直接在上传时屏蔽图像,我不认为其他方法。 (除了 webkit)
【解决方案2】:

这里小提琴http://jsfiddle.net/8CuXQ/

类似这样的:

.mask {
    width: 300px;
    height: 300px;
    border-radius: 150px;
    -webkit-border-radius: 150px;
    -moz-border-radius: 150px;
}

【讨论】:

  • 我面临的问题是,使用您所拥有的确切代码,图像会在不使用父元素的情况下被压缩。以jsfiddle.net/8CuXQ/1 为例。这是你的小提琴,但有一个实际的图像。 :)
猜你喜欢
  • 2018-05-29
  • 2017-08-05
  • 1970-01-01
  • 2014-11-17
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
相关资源
最近更新 更多