自己动手丰衣足食之气泡框和三角形

2023-10-06 23:30

本文主要是介绍自己动手丰衣足食之气泡框和三角形,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

气泡框(或者提示框)是网页中一种很常见的元素,大多用来展示提示信息,如下图所示:

拆分来看,形如这种气泡框无外乎就是一个矩形框+一个指示方向的三角形小箭头,要制作出这样的气泡框,如果解决了三角形小箭头就容易了。一种方法就是制作这样一个三角形箭头的图片,然后定位在矩形框上。但这种解决办法在后期更改气泡框会很不方便,可能每修改一次气泡框都要重新制作一个三角形小图标。如果我们能够直接用HTML和CSS代码实现这样一个三角形小箭头一切都迎刃而解了。

首先我们来看一下border这个属性,当我们把一个div的border-color设为不同值的时候,可以看到四边都成了一个梯形。

1
# test{ width : 50px height : 50px border-width : 50px border-style : solid border-color : #09F  #990  #933  #0C9 ;}

 

如果我们继续把这个div的width和height都设为0,可以看到四边都成了一个三角形。

1
# test{ width : 0 height : 0 border-width : 75px border-style : solid border-color : #09F  #990  #933  #0C9 ;}

 

在主流浏览器中检测一下,发现IE6中存在一个小问题,上下边能形成三角形,左右两边仍然还是梯形

通过实验发现当把div的font-size和line-height都设为0的时候,div的四边在IE6下都能形成完美的三角形:

1
#test{  width : 0 height : 0 border-width : 75px border-style : solid border-color : #09F  #990  #933  #0C9 font-size : 0 line-height : 0 ;}

很显然我们只需要其中的一个三角形,那么只需要将其他三边的color设置为透明或者跟页面背景一样的颜色,就能模拟出一个三角来,推荐将其他三边颜色设置为透明,即color的值为transparent,如果其他三边颜色跟页面背景一样,虽然视觉上只能看到一个三角,但背景颜色一旦改变,其他三边颜色也要随之改变。

1
#test{  width : 0 height : 0 border-width : 75px border-style : solid border-color : #09F  transparent  transparent font-size : 0 line-height : 0 ;}

 问题又来了,IE6下transparent无效!其他三边被设置成默认的黑色了。

但通过实验发现把border-style设置为dashed后,IE6下其他三边就能透明了!

1
#test{  width : 0 height : 0 border-width : 75px border-style : solid  dashed  dashed border-color : #09F  transparent  transparent font-size : 0 line-height : 0 ;}

 到这一步我们已经成功的模拟出了一个小三角,下一步我们把这个小三角同矩形框结合起来。先设置一个矩形框,然后把小三角定位到矩形框上。先来写出HTML结构:

1
2
3
4
< div  class="tag">
       < em ></ em >   
       CSS气泡框实现
</ div >

CSS样式:

1
2
.tag{  width : 300px height : 100px border : 5px  solid  #09F position : relative ;}
.tag em{ display : block border-width : 20px position : absolute bottom : -40px left : 100px ; border-style : solid  dashed  dashed border-color : #09F  transparent  transparent ; font-size : 0 line-height : 0 ;}

 效果如下:

现在指示方向的三角形箭头是实心的,而我们想要的是镂空的效果,这里我们再叠加一个同气泡框背景颜色一样的小三角,然后把这个叠加的小三角移动一下位置就能达到了。
首先需要对HTML结构进行调整,如下:

1
2
3
4
5
< div  class="tag">
       < em ></ em >   
       < span ></ span >
       CSS气泡框实现
</ div >

CSS样式修改为:

1
2
3
.tag{  width : 300px height : 100px border : 5px  solid  #09F position : relative background-color : #FFF ;}
.tag em{ display : block border-width : 20px position : absolute bottom : -40px left : 100px ; border-style : solid  dashed  dashed border-color : #09F  transparent  transparent ; font-size : 0 line-height : 0 ;}
.tag span{ display : block border-width : 20px position : absolute bottom : -33px left : 100px ; border-style : solid  dashed  dashed border-color : #FFF  transparent  transparent ; font-size : 0 line-height : 0 ;}

最终效果如下所示:

注意:叠加的小三角span的bottom值并不是border-width的值,两个小三角bottom的差值理论上应该是2(border-width)2的平方根

最后来把代码优化一下,以便在后期更容易维护,完整的HTML结构:

1
2
3
4
5
6
< div  class="tag">
  < div  class="arrow">
      < em ></ em >< span ></ span >
     </ div >
     CSS气泡框实现
</ div >

CSS样式修改为:

1
2
3
4
5
.tag{  width : 300px height : 100px border : 5px  solid  #09F position : relative background-color : #FFF ;}
.arrow{  position : absolute width : 40px height : 40px bottom : -40px left : 100px ; }
.arrow *{  display : block border-width : 20px position : absolute border-style : solid  dashed  dashed  dashed font-size : 0 line-height : 0 ; }
.arrow em{ border-color : #09F  transparent  transparent ;}
.arrow span{ border-color : #FFF  transparent  transparent top : -7px ;}

 

 举一反三:不规则三角箭头的气泡框又如何实现?

 

HTML结构同前面一样:

1
2
3
4
5
6
< div  class="tag">
  < div  class="arrow">
      < em ></ em >< span ></ span >
     </ div >
     CSS气泡框实现
</ div >

矩形框CSS样式稍微改动一下:

1
.tag{  width : 300px height : 100px ; position : relative background-color : #09F ;}

 重新定位一下三角箭头:

1
.arrow{  position : absolute width : 70px height : 60px left : -70px bottom : 10px ;}

元素相邻的两边border-style值设为solid(显示),另两边设为transparent(不会显示)

1
.arrow *{  display : block position : absolute border-style : dashed  solid  solid  dashed font-size : 0 line-height : 0 ; }

首先模拟一个直角三角形,把一个元素的相邻两边color设为相同的值,另外两边颜色设为透明,即可得到一个直角:

1
.arrow em{ border-color : transparent  #09F  #09F  transparent border-width : 30px  35px ;}

 

把两个直角三角形重叠在一起就可以得到一个不规则三角形

1
.arrow span{  border-width : 20px  35px ; border-color : transparent  #FFF  #FFF  transparent bottom : 0 ;}

至此,不规则三角箭头的气泡框效果已经实现。

除了通过设置元素的border来模拟小三角之外,还可以用特殊字符来模拟,用特殊字符模拟小三角同样需要用到定位和重叠覆盖,只不过不需要调整border属性了。

先来看一个菱形“◆” ,它在页面中的代码是“&#9670”,需要注意的是页面编码需要设置为utf-8,在网页中可以把◆当作文字处理,可以通过调整font-size来它的大小、通过color来设置它的颜色。

HTML结构依然用前面的,不同的是在em、span标签中加入了 ◆

1
2
3
4
5
6
< div  class="tag">
  < div  class="arrow">
      < em >◆</ em >< span >◆</ span >
     </ div >
     CSS气泡框实现
</ div >

先来设置最外层div的样式,得到一个矩形框:

1
.tag{  width : 300px height : 100px ; position : relative border : 5px  solid  #09F ;}

 

接着定位箭头最外层容器div,便于观察可以先设置一个背景色 : 

1
.arrow{  position : absolute width : 40px height : 40px left : 100px bottom : -40px overflow : hidden ;}

 

再对◆设置样式:

1
.arrow *{  display : block position : absolute font-size : 40px line-height : 40px width : 40px font-family :SimSun;  font-style : normal font-weight : normal text-align : center vertical-align : middle ;}

 

注意:为了◆主流浏览器中显示一致,需要清除浏览器的默认字体样式,特别注意这里字体的设置

再分别修改em、span标签的字体颜色,并对这两个标签定位:

1
2
.arrow em{  color : #09F top : -15px ;}
.arrow span{  color : #FFF top : -22px ;}

 

注意:该例子中em和span两个元素垂直方向相差约7px,原来同上面提到的一样,差值理论上应该是2(border-width)2的平方根

完整CSS样式:

1
2
3
4
5
.tag{  width : 300px height : 100px ; position : relative border : 5px  solid  #09F ;}
.arrow{  position : absolute width : 40px height : 40px left : 100px bottom : -40px overflow : hidden ;}
.arrow *{  display : block position : absolute font-size : 40px line-height : 40px width : 40px ; font-family :SimSun;  font-style : normal font-weight : normal ; text-align : center vertical-align : middle ;}
.arrow em{  color : #09F top : -15px ;}
.arrow span{  color : #FFF top : -22px ;}

最终效果如下:

 

 

 HTML特殊字符查询:http://ikwebdesigner.com/special-characters/

 

补充:以上方式实现小三角的过程中不可避免的增加了多余的标签,如果不要求所有浏览器中显示一致的话, 我们可以利用css3来实现这个小三角

HTML结构:

1
2
3
< div  class="tag">
     css3气泡框
</ div >

CSS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
.tag{
     width : 300px ;
     height : 100px ;
     border : 5px  solid  #09F ;
     position : relative ;
     background-color : #FFF ;
}
.tag:before,.tag:after{
     content : "" ; display : block ;
     border-width : 20px ;
     position : absolute bottom : -40px ;
     left : 100px ;
     border-style : solid  dashed  dashed ;
     border-color : #09F  transparent  transparent ;
     font-size : 0 ;
     line-height : 0 ;
}
.tag:after{
     bottom : -33px ;
     border-color : #FFF  transparent  transparent ;
}

效果同上。

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><meta http-equiv="refresh" content="2"><title></title><style>.tag {margin: 50px;width: 300px;height: 100px;border: 5px solid #09F;position: relative;background-color: #FFF;padding: 10px;}.tag:before,.tag:after {content: "";display: block;border-width: 20px;position: absolute;top: -40px;left: 10px;border-style: solid;border-color: transparent transparent #09F transparent;font-size: 0;line-height: 0;}.tag:after {top: -33px;border-color:transparent transparent #FFF transparent ;}</style></head><body><div class="tag">css3气泡框</div></body></html>

 

现在看到了很多带小三角形的方框,如微信、Mac版的QQ、QQ空间的时间轴等等,在聊天或者是发表的状态的内容外面都有一个带小三角形的矩形框包围着,感觉看着很不错,于是决定亲自动手写一个,我上次用的是偏移背景图片法,那么今天就不用图片,用CSS3实现一下,下面我们来看一下实现代码。

首先我们来看一下CSS3实现三角形原理:其实就是对于transparent的应用

假如html代码是这样的

<div class="arrow-up"><!--向上的三角-->
</div>
<div class="arrow-down"><!--向下的三角-->
</div>
<div class="arrow-left"><!--向左的三角-->
</div>
<div class="arrow-right"><!--向右的三角-->
</div>

下面用CSS3分别实现向上、下、左、右的三角形

/*箭头向上*/
.arrow-up {width:0; height:0; border-left:30px solid transparent;border-right:30px solid transparent;border-bottom:30px solid #fff;
}/*箭头向下*/
.arrow-down {width:0; height:0; border-left:20px solid transparent;border-right:20px solid transparent;border-top:20px solid #0066cc;
}/*箭头向左*/
.arrow-left {width:0; height:0; border-top:30px solid transparent;border-bottom:30px solid transparent; border-right:30px solid yellow; 
}/*箭头向右*/
.arrow-right {width:0; height:0; border-top:50px solid transparent;border-bottom: 50px solid transparent;border-left: 50px solid green;
}

ok代码整理在一起后,效果大概是这样的:



好了原理我们了解了,那么我们就实战一下吧,来实现带小三角形的div框。


首先,写出html代码:

<div class="entry"><div class="entry-trangle"><!--本Div只来实现三角形,无其他作用--></div>hello,我出生了<br/>hello,我出生了<br/>hello,我出生了<br/>hello,我出生了<br/>
</div>

挂载有类"entry-trangle"的div只用来实现小三角形。对这个div用css3的transparent实现三角形,然后绝对定位、设置z-index:-1;、margin-left:-19px;,看下面css代码:

<style type="text/css">*{margin:0;padding:0;}body{background:#666;font:14px/20px "Microsoft YaHei";}.entry{margin:0 auto;margin-top:20px;width:280px;            background:#fff;padding:10px;/*设置圆角*/-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;}.entry-trangle{position:absolute;margin-left:-19px;width:0;height:0;border-top:10px solid transparent;border-bottom:10px solid transparent;border-right:10px solid #fff;z-index:-1;}
</style>

border-radius:5px;用来实现圆角;绝对定位、z-index:-1;的目的都是使控制小三角形的div在最底层,不影响父级div里面的内容布局。

好了,我们已经完工了,这是

CSS三角形绘制方法,学会了这个,其它的也就简单:http://www.jb51.net/article/42513.htm

我们的网页因为 CSS 而呈现千变万化的风格。这一看似简单的样式语言在使用中非常灵活,只要你发挥创意就能实现很多比人想象不到的效果。特别是随着 CSS3 的广泛使用,更多新奇的 CSS 作品涌现出来。

今天给大家带来 CSS 三角形绘制方法

复制代码 代码如下:

#triangle-up {
    width: 0;
    height: 0;
    border-left: 50px solid transparent;
    border-right: 50px solid transparent;
    border-bottom: 100px solid red;
}


复制代码 代码如下:

#triangle-down {
    width: 0;
    height: 0;
    border-left: 50px solid transparent;
    border-right: 50px solid transparent;
    border-top: 100px solid red;
}


复制代码 代码如下:

#triangle-left {
    width: 0;
    height: 0;
    border-top: 50px solid transparent;
    border-right: 100px solid red;
    border-bottom: 50px solid transparent;
}


复制代码 代码如下:

#triangle-right {
    width: 0;
    height: 0;
    border-top: 50px solid transparent;
    border-left: 100px solid red;
    border-bottom: 50px solid transparent;
}


复制代码 代码如下:

#triangle-topleft {
    width: 0;
    height: 0;
    border-top: 100px solid red;
    border-right: 100px solid transparent;
}


复制代码 代码如下:

#triangle-topright {
    width: 0;
    height: 0;
    border-top: 100px solid red;
    border-left: 100px solid transparent; 
}


复制代码 代码如下:

#triangle-bottomleft {
    width: 0;
    height: 0;
    border-bottom: 100px solid red;
    border-right: 100px solid transparent;
}


复制代码 代码如下:

#triangle-bottomright {
    width: 0;
    height: 0;
    border-bottom: 100px solid red;
    border-left: 100px solid transparent;
}

这篇关于自己动手丰衣足食之气泡框和三角形的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/154577

相关文章

【WebGPU Unleashed】1.1 绘制三角形

一部2024新的WebGPU教程,作者Shi Yan。内容很好,翻译过来与大家共享,内容上会有改动,加上自己的理解。更多精彩内容尽在 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信号:digital_twin123 在 3D 渲染领域,三角形是最基本的绘制元素。在这里,我们将学习如何绘制单个三角形。接下来我们将制作一个简单的着色器来定义三角形内的像素

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA

CSS实现DIV三角形

本文内容收集来自网络 #triangle-up {width: 0;height: 0;border-left: 50px solid transparent;border-right: 50px solid transparent;border-bottom: 100px solid red;} #triangle-down {width: 0;height: 0;bor

【动手学深度学习】04 数据操作 + 数据预处理(个人向笔记)

数据操作 N维数组是机器学习和神经网络的主要数据结构其中 2-d 矩阵中每一行表示每一行表示一个样本 当维度来到三维的时候则可以表示成一张图片,再加一维就可以变成多张图片,再加一维则可以变成一个视频 访问元素 冒号表示从冒号左边的元素到冒号右边的前一个元素(开区间),其中如果左边为空,那么表示从第一个开始,如果右边为空,那么表示访问到最后一个,如果两边都为空,则表示全部访问其中一行中我们指

双指针(5)_单调性_有效三角形的个数

个人主页:C++忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C++忠实粉丝 原创 双指针(5)_单调性_有效三角形的个数 收录于专栏【经典算法练习】 本专栏旨在分享学习C++的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 题目链接: 2.题目描述 : 3.解法 :     解法一(暴力枚举) :     算法思路 :     代码展示 : 暴力枚

利用向量积(叉积)计算三角形的面积和多边形的面积(hdu2036)

开始撸计算几何题目了。。。。。。。 预备知识:叉乘求多边形面积 参考证明资料: 公式证明: http://www.cnblogs.com/xiexinxinlove/p/3708147.html 高中知识: http://wenku.baidu.com/view/867e6edfad51f01dc281f11a.html #include<stdio.h>#inclu

elementUI table 给表头添加气泡显示(鼠标悬浮显示注释)

elementUI table 给表头添加气泡显示(鼠标悬浮显示注释) 前言:文档显示:(使用插槽,我看看到底是怎么个事儿)文档代码:修改后的效果:页面效果: 前言: 公司出现这样的需求,产品要求给表格的表头部分字段添加解释说明,让用户知道这个字段的详细含义。之前倒是没有遇到过类似的问题,并不清楚怎么添加,于是去看element UI 组件文档。 element UI 文档

小白入门LLM大模型最牛X教程------上交《动手学大模型应用开发》!

本项目是一个面向小白开发者的大模型应用开发教程,旨在结合个人知识库助手项目,通过一个课程完成大模型开发的重点入门,涵盖了大模型应用开发的方方面面,主要包括: 教程一共有七章内容: 《动手学大模型》是上海交大 更新的系列编程实践教程。从已经跟新的内容来看,侧重安全垂直方向。命名是向他们的学长李沐的《动手学深度学习》课程致敬。 感受下大纲、课件和教程风格: 微调与部署 提示学习与思维

Highcharts气泡填充图

https://www.hcharts.cn/demo/highcharts/packed-bubble/ 如果分类种类有很多,一种的柱状图显示出来界面非常拥挤,此时可以使用气泡图来表示。 首先我们要下载引入,这里参考此文档即可。 https://www.hcharts.cn/docs/install-from-npm/ drawbar() {let that = this;c

Qt QPushButton 按钮添加数字气泡

使用场景 项目中,在某个按钮的右上角添加数字气泡是一个很常见的功能,可以用新建一个组合类来实现。不过这样比较麻烦,如果加气泡是后面的需求,可能改动的地方较多。 下面介绍2种比较简单,不需要改动按钮响应的方式。 实现效果图 方案1 方案2 实现  方案1:直接在按钮内部贴一个 QLabel 这种情况按钮不能太小,按钮的图片不能占整个按钮最好不要太满。不然效果不理想。 #pr