javascript - 使用 javascript 问题更改 flexbox 宽度

标签 javascript html css firefox flexbox

我正在开发一个主要基于 flexbox 的用户界面,它基本上可以分解为一个内容区域和一个可以切换的侧边栏(它的宽度通过添加/删除一个类来改变)。

切换侧边栏时,内容区域会通过 javascript 手动调整大小。它包含需要重绘的 svg Canvas ,因此无法通过 CSS 完成。 Chrome 可以完美地处理这段代码。

但是,Firefox 和 Safari 的行为非常奇怪,而且有趣的是,它们的行为方式并不相同。

我能够在 fiddle 中重现该行为:http://jsfiddle.net/q1yp6ssw/21/

常规 <div> 也会发生这种情况, 它不仅仅是 <svg>正如你在这里看到的:http://jsfiddle.net/mqok5exb/2/

toggleSidebar()调用函数 resizeSvg()它使用其父元素的大小调整“svg”元素的大小。

function resizeSvg() {
    var width = $svg.parent()[0].offsetWidth;

    $svg.attr('width', width); 
    $svg.find('text')[0].textContent = 'width: ' + width;
}

如果您在 Firefox 中测试这些 fiddle ,您会注意到内容区域过早调整大小,并且变得比应有的更大,将侧边栏推到容器的原始尺寸之外。 使用setTimeout延迟调整大小不起作用。

这似乎是时间问题,以及每个浏览器何时呈现父元素的更新大小。 没有转换的行为是相同的,所以这不是问题。

我的问题:是什么原因造成的,我该如何解决,或者至少找到一个可用的解决方法?如果是 flexbox 的问题,那么可以更换 flexbox。

谢谢!

最佳答案

我知道这是旧的,但我正在尝试做类似的事情,在我的例子中,使用 javascript( Angular )更改 width 导致比计算的宽度低 50px。 如果您想为 flex 设置准确的值,您应该使用您的 javascript 代码同时设置 widthmin-width

这是解决我问题的代码:

el.style.width=String(newWidth)+'px';
el.style.minWidth=String(newWidth)+'px';

关于javascript - 使用 javascript 问题更改 flexbox 宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29777756/

相关文章:

html - 如何消除 <div> 之间的空格?

php - 拉维尔 5.1 : Class html does not exist

html - 如何在不留空白的情况下更改 div 的上边距?

html - 我怎样才能有两列的组合宽度为 100% ?

javascript - 一旦 js 缓存在浏览器中,MathJax 就会停止工作

javascript - 是否可以在不知道 objectId 的情况下从 parse.com 检索记录

javascript - 在 JQuery 中将日期转换为 dd/MM/yyyy 格式

javascript - 如何在 SAP AJAX Web 应用程序中处理带参数的 URL?

jquery - CSS 菜单项呈现在底部,然后向右移动

javascript - 如何禁用自定义复选框的点击事件