六边形 CSS 背景
Hexagonal CSS background
这不是关于如何将单个元素制作成六边形的问题。有很多这样的。
这是一个问题,看看是否有办法创建纯 css 六边形背景。
我得到了kind of close by creating triangles:
*{
margin:0;
padding:0;
border-width:0;
}
html{
height:100%;
}
body{
height:100%;
background: repeating-linear-gradient(120deg, transparent 0px, transparent 44px, rgba(0, 85, 130, 0.5) 50px, transparent 56px, transparent 100px), repeating-linear-gradient(240deg, transparent 0px, transparent 44px, rgba(0, 85, 130, 0.5) 50px, transparent 56px, transparent 100px), repeating-linear-gradient(0deg, transparent 0px, transparent 44px, rgba(0, 85, 130, 0.5) 50px, transparent 56px, transparent 100px), #fffcfc;
background-position:34px, 0, 0;
background-attachment:fixed,fixed,fixed;
}
但是有几个问题:
- 背景大小会影响行的位置。
- 它是三角形,我想不出办法 "cover" 出现在由它们形成的六边形内的线。
有没有办法做到这一点,还是我应该放弃并使用图像?
查看这篇文章:http://lea.verou.me/css3patterns/#honeycomb
在 link 被删除的情况下使这个面向未来的演示:
body {
width: 100%;
height: 100%;
background:
radial-gradient(circle farthest-side at 0% 50%,#fb1 23.5%,rgba(240,166,17,0) 0)21px 30px,
radial-gradient(circle farthest-side at 0% 50%,#B71 24%,rgba(240,166,17,0) 0)19px 30px,
linear-gradient(#fb1 14%,rgba(240,166,17,0) 0, rgba(240,166,17,0) 85%,#fb1 0)0 0,
linear-gradient(150deg,#fb1 24%,#B71 0,#B71 26%,rgba(240,166,17,0) 0,rgba(240,166,17,0) 74%,#B71 0,#B71 76%,#fb1 0)0 0,
linear-gradient(30deg,#fb1 24%,#B71 0,#B71 26%,rgba(240,166,17,0) 0,rgba(240,166,17,0) 74%,#B71 0,#B71 76%,#fb1 0)0 0,
linear-gradient(90deg,#B71 2%,#fb1 0,#fb1 98%,#B71 0%)0 0 #fb1;
background-size:40px 60px;
}
这里是 SCSS 版本 (https://jsfiddle.net/ajnd782w/):
$primary-color: #fb1;
$line-color: #B71;
$transparent: transparent;
$size: 30px;
body {
width: 100%;
height: 100%;
background:
radial-gradient(circle farthest-side at 0% 50%,$primary-color 23.5%,$transparent 0)($size * .7) $size,
radial-gradient(circle farthest-side at 0% 50%,$line-color 24%,$transparent 0)($size * .6129) $size,
linear-gradient($primary-color 14%,$transparent 0, $transparent 85%,$primary-color 0)0 0,
linear-gradient(150deg,$primary-color 24%,$line-color 0,$line-color 26%,$transparent 0,$transparent 74%,$line-color 0,$line-color 76%,$primary-color 0)0 0,
linear-gradient(30deg,$primary-color 24%,$line-color 0,$line-color 26%,$transparent 0,$transparent 74%,$line-color 0,$line-color 76%,$primary-color 0)0 0,
linear-gradient(90deg,$line-color 2%,$primary-color 0,$primary-color 98%,$line-color 0%)0 0 $primary-color;
background-size:($size * 1.333) ($size * 2);
}
永不放弃。 :)
这是 Jonathan 上面的惊人答案,其中包含变量:
/* source code by Johnathan at:
*/
:root{
--honeyColor: #fb1;
--honeyBorderColor: #B71;
--size: 30px;
}
body {
width: 100vw;
height: 100vh;
display: block;
position:relative;
background:
radial-gradient(circle farthest-side at 0% 50%, var(--honeyColor) 23.5%,transparent 0)calc(var(--size)*0.7) var(--size),
radial-gradient(circle farthest-side at 0% 50%,var(--honeyBorderColor) 24%,transparent 0)calc(var(--size)*19/30) var(--size),
linear-gradient(var(--honeyColor) 14%,transparent 0, transparent 85%, var(--honeyColor) 0)0 0,
linear-gradient(150deg, var(--honeyColor) 24%,var(--honeyBorderColor) 0,var(--honeyBorderColor) 26%,transparent 0,transparent 74%,var(--honeyBorderColor) 0,var(--honeyBorderColor) 76%, var(--honeyColor) 0)0 0,
linear-gradient(30deg, var(--honeyColor) 24%,var(--honeyBorderColor) 0,var(--honeyBorderColor) 26%,transparent 0,transparent 74%,var(--honeyBorderColor) 0,var(--honeyBorderColor) 76%, var(--honeyColor) 0)0 0,
linear-gradient(90deg,var(--honeyBorderColor) 2%, var(--honeyColor) 0, var(--honeyColor) 98%,var(--honeyBorderColor) 0%)0 0 var(--honeyColor);
background-size:calc(var(--size)*4/3) calc(var(--size)*2);
}
这不是关于如何将单个元素制作成六边形的问题。有很多这样的。
这是一个问题,看看是否有办法创建纯 css 六边形背景。
我得到了kind of close by creating triangles:
*{
margin:0;
padding:0;
border-width:0;
}
html{
height:100%;
}
body{
height:100%;
background: repeating-linear-gradient(120deg, transparent 0px, transparent 44px, rgba(0, 85, 130, 0.5) 50px, transparent 56px, transparent 100px), repeating-linear-gradient(240deg, transparent 0px, transparent 44px, rgba(0, 85, 130, 0.5) 50px, transparent 56px, transparent 100px), repeating-linear-gradient(0deg, transparent 0px, transparent 44px, rgba(0, 85, 130, 0.5) 50px, transparent 56px, transparent 100px), #fffcfc;
background-position:34px, 0, 0;
background-attachment:fixed,fixed,fixed;
}
但是有几个问题:
- 背景大小会影响行的位置。
- 它是三角形,我想不出办法 "cover" 出现在由它们形成的六边形内的线。
有没有办法做到这一点,还是我应该放弃并使用图像?
查看这篇文章:http://lea.verou.me/css3patterns/#honeycomb
在 link 被删除的情况下使这个面向未来的演示:
body {
width: 100%;
height: 100%;
background:
radial-gradient(circle farthest-side at 0% 50%,#fb1 23.5%,rgba(240,166,17,0) 0)21px 30px,
radial-gradient(circle farthest-side at 0% 50%,#B71 24%,rgba(240,166,17,0) 0)19px 30px,
linear-gradient(#fb1 14%,rgba(240,166,17,0) 0, rgba(240,166,17,0) 85%,#fb1 0)0 0,
linear-gradient(150deg,#fb1 24%,#B71 0,#B71 26%,rgba(240,166,17,0) 0,rgba(240,166,17,0) 74%,#B71 0,#B71 76%,#fb1 0)0 0,
linear-gradient(30deg,#fb1 24%,#B71 0,#B71 26%,rgba(240,166,17,0) 0,rgba(240,166,17,0) 74%,#B71 0,#B71 76%,#fb1 0)0 0,
linear-gradient(90deg,#B71 2%,#fb1 0,#fb1 98%,#B71 0%)0 0 #fb1;
background-size:40px 60px;
}
这里是 SCSS 版本 (https://jsfiddle.net/ajnd782w/):
$primary-color: #fb1;
$line-color: #B71;
$transparent: transparent;
$size: 30px;
body {
width: 100%;
height: 100%;
background:
radial-gradient(circle farthest-side at 0% 50%,$primary-color 23.5%,$transparent 0)($size * .7) $size,
radial-gradient(circle farthest-side at 0% 50%,$line-color 24%,$transparent 0)($size * .6129) $size,
linear-gradient($primary-color 14%,$transparent 0, $transparent 85%,$primary-color 0)0 0,
linear-gradient(150deg,$primary-color 24%,$line-color 0,$line-color 26%,$transparent 0,$transparent 74%,$line-color 0,$line-color 76%,$primary-color 0)0 0,
linear-gradient(30deg,$primary-color 24%,$line-color 0,$line-color 26%,$transparent 0,$transparent 74%,$line-color 0,$line-color 76%,$primary-color 0)0 0,
linear-gradient(90deg,$line-color 2%,$primary-color 0,$primary-color 98%,$line-color 0%)0 0 $primary-color;
background-size:($size * 1.333) ($size * 2);
}
永不放弃。 :)
这是 Jonathan 上面的惊人答案,其中包含变量:
/* source code by Johnathan at:
*/
:root{
--honeyColor: #fb1;
--honeyBorderColor: #B71;
--size: 30px;
}
body {
width: 100vw;
height: 100vh;
display: block;
position:relative;
background:
radial-gradient(circle farthest-side at 0% 50%, var(--honeyColor) 23.5%,transparent 0)calc(var(--size)*0.7) var(--size),
radial-gradient(circle farthest-side at 0% 50%,var(--honeyBorderColor) 24%,transparent 0)calc(var(--size)*19/30) var(--size),
linear-gradient(var(--honeyColor) 14%,transparent 0, transparent 85%, var(--honeyColor) 0)0 0,
linear-gradient(150deg, var(--honeyColor) 24%,var(--honeyBorderColor) 0,var(--honeyBorderColor) 26%,transparent 0,transparent 74%,var(--honeyBorderColor) 0,var(--honeyBorderColor) 76%, var(--honeyColor) 0)0 0,
linear-gradient(30deg, var(--honeyColor) 24%,var(--honeyBorderColor) 0,var(--honeyBorderColor) 26%,transparent 0,transparent 74%,var(--honeyBorderColor) 0,var(--honeyBorderColor) 76%, var(--honeyColor) 0)0 0,
linear-gradient(90deg,var(--honeyBorderColor) 2%, var(--honeyColor) 0, var(--honeyColor) 98%,var(--honeyBorderColor) 0%)0 0 var(--honeyColor);
background-size:calc(var(--size)*4/3) calc(var(--size)*2);
}