稍微旋转背景元素
Rotate a background element slightly
我创建了一个布局,其中背景元素稍微旋转到左上角。
但是我看到了一些可以用 SVG 实现但以前从未真正使用过的东西。
现在我使用以下技术:
.background {
width:100%;
margin-left: -160px;
margin-right: -160px;
transform: rotate(20deg);
}
并且将元素旋转到与水平对齐相反的方向。
但是当我缩小或者我需要有很多负边距时它并不适合我的屏幕,但我认为这不是解决这个问题的好方法。
这是CodePen现在的情况。
下面是它的外观:
上图只是一个示例图块。 Here is how it would actually look in the page. 黑色条纹是整个屏幕的宽度。
形状不需要 hover
效果,它只需要是静态的。
您是否尝试过使用百分比或 em 而不是固定的像素边距?
.rotate-background {
height: 300px;
width: 120%;
margin-left: -10%;
margin-right: -10%;
margin-bottom: 100px;
transform: rotate(10deg);
background-color:black;
}
使用 SVG 创建它非常简单。只需使用 path
元素(或 polygon
元素),创建一个类似于所需形状的形状,然后相对于父容器绝对放置它。要将它放在文本后面,请给它一个负数 z-index
.
SVG path
命令非常容易理解,可以解释如下:
M0,0
- 这意味着 "move" 到 canvas. 上的点 0,0 的假想笔
L100,10
- 这意味着从前一个点到 canvas. 上的点 100,10 绘制一个 "line"
100,100
- 和上面的类似(假设前面有一个L
)。
0,90
- 再次与上面类似。
z
- 这意味着 "close the path"。即从上一个点到起点画一条线
您可以在 this MDN tutorial 中阅读有关 SVG path
命令的更多信息。这非常有帮助。
.rotate-background {
position: relative;
height: 300px;
width: 100%;
overflow: hidden;
border: 1px solid red;
}
.rotate-background svg {
position: absolute;
height: 100%;
width: 100%;
top: 0px;
left: 0px;
z-index: -1;
}
p {
width: 500px;
color: white;
margin: 50px auto;
}
<div class="rotate-background">
<svg viewBox='0 0 100 100' preserveAspectRatio='none'>
<path d='M0,0 L100,10 100,100 0,90z' />
</svg>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quae cum magnifice primo dici viderentur, considerata minus probabantur. Quae hic rei publicae vulnera inponebat, eadem ille sanabat. Duo Reges: constructio interrete. Illa videamus,</p>
</div>
我们可以用 CSS transform: skewY()
和伪元素来做到这一点,就像下面的代码片段一样。
.rotate-background {
position: relative;
height: 300px;
width: 100%;
}
.rotate-background:after {
position: absolute;
content: '';
height: 100%;
width: 100%;
top: 0px;
left: 0px;
background-color: black;
transform: skewY(2deg);
transform-origin: left top;
backface-visibility: hidden;
z-index: -1;
}
p {
position: absolute;
top: 0px;
left: 50%;
width: 500px;
color:white;
margin-top: 50px;
transform: translateX(-50%);
}
<div class="rotate-background">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quae cum magnifice primo dici viderentur, considerata minus probabantur. Quae hic rei publicae vulnera inponebat, eadem ille sanabat. Duo Reges: constructio interrete. Illa videamus, </p>
</div>
我创建了一个布局,其中背景元素稍微旋转到左上角。
但是我看到了一些可以用 SVG 实现但以前从未真正使用过的东西。
现在我使用以下技术:
.background {
width:100%;
margin-left: -160px;
margin-right: -160px;
transform: rotate(20deg);
}
并且将元素旋转到与水平对齐相反的方向。
但是当我缩小或者我需要有很多负边距时它并不适合我的屏幕,但我认为这不是解决这个问题的好方法。
这是CodePen现在的情况。
下面是它的外观:
上图只是一个示例图块。 Here is how it would actually look in the page. 黑色条纹是整个屏幕的宽度。
形状不需要 hover
效果,它只需要是静态的。
您是否尝试过使用百分比或 em 而不是固定的像素边距?
.rotate-background {
height: 300px;
width: 120%;
margin-left: -10%;
margin-right: -10%;
margin-bottom: 100px;
transform: rotate(10deg);
background-color:black;
}
使用 SVG 创建它非常简单。只需使用 path
元素(或 polygon
元素),创建一个类似于所需形状的形状,然后相对于父容器绝对放置它。要将它放在文本后面,请给它一个负数 z-index
.
SVG path
命令非常容易理解,可以解释如下:
M0,0
- 这意味着 "move" 到 canvas. 上的点 0,0 的假想笔
L100,10
- 这意味着从前一个点到 canvas. 上的点 100,10 绘制一个 "line"
100,100
- 和上面的类似(假设前面有一个L
)。0,90
- 再次与上面类似。z
- 这意味着 "close the path"。即从上一个点到起点画一条线
您可以在 this MDN tutorial 中阅读有关 SVG path
命令的更多信息。这非常有帮助。
.rotate-background {
position: relative;
height: 300px;
width: 100%;
overflow: hidden;
border: 1px solid red;
}
.rotate-background svg {
position: absolute;
height: 100%;
width: 100%;
top: 0px;
left: 0px;
z-index: -1;
}
p {
width: 500px;
color: white;
margin: 50px auto;
}
<div class="rotate-background">
<svg viewBox='0 0 100 100' preserveAspectRatio='none'>
<path d='M0,0 L100,10 100,100 0,90z' />
</svg>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quae cum magnifice primo dici viderentur, considerata minus probabantur. Quae hic rei publicae vulnera inponebat, eadem ille sanabat. Duo Reges: constructio interrete. Illa videamus,</p>
</div>
我们可以用 CSS transform: skewY()
和伪元素来做到这一点,就像下面的代码片段一样。
.rotate-background {
position: relative;
height: 300px;
width: 100%;
}
.rotate-background:after {
position: absolute;
content: '';
height: 100%;
width: 100%;
top: 0px;
left: 0px;
background-color: black;
transform: skewY(2deg);
transform-origin: left top;
backface-visibility: hidden;
z-index: -1;
}
p {
position: absolute;
top: 0px;
left: 50%;
width: 500px;
color:white;
margin-top: 50px;
transform: translateX(-50%);
}
<div class="rotate-background">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quae cum magnifice primo dici viderentur, considerata minus probabantur. Quae hic rei publicae vulnera inponebat, eadem ille sanabat. Duo Reges: constructio interrete. Illa videamus, </p>
</div>