在CSS中缩放非矩形形状的条纹背景?

时间:2017-02-15 04:57:56

标签: html css css3

我正在尝试使用纯CSS实现下图所示的设计,其中条纹图案从类似颜色的内容块以一定角度向下投射,但在其条带之外,背景保留其基色。

我能够通过混合线性渐变与百分比停止,背景大小属性和rgba颜色来实现条纹背景的预期效果 - 原始模型中的条纹是子像素宽度,我通过降低不透明度来模拟 - 但是当然默认情况下这个模式填充其截面的整个矩形,当我希望它被限制为从右手div向下延伸的平行四边形时,但不会中断流动内容。

我想避免简单地将背景设置为所需结果的图像,因为我正在以移动优先的响应方式设计此网站,因此我需要平滑缩放纯CSS解决方案。

我一直在玩变换:skewX属性,并且发现它有效,只要你包含一个用于解开块内容的包装器,但问题仍然是我现在有了我想要的有角度的边界,我不知道我知道如何使它们符合上面的右手div而不影响我的想法。

enter image description here

Here是我在其中实现了第一个建议的JSFiddle,但正如您所看到的,此解决方案是无响应的。根据建议,条纹背景的当前迭代是:在具有以下样式的伪元素之前。

#striped::before {
  content: '';
  position: absolute;
  top: -150px;
  right: 130px;
  width: 200%;
  height: 200px;
  background: linear-gradient( rgba(93, 165, 182, 0.3) 25%, transparent 25%, transparent 50%, rgba(93, 165, 182, 0.3) 50%, rgba(93, 165, 182, 0.3) 75%, transparent 75%, transparent);
  );
  background-size: 100% 4px;
  transform: rotate(-45deg);
  transform-origin: top right;
  margin:0;
}

1 个答案:

答案 0 :(得分:2)

由于我们没有可以使用的代码,我在这里展示了一个概念验证如何做到

div {
  position: relative;
  height: 500px;
  background: lightblue;
  overflow: hidden;
}
div::before {
  content: '';
  position: absolute;
  top: -150px;
  right: 130px;
  width: 200%;
  height: 200px;
  background: linear-gradient(
    to bottom,
    #8cf,
    #8cf 50%,
    transparent 50%,
    transparent
  );
  background-size: 100% 6px;
  transform: rotate(-45deg);
  transform-origin: top right;
}
<div></div>

根据评论和问题编辑进行了更新

主要部分是将条带伪移动到p,因此它会随之大小,这是一个更新版本,使用您的代码库,我更新/添加了这些规则(并添加了{标记中的{1}}容器。

div

.container {
  overflow: hidden;
}
#preceding p {
  position: relative;
}
#preceding p::before {
  content: '';
  position: absolute;
  top: 100%;
  left: 0px;
  width: 70%;
  height: 500vh;
  transform: rotate(45deg) translate(0%,-50vw);
  transform-origin: left top;
  background: linear-gradient(90deg, rgba(93, 165, 182, 0.3) 25%, transparent 25%, transparent 50%, rgba(93, 165, 182, 0.3) 50%, rgba(93, 165, 182, 0.3) 75%, transparent 75%, transparent);
  );
  background-size: 14px 100%;
  margin:0;
  z-index: -1;
}
* {
  box-sizing: border-box;
}

body {
  background-color: #e0dabf;
  margin: 0;
}

p {
  font-family: "Libre Baskerville";
}

p a {
  font-size: 1rem;
}

#preceding {
  display: flex;
  margin: 0;
}

#preceding h2 {
  flex: 3;
  font-family: "Libre Franklin";
  font-size: 2.25rem;
  font-weight: 600;
  margin: 0;
  padding: 1rem 1rem 1rem 1.5rem;
  color: #5da5b6;
}

#preceding p {
  display: block;
  flex: 7;
  background-color: #5da5b6;
  color: #d5caa2;
  padding: 0.75rem;
  margin: 0;
  text-align: right;
}

#preceding p a {
  color: #f2da83;
}

#striped {
  text-align: center;
  margin: 0;
  position: relative;
  overflow: hidden;
  display: flex;
  flex-flow:row wrap;
  padding:0;
}

#striped h2 {
  flex:1 100%;
}

#striped div {
  flex:1 50%;
  margin:0;
}

.container {
  overflow: hidden;
}
#preceding p {
  position: relative;
}
#preceding p::before {
  content: '';
  position: absolute;
  top: 100%;
  left: 0px;
  width: 70%;
  height: 500vh;
  transform: rotate(45deg) translate(0%,-50vw);
  transform-origin: left top;
  background: linear-gradient(90deg, rgba(93, 165, 182, 0.3) 25%, transparent 25%, transparent 50%, rgba(93, 165, 182, 0.3) 50%, rgba(93, 165, 182, 0.3) 75%, transparent 75%, transparent);
  );
  background-size: 14px 100%;
  margin:0;
  z-index: -1;
}

#further {
  margin:0;
  background-color:#5da5b6;
}

#further h1 {
  margin:0;
}