我正在使用Flexbox来分隔网页上的空间。我的主要区域是SVG和页脚。页脚有一个按钮,当鼠标进入和离开时,它会更改其文本。问题在于,这种情况下,页脚会暂时向下滑动。
参见此处:http://jsfiddle.net/nicmcd/zb149q0k/49/
通过调试,我发现导致此问题的令人讨厌的CSS样式是SVG区域设置为100%的高度:
svg {
width: 100%;
height: 100%; /* this is the offensive style */
top: 0;
left: 0;
}
我的困境是我需要将SVG设置为100%的高度,因为我希望它占用页脚不占用的所有空间。
一个奇怪的事情是,页脚滑开后,如果调整了窗口的大小,它将返回。
请帮助!
答案 0 :(得分:3)
代替此:
#content #drawing {
flex-grow: 1;
flex-shrink: 1;
flex-basis: 100%;
background-color: red;
}
svg {
width: 100%;
height: 100%; /* this is the offensive style */
top: 0;
left: 0;
}
尝试一下:
#content #drawing {
flex-grow: 1;
flex-shrink: 1;
flex-basis: 100%;
background-color: red;
display: flex; /* new */
}
svg {
width: 100%;
/* height: 100%; removed offensive style :-) */
top: 0;
left: 0;
}
当您将元素设置为display: flex
(使其成为flex容器)时,该元素会自动激活align-items: stretch
,这会告诉子元素(也称为“ flex项目”;在这种情况下为{{1} }元素),以沿cross-axis扩展容器的全长(在本例中为高度)。
因此不需要百分比高度,固定高度或svg
函数。借助flex属性,calc()
可以直接消耗可用空间,从而消除对页脚的任何干扰。
答案 1 :(得分:0)
我将页脚的弹性布局设置为使用像素大小的基础(45px),并将svg
的高度更改为使用calc(100% - 45px)
来折扣页脚高度的计算。这似乎解决了奇怪的收缩行为。请查看附件的内容。希望对您有所帮助。
document.getElementById("hi").addEventListener("mouseenter", function() {
this.innerHTML = "Hello";
});
document.getElementById("hi").addEventListener("mouseleave", function() {
this.innerHTML = "Goodbye";
});
body, html {
width: 100%;
height: 100%;
margin: 0;
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
overflow: hidden;
}
#content {
display: flex;
flex-direction: column;
width: 100%;
height: 100%;
background-color: white;
}
#drawing {
flex-grow: 1;
flex-shrink: 1;
flex-basis: 100%;
background-color: red;
}
#menu {
flex-grow: 0;
flex-shrink: 0;
flex-basis: 45px;
background-color: blue;
}
#menuitems {
display: flex;
flex-direction: row;
text-align: center;
align-items: center;
justify-content: center;
cursor: default;
color: #ccc;
}
.menuitem {
flex-grow: 0;
flex-shrink: 1;
flex-basis: 10px;
white-space: nowrap;
width: auto;
border: 2px dashed #ccc;
border-radius: 5px;
margin: 5px;
padding: 5px;
}
svg {
width: 100%;
height: calc(100% - 45px);
top: 0;
left: 0;
}
<div id="content">
<div id="drawing">
<svg>
<g>
<circle cx="40" cy="40" r="24"/>
<circle cx="80" cy="80" r="24"/>
<circle cx="120" cy="120" r="24"/>
<circle cx="160" cy="160" r="24"/>
</g>
</svg>
</div>
<div id="menu">
<div id="menuitems">
<div class="menuitem" id="hi">Hi</div>
</div>
</div>
</div>
答案 2 :(得分:-1)
http://jsfiddle.net/zb149q0k/101/我用div高度的百分比单位制作了一个小提琴。 svg样式保持不变。
svg {
width: 100%;
height: 100%;
top: 0;
left: 0;
}
我无法跟踪问题,但已为您解决。希望对您有所帮助:)