我必须实现下面给出的设计,在这个设计中,手机的图像既在橙色背景中,也在橙色背景之外.顶部是背景之外,底部是内部.

如果我在这里使用z-index,那么手机的图像可以完全在背景中,也可以完全在外部.

你知道如何实现这一点吗?

enter image description here

这是手机的完整图片

enter image description here

推荐答案

这里有三个替代方案,第一个很管用,第二个和第三个更通用;它们可以用于各种剪裁形状.


Option 1:在css中,您可以使用两个重叠的电话图像:

内部图像被其包装div的圆形裁剪在底部.这是用border-radiusoverflow: hidden来完成的.

外部图像(在顶部)使用矩形围绕其垂直的中间部分进行剪裁.

因此,您将分别从外部和内部两个图像中看到手机的上半部分和下半部分.

.out {
  margin-top: 40px;
  position: relative;
}

.out>img {
  position: absolute;
  top: -30px;
  clip-path: inset(0 0 90px 0);
}

.inner {
  position: relative;
  overflow: hidden;
  background: orange;
  width: 200px;
  height: 200px;
  border-radius: 100px;
}

.inner img {
  position: absolute;
  top: -30px;
}
<div class="out">
  <div class="inner">
    <img width="200" src="https://i.stack.imgur.com/aMrYZ.png" />
  </div>

  <img width="200" src="https://i.stack.imgur.com/aMrYZ.png" />
</div>

https://jsfiddle.net/efortis/2dv5qkmg


Option 2:SVG,其中只有图像,手机的剪切蒙版是一个定制的形状.对于您的情况,形状是一个矩形加上底部的半圆形:

  +------+
  |      |
  |      |
  +-    -+
    \__/

<svg width="350" height="350" version="1.1" viewBox="0 0 350 350" xml:space="preserve" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
  <defs >
    <clipPath clipPathUnits="userSpaceOnUse" id="RoundedBottomMask">
      <path d="m -1,-0.4 v 196 h 50 a 125,125 0 0 0 125,120 125,125 0 0 0 125,-120 h 51.9 v -196 z" fill="#ee7500"/>
    </clipPath>
  </defs>
  <circle
    id="clip"
    cx="173.8"
    cy="190.10001"
    r="125"
    fill="orange"
    />
  <image
    width="224.42018"
    height="290.29099"
    preserveAspectRatio="none"
    xlink:href="https://i.stack.imgur.com/aMrYZ.png"
    x="49.370064"
    y="24.956205"
    clip-path="url(#RoundedBottomMask)"/></svg>

https://jsfiddle.net/efortis/5w0rm27b/1/


Option 3:您可以通过使用SVG剪辑路径#RoundedBottomMask作为CSSclip-path的源来组合这两种方法.

Css相关问答推荐

如何将div与图像维度进行zoom ?

为什么我不能编辑垫按钮填充?

如何在悬停时缓慢更改渐变 colored颜色 ?

悬停时可展开的按钮与屏幕右侧对齐,如何保持未悬停的按钮正确对齐?

实现前景渐变到背景的平滑混合

在Reaction中自定义ANTD日期选取器

CSS Select 器仅 Select 具有特定类名称的每行的第一个单元格

为什么 :focus 会覆盖 :focus-visible ?

如何在保持默认外观的同时更改 javaFX 中按钮的突出显示 colored颜色

在 SVG 元素上方添加标签而不移动 SVG 元素

如何使用 TailwindCSS 水平设置输入和按钮

如何根据 CSS 变量内容做一些事情?

选中时从 HTML 文本输入中移除蓝色光晕

在响应式设计中指定 HTML 文本中的首选换行点

如何设置表格单元格的最大高度?

使用 Twitter Bootstrap 使页脚粘在页面底部

如何使用 CSS 绘制复选标记/勾号?

有没有办法让字段集的宽度与它们中的控件一样宽?

将 Fixed div 设置为父容器的 100% 宽度

CSS 边距和填充速记属性顺序的助记符