使用css制作圆弧形背景 | 8月更文挑战

7,001 阅读2分钟

这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战

问题一

使用background制作制作一个类似下图的圆弧形渐变背景图

image.png

思路

需要在当前的基础上制作一个更大的盒子, 如下图红框部分所示 (比如设置width为150%). 然后通过设置盒子的border-bottom-left-radiusborder-bottom-right-radius来形成圆弧的效果.

image.png

设置好radius以后需要把大盒子往左边拽回一部分距离 (比如往左移动25%), 使得视口部分在大盒子的正中央, 如下图所示. 可以通过position来设置背景大盒子的位置.

image.png

代码 (流式布局)

<!-- 焦点图部分 -->
        <div class="banner">
            <!-- 利用一个标签的背景制作了大盒子的背景效果 -->
            <div class="banner-bg"></div>
            <!-- 下面是滑动焦点图部分 -->
        </div>
.banner {
    position: relative;
    width: 100%;
    height: 187px;
    overflow: hidden;
}

.banner .banner-bg {
    position: absolute;
    left: -25%;
    width: 150%;
    height: 145px;
    background-color: #C82519;
    border-bottom-left-radius: 100%;
    border-bottom-right-radius: 100%;
    background-image: linear-gradient(0deg, #f1503b, #c82519 50%);  /* 渐变 */
}

问题二

使用图片制作一个如下的弧形背景图

image.png

思路

与上面思路相同的一点是: 都需要制作一个大盒子, 并且通过设置盒子的border-bottom-left-radiusborder-bottom-right-radius来形成圆弧的效果.

不同点在于: 在下面的代码中, 没有直接设置一个宽度为150%的大盒子, 而是设置一个宽度为100%和盒子, 通过在左右两侧各padding一个25%的值来得到一个大盒子. 对于<a><img>标签来说, 就不需要进行额外的宽度设置了.

有一个值得注意的点是这次的overflow: hidden 直接设置给了父元素<div>, 通过隐藏超出部分而使子元素只能显示圆弧内的部分, 而不是直接在子元素上设置圆弧.

这时候图片距离左边是有一定距离的, 这是因为父元素设置了padding, 这个值为25%. 但这时不能直接将整个父元素表示出的大盒子向左移动25%, 这是因为这个25%是针对宽度100%而言的, 而加上左右两边的padding后整个大盒子的宽度为150%, 因此需要向左移动的距离为150%的25%, 也就是25%/150% = 1/6 = 16.666%. 所以正确的方法应该是向左移动16.666%, 而不是25%

image.png

代码

<!-- 焦点图部分 -->
    <div class="focus">
        <a href="#">
            <img src="images/banner.jpg" alt="">
        </a>
    </div>
/* 焦点图样式 */
.focus {
  width: 100%;
  padding: 0 25%;
  border-bottom-left-radius: 100%;
  border-bottom-right-radius: 100%;
  transform: translateX(-16.666%);
  overflow: hidden;
}
.focus a {
  display: block;
}
.focus a img {
  display: block;
  width: 100%;
}