Flexbox页脚错误地缩小

时间:2018-07-03 14:52:42

标签: html css css3 svg flexbox

我正在使用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%的高度,因为我希望它占用页脚不占用的所有空间。

一个奇怪的事情是,页脚滑开后,如果调整了窗口的大小,它将返回。

请帮助!

3 个答案:

答案 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;
}

revised jsfiddle

当您将元素设置为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;
}    

我无法跟踪问题,但已为您解决。希望对您有所帮助:)