用CSS画一个带阴影的三角形的示例代码

1. 思路

怎么用CSS3画一个带阴影的三角形呢 ? 有童鞋说, 这还不简单吗 网上有很多解决方案, 但其实大多都是实现不太完美的, 存在一些问题

假设我们做一个向下的三角形箭头 常见的方法大致有两种

  1. 通过边框控制, border-left和border-right设为透明, border-top设为预定的颜色即可
  2. 通过 transform 旋转盒子

方法一可以画三角形, 但是画阴影是很难做到的(如果做到的朋友, 欢迎给我留言)

2. 设计

2.1 边框法

html结构

?


1

2

3

<body>

    <div class="box"></div>

</body>

css样式

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

.box {

    position: relative;

    width: 200px;

    height: 100px;

    background: #ff8605;

    box-shadow: 2px 2px 2px rgba(0, 0, 0, .2);

}

.box::after {

    content: ‘‘;

    position: absolute;

    bottom: -9px;

    left: 45px;

    border-left: 10px solid transparent;

    border-right: 10px solid transparent;

    border-top: 10px solid #ff8605;

}

缺点很明显, 我们不能通过box-shadow的方式来设置阴影, 阴影会是一个盒子

但如果不用设阴影, 只是需要边框的话, 我们可以再定义一个伪类元素, 覆盖到三角形的下面即可

?


1

2

3

4

5

6

7

8

9

.box::before {

    position: absolute;

    bottom: -10px;

    left: 45px;

    content: ‘‘;

    border-left: 10px solid transparent;

    border-right: 10px solid transparent;

    border-top: 10px solid rgba(0, 0, 0, .1);

}

如图所示

如果要求不严格似乎也够用了. 但作为一个严峻的前端工程师! 我们还是不能容忍这种实现方法, 下面我们看一看 tranform 方法是如何解决的

2.2 transform方法

这种方法的思路就是使用transform旋转盒子, 一半被上面的容器遮挡, 一半显示出来

?


1

2

3

4

5

6

7

8

9

10

11

.box::before {

    position: absolute;

    bottom: -5px;

    left: 45px;

    content: ‘‘;

    width: 10px;

    height: 10px;

    background: #ff8605;

    transform: rotate(135deg);

    box-shadow: 1px -2px 2px rgba(0, 0, 0, .2);

}

我们似乎实现了我们想要的结果, 但是, 其实是存在一个问题的, 但因为我们的阴影面积不够大, 所以图片上看起来不明显

当我们把 box-shadow 的阴影面积扩大时, 我们发现到问题的所在了

盒子突出来了, 那怎么解决呢

我们再定义一个与容器颜色相同的盒子, 将上半部分盖住就可以啦.

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

/* transform方法 */

.box::before {

    position: absolute;

    bottom: -5px;

    left: 45px;

    content: ‘‘;

    width: 10px;

    height: 10px;

    background: #ff8605;

    transform: rotate(135deg);

    box-shadow: 1px -2px 5px rgba(0, 0, 0, .2);

}

.box::after {

    position: absolute;

    bottom: 0px;

    left: 40px;

    content: ‘‘;

    width: 20px;

    height: 20px;

    background: #ff8605;

}

要注意三角形应该用 before 定义, 覆盖的盒子应该用 after 定义, 这样盒子才能覆盖到三角形上面

实现效果:

3. 最终解决方案代码

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8" />

        <meta name="viewport" content="width=device-width" />

        <title>CSS实现带阴影效果的三角形</title>

        <style>

            .box {

                position: relative;

                width: 200px;

                height: 100px;

                background: #ff8605;

                box-shadow: 2px 2px 2px rgba(0, 0, 0, .2);

            }

            .box::before {

                position: absolute;

                bottom: -5px;

                left: 45px;

                content: ‘‘;

                width: 10px;

                height: 10px;

                background: #ff8605;

                transform: rotate(135deg);

                box-shadow: 1px -2px 5px rgba(0, 0, 0, .2);

            }

            .box::after {

                position: absolute;

                bottom: 0px;

                left: 40px;

                content: ‘‘;

                width: 20px;

                height: 20px;

                background: #ff8605;

            }

        </style>

    </head>

    <body>

        <div class="box"></div>

    </body>

</html>

原文地址:https://www.cnblogs.com/good10000/p/10583325.html

时间: 2024-10-10 16:50:09

用CSS画一个带阴影的三角形的示例代码的相关文章

css画一个提示框

用css画一个如下图的提示框: 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .dialog{ display:inline-block; padding:10px; border-radius: 4px; z-index: 2000;

QT模态对话框用法(在UI文件中设置Widget背景图,这个图是一个带阴影边框的图片——酷)

QT弹出模态对话框做法: 1.新建UI文件时,一定要选择基类是QDialog的,我的选择是:Dialog without Buttons(),如下图: 2.然后在使用的时候: MyDialog dlg(this); dlg.exec(); 如果不加this,则会在任务管理器里面产生一个新的EXE. 3.如果对话框的标题是自定义,不想使用系统的标题,这时候需要在代码中加入: setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint ); setAttr

div+css画一个小猪佩奇

用DIV+CSS画一个小猪佩奇,挺可爱的,嘻嘻. HTML部分(全是DIV) <!-- 小猪佩奇整体容器 --> <div class="pig_container"> <!-- 尾巴 --> <div class="tail_left"></div> <div class="tail_right"></div> <div class="tail_

Effective前端1---chapter 2 用CSS画一个三角形

1.CSS画三角形的画法 第一步:三角形可以用border画出来,首先一个有四个border的div长这样: <div class="triangle"></div> <style> .triangle{ margin: 100px; border-top: 40px solid #000; border-bottom: 40px solid #333; border-left: 40px solid #666; border-right: 40px

Effective前端3:用CSS画一个三角形

三角形的场景很常见,打开一个页面可以看到各种各样的三角形: 由于div一般是四边形,要画个三角形并不是那么直观.你可以贴一张png,但是这种办法有点low,或者是用svg的形式,但是太麻烦.三角形其实可以用CSS画出来.如上图提到,可以分为两种三角形,一种是纯色的三角形,第二种是有边框色的三角形,先介绍最简单的纯色三角形. 1. 三角形的画法 三角形可以用border画出来,首先一个有四个border的div应该是这样的: 然后把它的高度和宽度去掉,剩下四个border,就变成了: 再把bord

Effective前端(3)用CSS画一个三角形

来源:https://zhuanlan.zhihu.com/p/26160325 三角形的场景很常见,打开一个页面可以看到各种各样的三角形: 由于div一般是四边形,要画个三角形并不是那么直观.你可以贴一张png,但是这种办法有点low,或者是用svg的形式,但是太麻烦.三角形其实可以用CSS画出来.如上图提到,可以分为两种三角形,一种是纯色的三角形,第二种是有边框色的三角形,先介绍最简单的纯色三角形. 1. 三角形的画法 三角形可以用border画出来,首先一个有四个border的div应该是

CSS画一个三角形

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

百度前端笔试题目--css 实现一个带尖角的正方形

今天在牛客网上看到这道题,发现自己并不会,看来自己css都没怎么学习,也不怎么会用.看了下答案,不是很明白,也在网上搜集了一些资料和解法,感觉一些同学博客上也写了一些解法和拓展,所以就在这里借鉴一下咯.(参考地址:http://www.ithao123.cn/content-5672159.html) 实现图示的效果涉及到的知识主要有两点:一个是before.after伪元素,一个是border 1.before 和 after 都是css中的伪元素,通过给定一个属性content给元素添加新的

8.17 纯css画一个着重号图标

今天看到一个同事写的着重号图标,我以为是图片,仔细一看,是span标签!哇!!学习一下哈哈 图标长这样: CSS代码: .hint{ display: inline-block; width: 20px; height: 20px; line-height: 20px; border: 1px solid red; border-radius: 10px; color: red; text-align: center; margin-left: 10px; cursor: default; }