【发布时间】:2015-11-17 02:35:56
【问题描述】:
看到投反对票而士气低落,我真的尽我所能(我相信)解释我的问题并保持简短。如果您发现难以理解问题,我愿意跟进任何改进 建议:,(
我正在尝试创建一个 100% 高度的垂直侧边栏,其中包含 N 个 可调整大小的子项 元素 - 例如 Facebook 侧边栏(聊天...)或 Photoshop 的侧边栏
如果子元素不超过父元素的高度,并且调整一个元素的大小,另一个元素应相应地调整大小,因此实际上添加的子元素高度应始终与 (100%) 父元素高度匹配。
我尝试调整表格行的大小,但再次失败...
这就是我目前使用 CSS3 flex 所拥有的(似乎是个好主意):(
$("#panel>div").resizable({
handles:'s' /* try using "n" to see what happens... */
});
*{margin:0; box-sizing: border-box;}
html, body{height:100%;}
[class^=ui-resizable]{height:2px;background:#08f;cursor:row-resize;}
#panel{
display:flex;
flex-direction: column ;
height:100%;
width:200px;
}
#panel>div{
flex: 1;
background:#aaa;
}
<link href="https://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css" rel="stylesheet" type="text/css" />
<script src="https://code.jquery.com/jquery-1.11.3.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<div id="panel">
<div id="a">a</div>
<div id="b">b</div>
<div id="c">c</div>
</div>
在上面的demo中可以清楚的看到,由于使用了flex,jQuery无法调整元素的大小......
你会如何解决这个问题(没有插件)? 谢谢
【问题讨论】:
-
始终寻求涉及更少代码的解决方案。当然说起来容易做起来难,但我看到一个解决方案可能只需要正确配置的 flexbox 布局。等待答复,先生。顺便说一句,我认为您的问题没有任何问题,我怀疑有些人会通过否决投票来随机破坏问题。希望我的赞成票将帮助您的问题浮出水面。 :)
-
@zer00ne 你是个真正的绅士! 我不坚持使用 flexbox 我只是想看看不同的想法和方法 - 学习一些新的东西......谢谢!
-
经过进一步检查,我发现您希望能够手动重新调整 flex 子项的大小。这需要额外的时间,但喜欢这个想法。
-
@zer00ne 是的,我认为这毕竟是一个有趣的问题。所以基本上如果内容超过高度,可调整大小的元素应该有滚动条。它们的累积高度应始终与容器高度匹配(例如:
a+b+c=always 100%),类似于 Facebook 的右侧边栏(在桌面上)和 Photoshop 的图层边栏。我已经对 SO 进行了广泛的研究,只找到插件建议(这并没有教太多) -
我现在没有时间写出完整的答案,但如果明天还没有答案,我会的。我只是想我可以通过说你可以在调整第一个 div 的大小时使用 resize 事件处理程序同时调整前一个 div 的大小(或者如果它不存在,下一个 div)来将你瞄准“一个”正确的方向。 “ui 对象”会跟踪原始大小和当前大小,因此您需要做的就是跟踪邻居的起始大小,并根据您正在调整大小的对象的当前大小更新它的当前大小。希望对你有帮助,如果没有,我明天再写出来。
标签: javascript jquery css jquery-ui