美文网首页
css用伪元素制作气泡框&百度地图label气泡

css用伪元素制作气泡框&百度地图label气泡

作者: 小雨喜欢大晴天 | 来源:发表于2020-04-16 15:05 被阅读0次

    前几天学习了一下伪元素,今天有个页面正好用到了。

    伪元素

    伪元素是不存在于文档树中的元素。

    伪元素本质上是创建了一个有内容的虚拟容器

    一般用来制作一些图标。好处是可以简化页面的标签。

    用伪元素制作一个气泡框

    需求设计图:


    气泡框

    页面结构

    <div class='pop'>
      <div class='popContent'>
        <span>文字内容</span>
      </div>
    </div>
    

    less样式

    .pop{
        position: absolute;
        background-color: #ffffff;
        font: 12px arial, sans-serif;
        z-index: 80;
        left: 10px;
        top: 50px;
        border-radius: 7px;
        box-shadow: 0px 5px 14px 1px #f1dddd; //边框阴影:左右偏移 上下偏移 模糊范围 阴影宽度 阴影颜色
        .popContent{
          margin: .2rem;
          word-break: keep-all;
          &::before {                     //before伪元素,&是less语法,代表嵌套结构中的父级元素
            content: '';
            border: solid transparent;    //利用border画一个等腰三角形
            border-width: 8px 5px;
            border-top-color: #FFFFFF;  //三角形和主框颜色一致
            position: absolute;           //定位到主框下部中央
            left:  calc(~'50% - 5px');
            top: 100%;
          }
        }
      }
    
    

    效果


    实际效果

    百度地图Label标签自定义为气泡框

    思路:百度地图文本标注Label的内容支持HTML,将气泡框的页面写入,就可以通过class设置样式了
    以下代码是在百度地图API示例基础上改的,粘过去可以直接看效果

    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
        <style type="text/css">
            body, html,#allmap {
              width: 100%;
              height: 100%;
              overflow: hidden;
              margin:0;
              font-family:"微软雅黑";
            }
          
            .popContent{
              margin: .2rem;
              word-break: keep-all;
            }
            .popContent::before {                     
              content: '';
              border: solid transparent;    
              border-width: 8px 5px;
              border-top-color: #FFFFFF;  
              position: absolute;           
              left:  calc(50% - 5px);
              top: 100%;
            }
        }
        </style>
        <script type="text/javascript" src="//api.map.baidu.com/api?v=2.0&ak=您的密钥"></script>
        <title>文本标注</title>
    </head>
    <body>
        <div id="allmap"></div>
    </body>
    </html>
    <script type="text/javascript">
        // 百度地图API功能
        var map = new BMap.Map("allmap");
        var point = new BMap.Point(116.417854,39.921988);
        map.centerAndZoom(point, 15);
        var opts = {
          position : point,    // 指定文本标注所在的地理位置
          offset   : new BMap.Size(30, -30)    //设置文本偏移量
        }
        var label = new BMap.Label("<div class='popContent'>欢迎使用百度地图,这是一个简单的文本标注哦~</div>", opts);  // 创建文本标注对象
        label.setStyle({ border:'none',borderRadius: '7px',boxShadow: '0px 5px 14px 1px #f1dddd',transform: 'translateX(calc(-50% + 11px))'});
    
        map.addOverlay(label);   
    </script>
    

    注意:
    vue中使用,要把样式写在全局样式中(为什么写在组件样式中没有效果?)
    label的样式可以通过label.setStyle来进行设置,或者通过.BMapLabel进行设置,这个类名是百度地图自动生成的,
    如果一个项目中有多种label样式,可以通过setStyle分别进行设置,或者在全局样式文件中通过地图的id加上label的类名进行更精确的选择。

    相关文章

      网友评论

          本文标题:css用伪元素制作气泡框&百度地图label气泡

          本文链接:https://www.haomeiwen.com/subject/zxrqwctx.html