当你发现好多图都能用css画出来的时候,你就会觉得css很有魅力了。//我是这么觉得的,先不考虑什么兼容问题

像漫画里出现的对话框,往往都是一个对话框然后就加入一个箭头指向说话的那一方,来表示这个内容是谁述说的。

今天认真学了一下:相关资料

首先,要知道一个对话框无非就是一个矩形和一个小三角的契合,想起小学时候教的七巧板;

所以简单来说,只要能制作出矩形和小三角即可;

矩形,一个普通块都可以算得上是矩形了,只要有足够的width和height;

那么三角形呢,这才是难点,起初完全没去研究过原来三角形可以是这么回事,在刚开始接触border的时候,只知道给块画个边框然后就知道了块的大小;

  但是border的世界真的是博大精深,当给足了它颜色与宽度,它就有了改变世界的能力。

对于上图,实际的实现也是很简单

        .div-border{
width: 0px;
height: 0px;
border-top-color: #ccFF99;
border-right-color: #ff0099;
border-bottom-color: #00ff99;
border-left-color: #9900ff;
border-width: 50px;
border-style: solid;
}
.div-trangle{
width: 0px;
height: 0px;
border-color: transparent #000;
border-width: 50px;
border-style: solid;
}

以上的css,两个类,一个就是实现上图的四种颜色,之所以会这样,颜色由border-color来去定义,而border-width则是边框宽度,针对top边框来说,border-width或者是border-top-width可以说就是最上面那个三角形的高,即直角顶点到水平边的垂直距离;//哎呀,我不想说的那么数学化- -

之所以会变成三角形,也就是因为实际的内容width和高度都变成0了,这个其实可以自行在chrome控制台边控制样式,边查看页面效果。

另外一个类主要区别在于border-color里取了transparent,这个值表示透明,效果自行演示咯。

 <body>
<div style="height:200px;">
<div class="div-border"> </div>
</div>
<div style="height:200px;"> <div class="div-trangle"> </div>
</div>
</body>

既然能得到三角形,那么怎么让矩形跟三角形位置上的组合呢?这个就要看html的一个文档流和position概念了,其实我也不是很熟。

大概原理是让矩形具有position:relative的属性, 而让三角形归属与矩形块中,并且拥有position:absolute的属性,此后,三角形就可以通过top\right\left\bottom属性值的设置来移动三角形对于其父元素矩形的位置,从而达到完美契合。

 <html>
<head>
<title>对话框</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
.div-mid{
margin: 0 auto;
width: 800px;
height: 600px;
}
.div-diabox{
width: 200px;
border-style: solid;
border-width: 1px;
border-radius: 10px;
border-color: #CCCC33;
background-color: #FFFF99;
position: relative;
margin: 0 auto;
padding:30px;
top: 30px;
}
.div-diabox .arrow-bottom-out{
width: 0px;
height: 0px;
border-style: solid;
border-color: #CCCC33 transparent transparent transparent;
border-width: 10px;
position: absolute;
top: 79px;
left: 10px;
}
.div-diabox .arrow-bottom-in{
width: 0px;
height: 0px;
border-style: solid;
border-color: #FFFF99 transparent transparent transparent;
border-width: 10px;
position: absolute;
top: 78px;
left: 10px;
}
.div-diabox .arrow-top-out{
width: 0px;
height: 0px;
border-style: solid;
border-color: transparent transparent #CCCC33 transparent;
border-width: 10px;
position: absolute;
top: -20px;
right: 10px;
}
.div-diabox .arrow-top-in{
width: 0px;
height: 0px;
border-style: solid;
border-color: transparent transparent #FFFF99 transparent;
border-width: 10px;
position: absolute;
top: -19px;
right: 10px;
}
.div-diabox .arrow-right-out{
width: 0px;
height: 0px;
border-style: solid;
border-color: transparent transparent transparent #CCCC33;
border-width: 10px;
position: absolute;
top: 10px;
right: -20px;
}
.div-diabox .arrow-right-in{
width: 0px;
height: 0px;
border-style: solid;
border-color: transparent transparent transparent #FFFF99;
border-width: 10px;
position: absolute;
top: 10px;
right: -19px;
}
.div-diabox .arrow-left-out{
width: 0px;
height: 0px;
border-style: solid;
border-color: transparent #CCCC33 transparent transparent;
border-width: 10px;
position: absolute;
top: 10px;
left: -20px;
}
.div-diabox .arrow-left-in{
width: 0px;
height: 0px;
border-style: solid;
border-color: transparent #FFFF99 transparent transparent;
border-width: 10px;
position: absolute;
top: 10px;
left: -19px;
}
</style>
</head> <body>
<div class="div-mid">
<div class="div-diabox">
<span class="arrow-bottom-out"></span>
<span class="arrow-bottom-in"></span>
雷猴码
</div>
<br/>
<br />
<div class="div-diabox">
<span class="arrow-top-out"></span>
<span class="arrow-top-in"></span>
雷猴码
</div>
<br/>
<br />
<div class="div-diabox">
<span class="arrow-right-out"></span>
<span class="arrow-right-in"></span>
雷猴码
</div>
<br/>
<br />
<div class="div-diabox">
<span class="arrow-left-out"></span>
<span class="arrow-left-in"></span>
雷猴码
</div> </div>
</body>
</html>

效果图:

当时看到这个效果的时候,还没自己实现之前,就有一个疑问,那就是三角形的颜色问题,因为三角形就是一个border,一条边而不是一个块,不能拥有多种颜色,所以实际上一个border只是一个实心颜色的图形,那怎么办呢?

解决方案是复制多一个border三角形,当然颜色要不同,只要让其位置上重叠,底部着漏出一点边,从而达到有边效果的三角形(实际是重叠的两个三角形)。

关于位置移动问题,我觉得自己研究还是挺好玩的,不过就是没拿到诀窍的感觉,还是要自己去算一下。

css制作对话框的更多相关文章

  1. 【2048小游戏】——CSS/原生js爬坑之纯CSS模态对话框&游戏结束

    引言:2048小游戏的结束界面,使用纯CSS制作模态对话框,一般做模态对话框都会使用BootStrap自带的模态对话框组件方便使用,但在制作要运行在移动端的小项目时,就不能使用BootStrap,因为 ...

  2. CSS制作三角形和按钮

    CSS制作三角形和按钮 用上一篇博文中关于边框样式的知识点,能制作出三角形和按钮. 我先说如何制作三角形吧,相信大家在平时逛网站的时候都会看到一些导航栏中的三角形吧,比如说: 网易首页的头部菜单栏中, ...

  3. 前端开发css实战:使用css制作网页中的多级菜单

    前端开发css实战:使用css制作网页中的多级菜单 在日常工作中,大家都会遇到一些显示隐藏类菜单,比如页头导航.二维码显示隐藏.文本提示等等......而这些效果都是可以使用纯css实现的(而且非常简 ...

  4. css制作漂亮彩带导航条菜单

    点击这里查看效果:http://keleyi.com/keleyi/phtml/divcss/17.htm 效果图: 以下是源代码: <!DOCTYPE html PUBLIC "-/ ...

  5. CSS 制作三角形原理剖析

    使用css制作三角形其实原理很简单,下面一步步解析. 1.html代码如下 <div class="triangle"> </div> 2.CSS代码 .t ...

  6. 纯CSS制作水平垂直居中“十字架”

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. jQuery & CSS 制作金属质感的选择按钮

    如果能把 CSS 运用好,我们创作出好的交互和效果的可能性大大增加.这篇文章中,我想与大家分享一组结合 jQuery & CSS 制作的充满金属质感的选择框效果,绝对是超级精美的效果. 在线演 ...

  8. DIV+CSS制作二级横向弹出菜单,略简单

    没有使用JavaScript控制二级菜单的显示,结果如上图所示. 代码如下: <!DOCTYPE html> <html> <head> <meta char ...

  9. 纯CSS制作三角(转)

    原原文地址:http://www.w3cplus.com/code/303.html 原文地址:http://blog.csdn.net/dyllove98/article/details/89670 ...

随机推荐

  1. 使用KRPano资源分析工具强力加密KRPano项目(XML防破解,切片图保护,JS反调试)

    软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278936(软件免费版本在群内提供) 最新博客地址:blog.turenlong.com 限时下载地址:htt ...

  2. selenium Remote Server 实现原理

    selenium作为一个出色的web automation框架,被越来越多的企业采用究其原因,框架设计的比较remarkable, 作为一个开源的框架,能够开辟出一套协议,以至于针对app测试的app ...

  3. 使用 bash 创建定时任务

    假设要增加每分钟执行一次的检测任务 (crontab -l; echo "* * * * * python check.py") | crontab 在 centos 6 上, 注 ...

  4. 修改组策略,禁止用户修改IP

    运行中打开gepdit.msc,依次打开用户配置,管理模板,网络,网络连接:在右侧将“禁止访问LAN链接组建的属性”.“为管理员启用windows2000网络连接设置”设置为已启用即可令用户无法访问网 ...

  5. box-shadow、drop-shadow 和 text-shadow

    1. box-shadow 合阴影, 对象选择器 {box-shadow:[投影方式] X轴偏移量 Y轴偏移量阴影模糊半径 阴影扩展半径 阴影颜色} box-shadow属性的参数设置取值: 阴影类型 ...

  6. Java算法之递归打破及在真实项目中的使用实例

    开心一笑 刚才领导问开发:"你觉得这个项目的最大风险是什么",开发说:"加班猝死" , 气氛尴尬了一分钟!!! 提出问题 1.递归算法简单复习 2.如何实现递归 ...

  7. Ubuntu16.04 VTK7.1.0+QT4.8.6+QtCreator开发环境配置

    VTK需要OpenGL3.0或更高版本的驱动,但虚拟机下的Ubuntu不支持OpenGL3.0,或者自己按网上教程配置之后也能支持,但过程相当繁琐,本人试验失败. 最终决心采用双系统,装好之后,执行g ...

  8. java注解处理

    1.自定义注解类型   package com.yc.annotation; import java.lang.annotation.ElementType; import java.lang.ann ...

  9. 深入理解Objective-C:Category

    摘要 无论一个类设计的多么完美,在未来的需求演进中,都有可能会碰到一些无法预测的情况.那怎么扩展已有的类呢?一般而言,继承和组合是不错的选择.但是在Objective-C 2.0中,又提供了categ ...

  10. 手把手教你玩转nginx负载均衡(五)----配置后端服务器组

    引言 在前面几篇中,我们成功的搭建起了一台nginx服务器,所以我们要重复前面的步骤,把服务器的数量增加到3台以上,我这里已经建好了另外两台,分别是centos7-22,centos7-23,对应的i ...