V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
enchilada2020
V2EX  ›  分享发现

刚发现一个 CSS 活用案例,顺便来说下你都见过哪些类似的奇技淫巧

  •  
  •   enchilada2020 · 180 天前 · 1485 次点击
    这是一个创建于 180 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这个应该还算蛮基础的用法,用 CSS 画多选按钮来保证所有浏览器的样式都一致:

    <label class="checkbox">hover to simulate check action</label>
    
    :root {
      font-size: 80px;
      --box-width: 1em;
      --box-height: 1em;
    }
    
    .checkbox {
      position: relative;
      display: inline-block;
      padding-left: 1.5em;
      vertical-align: middle;
      cursor: pointer;
    }
    
    .checkbox::before,
    .checkbox::after {
      position: absolute;
      top: 50%;
      left: 0;
      margin-top: calc(-0.5 * var(--box-height));
      content: "";
      box-sizing: border-box;
      width: var(--box-width);
      height: var(--box-height);
    }
    
    .checkbox::before {
      border: .0625em solid #e0e0e0;
      box-shadow: 0 0 .0625em 0 rgba(0, 0, 0, .1);
      background-color: #fff;
      border-radius: .2em;
    }
    
    .checkbox:hover::after {
      margin-top: calc(-0.4 * var(--box-height));
      margin-left: calc(0.1 * var(--box-width));
      box-sizing: border-box;
      width: calc(var(--box-width) * 0.8);
      height: calc(var(--box-height) * 0.5);
      border-left: .1875em solid #7b1451;
      border-bottom: .1875em solid #7b1451;
      transform: rotate(-60deg) skew(-20deg);
    }
    

    有没有什么更好的实现方式?另外还有哪些类似的“奇技淫巧”,欢迎各位 CSS 大佬来秀操作,想开开眼界~

    6 条回复    2024-05-28 10:27:14 +08:00
    codehz
        1
    codehz  
       180 天前 via iPhone
    其实不一定要用 hover 来模拟,你可以盖一个透明的 input checkbox 然后通过:checked + 选择器来做的()
    chenalex
        2
    chenalex  
       180 天前
    我都是让 ui 直接出图
    enchilada2020
        3
    enchilada2020  
    OP
       180 天前 via Android
    @codehz 确实可以这样 只是更习惯把 input 放到 label 里面 但放里面就用不了 CSS 选择器了
    ooolooo
        4
    ooolooo  
       180 天前
    这不是所有的 UI 库都会做的事情吗, 就是要保证一致性
    codehz
        5
    codehz  
       180 天前 via iPhone
    @enchilada2020 那就外面 label 里面一个 input 一个 div/span 就可以()
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2717 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:25 · PVG 19:25 · LAX 03:25 · JFK 06:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.