【发布时间】:2018-02-05 15:53:57
【问题描述】:
我正在为一个项目创建一个 venn 风格的图表,并提出了这种方法:
https://codepen.io/webconsult/pen/KQMMJm
<div class="venn-diagram">
<div class="circle-business"><span class="label">Business</span></div>
<div class="circle-design"><span class="label">Design</span></div>
<div class="circle-technology"><span class="label">Technology</span</div>
</div>
// Variables
$circle-width: 35vmin;
$horizontal-displacement: 0.40;
$vertical-displacement: 0.70;
$standard-margin: 20px;
// Color palette
$green: #00d6a4;
$pink: #f46197;
$dark-blue: #0a2342;
$medium-blue: #274060;
$light-blue: #01baef;
// Pallette assignments
$main: $medium-blue;
$main-dark: $dark-blue;
$main-light: $light-blue;
$identity: $green;
$emphasis: $pink;
// Mixins
@mixin center-children {
display: flex;
justify-content: center;
align-items: center;
}
@mixin center-children-top {
@include center-children;
> * {
align-self: flex-start;
}
}
@mixin circle($diameter) {
border-radius: 50%;
width: $diameter;
height: $diameter;
}
// Instance styling starts here
.venn-diagram {
position: relative;
z-index: 0;
height: 1.7 * $circle-width;
@include center-children-top;
margin: (2*$standard-margin) $standard-margin;
}
.circle-technology, .circle-design, .circle-business {
@include circle($circle-width);
@include center-children;
.label {
font-size: $circle-width/8;
font-weight: 100;
}
}
.circle-design {
position: relative;
background-color: $emphasis;
z-index: 1;
}
.circle-business {
position: absolute;
margin-left: -($circle-width * $horizontal-displacement);
margin-top: ($circle-width * $vertical-displacement);
z-index: 2;
background-color: fade-out($main-light, 0.1);
}
.circle-technology {
position: absolute;
margin-left: ($circle-width * $horizontal-displacement);
margin-top: ($circle-width * $vertical-displacement);
z-index: 3;
background-color: fade-out($main, 0.1);
}
p.introduction {
padding: 0 $standard-margin * 2;
}
它工作得相当好,最重要的是,当您调整浏览器大小时它可以完美缩放,因为我为我们选择了vw 单位来表示圆圈的大小、它们相互之间的独立位移以及字体大小。
所以我认为一切都很好,但现在我意识到它实际上并不能很好地适应不同的屏幕尺寸和纵横比。
它的设计目的是在纵向模式下很好地在移动设备上运行,在这种模式下,人物会占据大部分可用的水平空间,但是一旦你将手机切换到横向模式,它就会保持屏幕宽度与屏幕宽度之间的相同比例。图形的宽度,因此您无法再看到图形的顶部和底部,但更糟糕的是,一旦您在台式机/笔记本电脑上观看,尺寸将被放大到疯狂的尺寸,看起来很奇怪.
所以我需要某种“艺术指导”——即我需要能够在图形宽度和屏幕尺寸之间设置不同的关系。
我想我可以通过媒体查询轻松做到这一点。我可以使用媒体查询为$circle-width 变量设置不同的值,并让它们影响不同的使用场景。令我失望的是,我发现 SASS 变量是在编译时编写的并不那么容易。我有点失去了注意力,无法弄清楚如何为不同的显示器缩放这个数字。有什么建议吗?
【问题讨论】:
-
“令我失望的是,我发现 SASS 变量是在编译时编写的并不那么容易”——为什么会有这样的问题?您需要为所需的每个设备断点定义一个媒体查询,并使用它来覆盖您需要的元素中的不同大小。例如
max-width: 600px的媒体查询,宽度更小(可能不是vw) -
这是我的尝试。不起作用:(我选择
vm的原因是更容易保持内在比率 - 即保持圆圈的高度和宽度之间的关系。我想我在使用百分比宽度并设置带有底部填充的高度,我正在考虑回退到该高度,但这与媒体查询无关。codepen.io/webconsult/pen/rJLMXE -
我应该假设我的回答没有用吗?
-
对不起。只是之前没有时间测试它。
-
那很好:) ...只是想签到。
标签: html css flexbox viewport-units