【问题标题】:Drawing hoverable triangles绘制可悬停的三角形
【发布时间】:2018-11-23 12:30:44
【问题描述】:

我想在屏幕上沿对角线绘制一个三角形,它会在悬停时改变颜色。我目前的尝试并没有真正悬停在三角形上,而是一个“黑客三角形”,它实际上是一个矩形并且不关心透明部分。

我怎么可能只在实际悬停在三角形本身上时才使它可以悬停?

body {
  padding: 0;
  margin: 0;
}

.triangle {
  width: 0;
  height: 0;
  border-style: solid;
  border-width: 100vh 0 0 100vw;
  border-color: transparent transparent transparent #007bff;
}

.triangle:hover {
  border-color: transparent transparent transparent red;
}
<div class="triangle"></div>

重复的线程建议了一个相当简单的三角形的答案,不像我的情况,它占据了屏幕的整个宽度和高度并且每一边都不相同。

【问题讨论】:

    标签: html css


    【解决方案1】:

    你可以使用clip-path

    body {
      margin: 0;
    }
    
    .triangle {
      width: 100vw;
      height: 100vh;
      background:#007bff;
      -webkit-clip-path:polygon(0 0,0 100%, 100% 100%);
      clip-path:polygon(0 0,0 100%, 100% 100%);
    }
    
    .triangle:hover {
      background:red;
    }
    <div class="triangle"></div>

    为了获得更好的支持,我会考虑倾斜转换,但由于这应该是响应式的,因此您需要一些 JS 来调整窗口调整大小时的倾斜角度:

    var w = window.innerWidth;
    var h = window.innerHeight;
    document.querySelector('.triangle').style.transform="skewY("+(Math.atan(h/w)*180/Math.PI )+"deg)";
    
    window.onresize = function(event) {
        w = window.innerWidth;
        h = window.innerHeight;
        document.querySelector('.triangle').style.transform="skewY("+(Math.atan(h/w)*180/Math.PI )+"deg)";
    };
    body {
      margin: 0;
      overflow:hidden;
    }
    
    .triangle {
      width: 100vw;
      height: 100vh;
      background:#007bff;
      transform-origin:top left;
      transform:skewY(20deg);
    }
    
    .triangle:hover {
      background:red;
    }
    <div class="triangle"></div>

    【讨论】:

    • @LazioTibijczyk 是的,这并不奇怪
    • 考虑到我希望它成为网站的主要部分,我宁愿让它在所有浏览器中都能正常工作。
    • @LazioTibijczyk 我添加了另一种方法,但我不得不使用一些 JS,我认为 IE 中不支持纯 CSS 解决方案
    • "skewY("+(Math.atan(h/w)*180/Math.PI )+"deg)"= "skewY("+(Math.atan(h/w))+"rad)"
    • 在未来(2021 年),plain CSS will suffice:transform: skewY(calc(atan(100vh / 100vw))) 甚至可能包含 calc() 甚至是可选的。
    猜你喜欢
    • 1970-01-01
    • 2014-12-10
    • 2014-07-28
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 2023-03-17
    相关资源
    最近更新 更多