zoukankan      html  css  js  c++  java
  • css伪类:before及:after除了插入文字内容还能做点儿啥?画图

    全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/11181416.html

    1、什么时候用伪类:before和:after?

    结合实际开发情况,说一点自己的理解~

    (1)原本这两个伪类核心是content,用于在指定元素之前或之后插入内容,但实际开发中用的比较多的是传空字符串"",再做样式控制。

    (2)用户操作促使样式改变我们通常是采用添加类/删除类、类名切换等方法控制,但这种情况是针对已存在某dom元素,我们去控制该dom元素的样式显示

    (3)对于需要新增一个只包含样式的dom(无数据交互,也不需要通过js操作该dom)且原本不存在的情况,我们可以采用伪类实现,常用于绘图。

    例如:用户点击按钮后我们需要在按钮中绘制一个点,这种情况我们就可以采用伪类,这样可以简化页面dom树结构,仅通过样式进行控制。

    2、如何通过伪类进行绘图?以微信聊天框样式绘制为例:

    HTML代码如下:可见原本一个聊天框需要3个div dom元素(一个背景框、小尖和小尖边框)才能实现,通过伪类1个便搞定~

    <div class="main">
        <div class="test-div">今天中午吃啥?</div>
        <div class="test-div2">吃饭</div>
    </div>

    CSS代码如下:

            .main{
                height: 300px;
                padding: 50px;
                background-color: #FFCD80;
            }
            .test-div{
                line-height: 36px;
                text-align: center;
                margin-left: 20px;
                position: relative;
                width: 150px;
                height: 36px;
                border-radius: 5px;
                border: 1px solid #7f7f7f;
                background: #f0f0f0;
              }
              .test-div:before, .test-div:after{
                content: "";
                position: absolute;
                border: 6px solid transparent;
                top: 12px;
              }
              .test-div:before{
                left: -11px;
                border-right-color: #f0f0f0;
                z-index: 1;
              }
              .test-div:after{
                left: -12px;
                border-right-color: #7f7f7f;
                z-index: 0;
              }
    
              .test-div2{
                line-height: 36px;
                text-align: center;
                margin-top: 20px;
                margin-left: 20px;
                position: relative;
                width: 150px;
                height: 36px;
                border-radius: 5px;
                border: 1px solid #7f7f7f;
                background: #f0f0f0;
              }
    
              .test-div2:before, .test-div2:after{
                content: "";
                position: absolute;
                border: 6px solid transparent;
                top: 12px;
              }
              .test-div2:before{
                right: -11px;
                border-left-color: #f0f0f0;
                z-index: 1;
              }
              .test-div2:after{
                right: -12px;
                border-left-color: #7f7f7f;
                z-index: 0;
              }                    

    原理说明:

    (1)小尖的实现:利用对长宽为0的块级元素border属性画三角形,border-left及border-right颜色设置决定了小尖的朝向;

    (2)小尖边框的实现:利用:before和:after伪类画两个大小相同的三角形,但相对位置左右偏移差1px,并且白色的三角形覆盖黑色的三角形,黑色三角形自然成了白色三角形的边框;

  • 相关阅读:
    好的博客
    left join 后边的on条件 小记
    ElasticSearch构建订单服务的博客
    nacos mysql8.0修改
    maven配置
    idea常用配置
    http状态码
    Web Application:Exploded和Web Application:Archive
    将一个简单远程调用的方式例子改为异步调用 -- 2
    将一个简单远程调用的方式例子改为异步调用
  • 原文地址:https://www.cnblogs.com/dreamsqin/p/11181416.html
Copyright © 2011-2022 走看看