如何在CSS中实现曲线背景?

发布于 2025-02-11 22:17:49 字数 1890 浏览 1 评论 0原文

我有一个具有曲线背景的着陆页。请参考以下图像。从CSS编码时,我想知道最好的方法。我还需要做出响应迅速,并且我将Bootstrap用作CSS框架。以下是我所做的。

我已经使用了SVG图像作为背景,并将其用于以下方式:在伪级之前显示在底部。而且,我还从SVG中删除了宽度和高度,并保留了视图框,并将PreserveSpectratio =“ Xminymin Meets”添加到SVG中,以使其响应能力。 (请注意,这些属性未添加到JSFIDDLE中的示例中)

创建这些弯曲背景的最佳方法是什么?

jsfiddle

.hero-container {
  background-image: url(https://images.unsplash.com/photo-1581362508717-f542c1ecf295?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1651&q=80);
  background-size: cover;
  background-repeat: no-repeat;
  background-position: top center;
  padding: 16.625rem 0;
}

.hero-container:after {
  content: url('http://svgshare.com/i/Hud.svg');
  position: absolute;
  width: 100%;
  height: auto;
  bottom: -85px;
}
<link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.css">
<section class="hero-container position-relative">
  <div class="container">
    <div class="row">
      <div class="col-md-7 col-xs-12">
        <h1 class="mb-3">Lorem ipsum dolor sit amet</h1>
        <p class="mb-4 text-white">Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet</p>
        <button class="btn btn-secondary">Register My Club</button>
      </div>
    </div>
  </div>
</section>

I have a landing page with a curve background. Please refer to the following image. I would like to know the best approach when coding this from CSS. I also need to make this responsive and I'm using bootstrap as a CSS framework. Following is what I have done.

I have used an SVG image as the background and used it with :before pseudo-class to display in the bottom. And also I have removed width and height from the SVG and kept the view box and added preserveAspectRatio="xMinYMin meet" to SVG to make it responsive. (Please note these attributes not added to the example in JSFiddle)

What is the best approach to create these curvy backgrounds?

JSFIDDLE

.hero-container {
  background-image: url(https://images.unsplash.com/photo-1581362508717-f542c1ecf295?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1651&q=80);
  background-size: cover;
  background-repeat: no-repeat;
  background-position: top center;
  padding: 16.625rem 0;
}

.hero-container:after {
  content: url('http://svgshare.com/i/Hud.svg');
  position: absolute;
  width: 100%;
  height: auto;
  bottom: -85px;
}
<link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.css">
<section class="hero-container position-relative">
  <div class="container">
    <div class="row">
      <div class="col-md-7 col-xs-12">
        <h1 class="mb-3">Lorem ipsum dolor sit amet</h1>
        <p class="mb-4 text-white">Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet</p>
        <button class="btn btn-secondary">Register My Club</button>
      </div>
    </div>
  </div>
</section>

enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

櫻之舞 2025-02-18 22:17:49

我将考虑与先前答案使用mask径向梯度。只需调整两个变量,直到获得所需的结果:

.box {
  height:300px;
  background: url(https://images.unsplash.com/photo-1581362508717-f542c1ecf295?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1651&q=80) center/cover;
  -webkit-mask:
    radial-gradient(var(--r1,100%) var(--r2,50%) at top   ,white 79.5%,transparent 80%) top left,
    radial-gradient(var(--r1,100%) var(--r2,50%) at bottom,transparent 79.5%,white 80%) top center,
    radial-gradient(var(--r1,100%) var(--r2,50%) at top   ,white 79.5%,transparent 80%) top right;
  mask:
    radial-gradient(var(--r1,100%) var(--r2,50%) at top   ,white 79.5%,transparent 80%) top left,
    radial-gradient(var(--r1,100%) var(--r2,50%) at bottom,transparent 79.5%,white 80%) top center,
    radial-gradient(var(--r1,100%) var(--r2,50%) at top   ,white 79.5%,transparent 80%) top right;
   /* adjust the 150% to control the covered area, the bigger the value the bigger the area will be*/
  -webkit-mask-size:33.4% 150%;
  -webkit-mask-repeat:no-repeat;
  mask-size:33.4% 150%;
  mask-repeat:no-repeat;
}
<div class="box" style="--r1:130%;--r2:71.5%">

</div>

要理解技巧bask background

.box {
  height:300px;
  background:
    radial-gradient(var(--r1,100%) var(--r2,50%) at top   ,red 79.5%,transparent 80%)  top left,
    radial-gradient(var(--r1,100%) var(--r2,50%) at bottom,transparent 79.5%,blue 80%) top center,
    radial-gradient(var(--r1,100%) var(--r2,50%) at top   ,red 79.5%,transparent 80%)  top right;
  mask:
    radial-gradient(var(--r1,100%) var(--r2,50%) at top   ,red 79.5%,transparent 80%)  top left,
    radial-gradient(var(--r1,100%) var(--r2,50%) at bottom,transparent 79.5%,blue 80%) top center,
    radial-gradient(var(--r1,100%) var(--r2,50%) at top   ,red 79.5%,transparent 80%)  top right;
  background-size:33.4% 150%;
  background-repeat:no-repeat;
  border:1px solid;
}
<div class="box" style="--r1:130%;--r2:71.5%">

</div>


将其应用于您的代码:

.hero-container {
  background: url(https://images.unsplash.com/photo-1581362508717-f542c1ecf295?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1651&q=80) top/cover;
  padding: 16.625rem 0;
  -webkit-mask:
    radial-gradient(var(--r1,160%) var(--r2,68.15%) at top   ,white 79.5%,transparent 80%) top left,
    radial-gradient(var(--r1,160%) var(--r2,68.15%) at bottom,transparent 79.5%,white 80%) top center,
    radial-gradient(var(--r1,160%) var(--r2,68.15%) at top   ,white 79.5%,transparent 80%) top right;
  mask:
    radial-gradient(var(--r1,160%) var(--r2,68.15%) at top   ,white 79.5%,transparent 80%) top left,
    radial-gradient(var(--r1,160%) var(--r2,68.15%) at bottom,transparent 79.5%,white 80%) top center,
    radial-gradient(var(--r1,160%) var(--r2,68.15%) at top   ,white 79.5%,transparent 80%) top right;
  -webkit-mask-size:33.4% 140%; 
  -webkit-mask-repeat:no-repeat;
  mask-size:33.4% 140%;
  mask-repeat:no-repeat;
}
<link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.css">
<section class="hero-container position-relative">
  <div class="container">
    <div class="row">
      <div class="col-md-7 col-xs-12">
        <h1 class="mb-3">Lorem ipsum dolor sit amet</h1>
        <p class="mb-4 text-white">Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet</p>
        <button class="btn btn-secondary">Register My Club</button>
      </div>
    </div>
  </div>
</section>

I will consider the same idea as this previous answer to create the curve using mask and radial-gradient. Simply adjust both variables until you get the needed result:

.box {
  height:300px;
  background: url(https://images.unsplash.com/photo-1581362508717-f542c1ecf295?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1651&q=80) center/cover;
  -webkit-mask:
    radial-gradient(var(--r1,100%) var(--r2,50%) at top   ,white 79.5%,transparent 80%) top left,
    radial-gradient(var(--r1,100%) var(--r2,50%) at bottom,transparent 79.5%,white 80%) top center,
    radial-gradient(var(--r1,100%) var(--r2,50%) at top   ,white 79.5%,transparent 80%) top right;
  mask:
    radial-gradient(var(--r1,100%) var(--r2,50%) at top   ,white 79.5%,transparent 80%) top left,
    radial-gradient(var(--r1,100%) var(--r2,50%) at bottom,transparent 79.5%,white 80%) top center,
    radial-gradient(var(--r1,100%) var(--r2,50%) at top   ,white 79.5%,transparent 80%) top right;
   /* adjust the 150% to control the covered area, the bigger the value the bigger the area will be*/
  -webkit-mask-size:33.4% 150%;
  -webkit-mask-repeat:no-repeat;
  mask-size:33.4% 150%;
  mask-repeat:no-repeat;
}
<div class="box" style="--r1:130%;--r2:71.5%">

</div>

To understand the trick replace the mask with background:

.box {
  height:300px;
  background:
    radial-gradient(var(--r1,100%) var(--r2,50%) at top   ,red 79.5%,transparent 80%)  top left,
    radial-gradient(var(--r1,100%) var(--r2,50%) at bottom,transparent 79.5%,blue 80%) top center,
    radial-gradient(var(--r1,100%) var(--r2,50%) at top   ,red 79.5%,transparent 80%)  top right;
  mask:
    radial-gradient(var(--r1,100%) var(--r2,50%) at top   ,red 79.5%,transparent 80%)  top left,
    radial-gradient(var(--r1,100%) var(--r2,50%) at bottom,transparent 79.5%,blue 80%) top center,
    radial-gradient(var(--r1,100%) var(--r2,50%) at top   ,red 79.5%,transparent 80%)  top right;
  background-size:33.4% 150%;
  background-repeat:no-repeat;
  border:1px solid;
}
<div class="box" style="--r1:130%;--r2:71.5%">

</div>


Applying this to your code:

.hero-container {
  background: url(https://images.unsplash.com/photo-1581362508717-f542c1ecf295?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1651&q=80) top/cover;
  padding: 16.625rem 0;
  -webkit-mask:
    radial-gradient(var(--r1,160%) var(--r2,68.15%) at top   ,white 79.5%,transparent 80%) top left,
    radial-gradient(var(--r1,160%) var(--r2,68.15%) at bottom,transparent 79.5%,white 80%) top center,
    radial-gradient(var(--r1,160%) var(--r2,68.15%) at top   ,white 79.5%,transparent 80%) top right;
  mask:
    radial-gradient(var(--r1,160%) var(--r2,68.15%) at top   ,white 79.5%,transparent 80%) top left,
    radial-gradient(var(--r1,160%) var(--r2,68.15%) at bottom,transparent 79.5%,white 80%) top center,
    radial-gradient(var(--r1,160%) var(--r2,68.15%) at top   ,white 79.5%,transparent 80%) top right;
  -webkit-mask-size:33.4% 140%; 
  -webkit-mask-repeat:no-repeat;
  mask-size:33.4% 140%;
  mask-repeat:no-repeat;
}
<link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.css">
<section class="hero-container position-relative">
  <div class="container">
    <div class="row">
      <div class="col-md-7 col-xs-12">
        <h1 class="mb-3">Lorem ipsum dolor sit amet</h1>
        <p class="mb-4 text-white">Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet</p>
        <button class="btn btn-secondary">Register My Club</button>
      </div>
    </div>
  </div>
</section>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文