绝对定位旋转div的角落

3
这是我的 代码
我有一个父级 div 和另一个旋转了 6 度的子 div。
父级 div 的 CSS 如下:
#side-left {
    background: #f5f5f5;
    overflow: hidden;
    position: absolute;
    top: 0;
    left: 0;
    width: 50%;
    height: 100%;
}

还有旋转的三角形:

.solid-triangle {
    background: #c9dee2;
    border-left: 3px solid black;
    position: absolute;
    height: 110%;
    width: 145px;
    top: -10px;
    right: 0;
    -webkit-transform: rotate(6deg);
    -moz-transform: rotate(6deg);
    transform: rotate(6deg);
    transform-origin: left bottom;
}

基本上,我希望黑色边框的顶部位于父div的右上角,就像这样:enter image description here。我可以通过调整右侧的绝对定位(目前为0)来使它与之对齐,但当父div的高度发生变化时(由于在右侧添加/删除更多文本),数值会混乱。我看到了一些关于90度旋转的jQuery解决方案,但没有一个适用于我的6度旋转。

8.1度似乎命中了右上角 https://jsfiddle.net/nkqsnmwm/2/ - Andrew
只需更改 top: -120px; 就可以看到变化。 - Hardik Bharadava
这里是您的(Fiddle)[https://jsfiddle.net/nkqsnmwm/5/]。 - Hardik Bharadava
5个回答

5
我已经为您排列好了。
您的变换原点颠倒了,您想要的是右上角而不是左下角。
并将左侧从0px更改为-145px

https://jsfiddle.net/nkqsnmwm/3/

* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
#main-wrap {
  clear: both;
  overflow: hidden;
  position: relative;
}
#side-right {
  width: 50%;
  float: right;
  padding-left: 20px;
}
#side-left {
  background: #f5f5f5;
  overflow: hidden;
  position: absolute;
  top: 0;
  left: 0;
  width: 50%;
  height: 100%;
}
.solid-triangle {
  background: #c9dee2;
  border-left: 3px solid black;
  position: absolute;
  height: 110%;
  width: 145px;
  top: -10px;
  right: -145px;
  -webkit-transform: rotate(6deg);
  -moz-transform: rotate(6deg);
  transform: rotate(6deg);
  transform-origin: top right;
}
<div id="main-wrap">
  <div id="side-left">
    <div class="solid-triangle"></div>
  </div>

  <div id="side-right">
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam tristique tincidunt magna, vitae iaculis erat. Sed vel risus dolor. Sed dictum convallis luctus. Nulla ac odio placerat, molestie ante maximus, malesuada ipsum. Proin pharetra imperdiet
      metus ut vestibulum. Phasellus pharetra, tellus sit amet viverra ultrices, sapien tellus lobortis nisi, nec placerat nisl purus nec lacus. Sed neque risus, fringilla ac elit ac, placerat porttitor nisl. Donec nec facilisis nulla, in iaculis justo.
      Fusce in mi eros. Sed semper felis rhoncus, sodales purus sed, semper massa. Morbi laoreet, purus non dignissim aliquet, ante nulla malesuada ligula, dignissim finibus nulla tortor vel ex. Nullam quis efficitur libero. Sed pellentesque sodales lacinia.
      Donec vitae faucibus purus, sed luctus lacus.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam tristique tincidunt magna, vitae iaculis erat. Sed vel risus dolor. Sed dictum convallis luctus. Nulla ac odio placerat, molestie ante maximus,
      malesuada ipsum. Proin pharetra imperdiet metus ut vestibulum. Phasellus pharetra, tellus sit amet viverra ultrices, sapien tellus lobortis nisi, nec placerat nisl purus nec lacus. Sed neque risus, fringilla ac elit ac, placerat porttitor nisl.
      Donec nec facilisis nulla, in iaculis justo. Fusce in mi eros. Sed semper felis rhoncus, sodales purus sed, semper massa. Morbi laoreet, purus non dignissim aliquet, ante nulla malesuada ligula, dignissim finibus nulla tortor vel ex. Nullam quis
      efficitur libero. Sed pellentesque sodales lacinia. Donec vitae faucibus purus, sed luctus lacus.</p>

    <p>Aliquam lacinia sagittis dolor, a consequat felis blandit in. Praesent at orci mi. Nunc imperdiet semper rhoncus. In lectus ipsum, scelerisque vel nulla nec, auctor bibendum lectus. Pellentesque dictum purus diam, et vulputate eros varius vel. Nunc
      tempor nisi a tellus ornare feugiat. Sed dignissim, turpis sed mollis fermentum, purus eros vestibulum nulla, at viverra neque dui sit amet metus. Donec euismod libero luctus diam imperdiet, a vulputate arcu malesuada. Proin tincidunt aliquam dui,
      nec efficitur nisi laoreet ac. Proin faucibus, purus eget aliquet pretium, est ex dapibus massa, ut malesuada lectus dolor sit amet ante. Morbi volutpat enim vel ex tempor imperdiet. Phasellus pretium felis non libero accumsan, sed ultricies nulla
      iaculis.</p>

    <p>Morbi ac sagittis nunc. Aliquam erat volutpat. Ut nulla ante, efficitur eu tincidunt a, vestibulum sit amet urna. Vestibulum tristique aliquam lacus vitae consectetur. Mauris euismod velit sit amet orci commodo, in consectetur urna rutrum. Duis ut
      turpis ac lacus accumsan tincidunt vitae eget tortor. Curabitur lacinia nibh mattis lacinia varius. Quisque posuere felis eget mollis sagittis. Vestibulum lacinia volutpat leo ac dignissim. Pellentesque sodales metus at massa malesuada vulputate.
      Sed vehicula magna ut sapien sodales suscipit. Praesent dictum convallis diam, sed faucibus felis rutrum quis. Morbi convallis rutrum dui et varius. Vestibulum dapibus imperdiet dolor, at sollicitudin risus accumsan in.</p>
  </div>
</div>


打败我 30 秒。正是我发现它能工作的方法。 - evolutionxbox
非常感谢!我也错过了那个正确的位置:-145像素;之前我尝试过使用右上角的起点,但完全忽略了负向右位置。 - Ashley
啊抱歉,我没有提到left:-145,我以为你已经提到了。我更新了答案来显示left修正。 - user4563161

0

将类更改为solid-triangle,像这样

.solid-triangle {
  background: #c9dee2;
  border-left: 3px solid black;
  position: absolute;
  height: 100%;
  width: 95px;
  top: -10px;
  right: 0;
  -webkit-transform: rotate(6deg);
  -moz-transform: rotate(6deg);
  transform: rotate(6deg);
  transform-origin: left bottom;
}

0

将它改成这样,它就能正常工作:

.solid-triangle {
    background: #c9dee2;
    border-left: 3px solid black;
    position: absolute;
    height: 110%;
    width: 145px;
    top: -120px;
    right: 0;
    -webkit-transform: rotate(6deg);
    -moz-transform: rotate(6deg);
    transform: rotate(6deg);
    transform-origin: left bottom;
}

这仍然没有解决问题。只要包含 DIV 的高度不同,三角形就会失去对齐。 - evolutionxbox
哦,没错,你说得对。我没有考虑到那种情况。 - kamal

0

最简单的实现方法...只需添加 position: inherit;

#side-right { 
 width: 50%;
  float: right;
  padding-left: 20px;
  margin-right: 1px;
  position: inherit;
}

这可能适用于您的分辨率,但在任何重新调整大小的情况下,三角形都会移动。 - user4563161

0

你可以将旋转参考点更改为 (transform-origin: left top;) 并将所有形状向右移动-width值。在你的情况下 right: -145px;

所以:

.solid-triangle {
    background: #c9dee2;
    border-left: 3px solid black;
    position: absolute;
    height: 110%;
    width: 145px;
    top: -10px;
    right: -145;
    -webkit-transform: rotate(6deg);
    -moz-transform: rotate(6deg);
    transform: rotate(6deg);
    transform-origin: left top;
}

希望这对你有所帮助 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接