CSS伪类+border实现Banner标签、冒泡式提醒等

一、前言
在实现Banner和冒泡式提醒前,我们可以先了解一下border的实现规律,语言不好表述,直接上代码和效果图。
  width: 0; height: 0;
  border-top:20px solid;
  border-left:20px solid red;
  border-right:20px solid green;
  border-bottom:20px solid blue;


在div中书写内容


显而易见,border的填充方式是三角形填充,那我们便可以进行一些有用的变化,实现一些经常用的图形。
下拉列表处,我们经常用到,如果为了用这个小图形,再引入一个图片,在background-position定位,不仅加大网站加载量,还书写麻烦。
代码如下:(对比图一可知,这只是top部分,所以别的部分border-color: transparent即可)
 border-top:20px solid;
 border-left:20px solid transparent;
 border-right:20px solid transparent ;
 border-bottom:20px solid transparent;

类似图形亦可以类比实现。
其二我们要了解一下CSS伪类的知识,CSS的伪类还是比较强大的,在此不赘述,想学习的可以去查资料(这里主要使用before和after)
二、Banner标签的实现(效果图如下)
扩大分析此图
可见,此Banner标签有三部分组成,上部和左下部的实现便是简单border的应用,关键在于两点,其一,content部分(即本图中的”图片“);其二在于如何用一个标签实现三部分功能。
首先我是这么写的
.Banner {position:relative;margin:20px;}
.Banner:before {					
padding-right:10px;font-weight:bold;line-height:0px;
color:#000;height:0px;
border: 15px solid #EE7600;			
border-right-color: transparent;	   
content: "图片";					
box-shadow:-0px 5px 5px -5px #000;
}

很简单,content需要占用空间(类比上面的图二),那Banner标签是如何实现的那?
这就是absolute(绝对定位)的强大了,可以说是一种高级的应用。
absolute有两大特点:其一,原地漂浮性,即飘到对应位置的正上空;其二,不占据任何宽高。(以后有机会我会更详尽的书写一下absolute的高级应用)
因此加上absolute之后,content就自觉的飘升上空,Banner实现完毕。(而且我感觉左下角的那个视觉差异用的赞,开始我还想了很多方案,但都写不出来)

.Banner {position:relative;margin:20px;}
.Banner:before {
position:absolute;top:5px;left:-8px;z-index:1;						/*定位相关*/
padding-right:10px;font-weight:bold;line-height:0px;
color:#000;height:0px;
border: 15px solid #EE7600;			/*利用的是border属性*/
border-right-color: transparent;	   /*去掉右边的边框*/
content: "图片";					/*这里定义标签上的文字*/
box-shadow:-0px 5px 5px -5px #000;
}
.Banner:after {				/*第二部分的效果*/
content: "";
position:absolute;top:35px;left:-8px;
border: 4px solid #89540c;
border-left-color: transparent;		
border-bottom-color: transparent;
}

三、冒泡式提醒的设计
第二个图比较简单,就是两个伪类的叠加,border-radius:50%. + absolute 定位
第一个图初一看感觉特别简单,感觉只需加一个伪类便可,然后得到了如下的结果

颜色不对,只使用一个伪类是存在问题的,于是聚聚们就想了一个很赞的方法,叠加,第一个图叠加第二个图,边框和内容颜色不就很搭配了吗?(不得不说这种想法很厉害)但其实也是存在bug的因为他们是无法完全遮盖的,见下图

放大后可见,斜边其实是有一段距离的,但由于单位过小重合了。


  #tips{
  width:200px;height:100px;padding:5px;
  border:1px solid;border-radius:10px;
  position:absolute;display:none;top:-130px;
  background:#D3D3D3;
  }
  #tips:before{content:"";width:0;height:0;
  border-top:10px solid ;border-bottom:5px solid transparent ;border-left:10px solid ;border-right:16px solid transparent;
  position:absolute;left:45%;top:101%;}
  #tips:after{content:"";width:0;height:0;
  border-top:9px solid #D3D3D3 ;border-bottom:4px solid transparent ;border-left:9px solid #D3D3D3;border-right:15px solid transparent;
  position:absolute;left:45.5%;top:100%;}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值