模拟“卡片布局”使用flexx时
Simulating a "Card Layout" when using Flexbox
我遇到了一个相当复杂的问题。我想做一个布局在CSS具有多个层这意味着基本上有多个<div>
元素堆叠在彼此的顶部(或至少使它看起来像这样),只有顶部是可见的。
在许多其他GUI环境中,这被称为卡片布局。
所以计划是:
- 在一个父
<div class='container'>
元素中创建所有<div class='layer'>
元素 - 让他们先有
display: none
- 调用
$.show()
或$.hide()
来显示或隐藏它们
<div id="containerOne">
<div class="layer a"></div>
<div class="layer b">
<div class="inner b1"></div>
</div>
<div class="layer c"></div>
</div>
CSS: #containerOne {
width: 150px;
height: 150px;
background: red;
}
#containerOne .layer {
display : none;
width: 100%;
height: 100%
}
.a {
background: green;
}
.b {
background: orange;
}
.b1 {
width: 50%;
height: 50%;
background: yellow;
}
.c {
background: blue;
}
这在一开始是有效的,因为元素一开始在页面上没有任何空间保留,只有在显示时才会占用空间。
现在,如果我有一个嵌套元素在一个图层,我想让它的大小为50% x 50%这也很好:即使图层div最初设置为display: none
。
现在默认情况下,我的容器div设置为display: block
,所有的大小计算似乎工作得很好,这就是我的问题开始的地方:
我需要容器div具有display: flex
,以利用现代浏览器的Flexbox功能。而不是为我的图层设置一个固定的宽度我现在配置他们有flex: 1
,这样他们就可以增长到容器的全部尺寸。
这也像预期的那样工作。有一个例外:嵌套元素的大小应该是50% x 50%,但它根本没有大小。在JavaScript中调试显示,这是因为在创建层时,它们的大小都为0 x 0,并且在$.show()
显示它们时首先获得分配的大小。
我所期望的是,一旦它们显示出来,嵌套元素将增长到其50% x 50%大小,但它没有。
- 有什么我能做的吗?(好的解决方案和逆向破解解决方案)。
我还制作了一个Fiddle来演示这个问题,并进行了测试。
你期望发生的事情应该发生,但它没有(在Chrome中)由于一个bug。它在Firefox中可以正常工作。
这是一个没有动态变化的简化版测试用例:http://jsfiddle.net/CN7e8/4/
这个行为实际上最近在flexbox规范中被更改为您所期望的行为。问题是,你的b1
上的50%高度是解决对一个自动高度元素(flex项目,b
)和Chrome是处理自动高度作为一个无效的百分比基础,即使自动高度实际上可以解决到容器的高度。(由于flex容器的默认align-items: stretch
,它将成为容器的高度,这使得自动高度flex项目采用容器的高度)。
作为参考,澄清这一点的规范更改在这篇文章的第3部分(a)中提到:http://lists.w3.org/Archives/Public/www-style/2014Mar/0350.html
。为了解决Chrome的bug,你不能在你的flex项目b
上有一个自动高度,因为你依赖于它是一个百分比的基础。你必须给它一个明确的高度,例如height:100%
(它更直接地解决了容器的高度)。这是您的小提琴,更改后:http://jsfiddle.net/CN7e8/5/
- 在指令控制器中使用$attrs时出现问题
- 如何使用jQuery自动打开页面上的所有链接
- 如何使用url加载程序在webpack中导入多个图像
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何使用jquery在填充自动完成的值后使文本框只读
- 使用agility.js进行页面布局和合成
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 如何使用WCF服务和javascript表单post上传.doc文件
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 如何使用动画实现纸张推车
- 如何在Angular2中使用jQuery插件
- 使用Express捕获参数
- 使用clickToggle并在单击另一个元素时关闭元素
- 如何使用jQuery选择下拉列表的值
- 可以前端maven插件使用节点,npm已经安装
- 使用bokeh/flexx-pyscript在Python 3.5中绘制交互式浏览器
- 模拟“卡片布局”使用flexx时
- 我如何修复我的CSS,使菜单保持固定在顶部的容器,使用flexx