巧用 pointer-events 只给伪元素加点击事件

给元素加上 pointer-events:none; 的 CSS 属性即可禁止鼠标点击, 值得注意的是, 只能禁止鼠标事件, 键盘事件等不能禁止.

一. 需求描述:

  1. 有一个输入框, 输入内容按回车键之后输入的内容即时显示在页面上;
  2. 当没有输入过内容时, 显示 nothing~ 提示语;
  3. 按回车后, 输入框的内容清空;
  4. 页面上显示的每一项内容可以通过一个删除按钮删除.

二. 决定使用 CSS3 的伪类和伪元素

  1. 提示语使用 :empty, 当父元素里面没有内容时, 会自动应用这个样式:
.wrapper {
    margin: 100px;
}

ul:empty::after {
    content: 'nothing~';
}

    巧用 pointer-events 只给伪元素加点击事件_第1张图片

    注意: ul 不能有空格, 空格也算是子元素.

    1. 利用 JavaScript 的 onkeydown 事件判断回车事件, 将输入框里的内容追加到 ul 中, 给每一项 li 添加 ::after 伪元素, 设计它的样式为一个按钮的样子:
    
    #ul {
        display: flex;
        flex-direction: column;
        width: 200px;
        padding: 2px;
        list-style: none;
        text-decoration: none;
    }
    
    #ul>li {
        margin: 5px 0;
        pointer-events: none;
    }
    
    #ul>li::after {
        pointer-events: auto;
        content: '×';
        float: right;
        width: 15px;
        height: 15px;
        margin: 0 -20px;
        padding: 2px 4px;
        text-align: center;
        line-height: 15px;
        color: #505739;
        background-color: #eae0c2;
        background: linear-gradient(to bottom, #eae0c2 5%, #ccc2a6 100%);
        border-radius: 5px;
        box-shadow: 0px 0px 2px -1px #1c1b18;
        text-shadow: 0px 1px 0px #ffffff;
        cursor: pointer;
    }
    
    #ul>li:hover::after {
        background-color: #ccc2a6;
        background: linear-gradient(to bottom, #ccc2a6 5%, #eae0c2 100%);
    }
    
    
    
    巧用 pointer-events 只给伪元素加点击事件_第2张图片
    1. 注意 pointer-events 的使用
      本来, 未使用 pointer-events 之前, 当点击 li 这一项任何位置都会通过 removeChild(e.target) 移除这一项, 我只是想在点击设计的按钮时删除这一项, 将 li 应用 pointer-events: none; 禁止响应鼠标的点击事件, li::after 应用 pointer-events: auto; 解除禁止响应, 便可以在只点击伪元素的时候删除 li .

    你可能感兴趣的:(巧用 pointer-events 只给伪元素加点击事件)