【问题标题】:How to close the gap between two rotated rectangles forming a V?如何缩小形成 V 形的两个旋转矩形之间的间隙?
【发布时间】:2022-06-12 21:57:30
【问题描述】:

所以这两个旋转的矩形形成了一个 V:

div {
  position: relative;
  left: 100px;
  display: inline-block;
  margin-left: 100px;
}
div::before {
  content: '';
  position: absolute;
  transform: rotate(-45deg);
  transform-origin: bottom right;
  width: 20px;
  height: 100px;
  background: red;
}
div::after {
  content: '';
  position: absolute;
  transform: rotate(45deg);
  transform-origin: bottom left;
  width: 20px;
  height: 100px;
  background: red;
}
<div></div>

现在如何缩小它们之间的差距?首先我认为关键是transform-origin。但是无论那里设置什么,都不能产生一个没有间隙的等腰V。

【问题讨论】:

    标签: html css


    【解决方案1】:

    如果您已经在使用变换,则可以为每个变换添加一个平移,然后将它们偏移直到它们交叉

    html {
      font-size: 16px;
    }
    
    div {
      position: relative;
      left: 100px;
      display: inline-block;
      margin-left: 100px;
    }
    
    div::before {
      content: '';
      position: absolute;
      transform: translateX(0.523em) rotate(-45deg);
      transform-origin: bottom;
      width: 1.25rem;
      height: 6.25rem;
      background: blue;
      border: 2px solid blue;
    }
    
    div::after {
      content: '';
      position: absolute;
      transform: translateX(-0.53rem) rotate(45deg);
      transform-origin: bottom;
      width: 1.25rem;
      height: 6.25rem;
      background: red;
      border: 2px solid red;
    }
    <div></div>

    【讨论】:

    • 谢谢!但是在使用相对单位而不是px 时如何获得精确的结果?
    • @Fred 具体是哪个相对单位? emrem 应该以相同的结果结束,但视口单位可能会更棘手。
    • emrem 已经足够好了。如果你给其中一个伪类另一种颜色,你会发现这些条似乎不完全匹配。
    • @Fred 查看更新。我添加了一个边框来尝试隐藏显示的小像素化并调整值直到我再也看不到它。我想我已经尽可能接近了。如果你放大你看不到它,但如果你在 100% 时它几乎看起来还在那里,但这可能是我长时间盯着它看
    • 非常感谢! :) 顺便说一句,你有没有看到我自己的答案,我又删除了,我也用红色作为右栏,还是只是巧合?
    【解决方案2】:

    您必须像下面这样更新 transform-origin。您不需要考虑bottom,而是略高于底部(100% - 10px)。 10px 是宽度的一半

    div {
      position: relative;
      left: 100px;
      display: inline-block;
      margin-left: 100px;
      width: 20px;
      height: 100px;
    }
    div::before,
    div::after{
      content: '';
      position: absolute;
      inset: 0;
      transform: rotate(-45deg);
      transform-origin: 50% calc(100% - 10px);
      background: red;
    }
    
    div::after {
      transform: rotate(45deg);
      background: blue;
    }
    <div></div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 2011-07-05
      • 2012-06-13
      • 2014-03-16
      • 2012-05-07
      相关资源
      最近更新 更多