这有点难以解释,但是考虑一个带有菜单的flex标题,然后在右边是固定宽度的其他东西。随着窗口宽度的缩小,菜单的空间也会减少。最后,菜单将另一个东西推出容器。
Working example here.
坏
请注意“其他东西”是如何落在右边的。
将overflow: hidden
添加到menu容器元素中,使“其他内容”不会被推送。但是,这也会阻止下拉菜单显示,当然。我试图通过设置overflow-x: hidden; overflow-y: visible
来解决它,但这显然不是一个有效的设置。
更好,但没有下拉菜单
(请忽略“第1项”已隐藏。在真实的代码中,“第5项”将被移动到溢出菜单中--这里的演示中没有包含。)
问题
我怎样才能使它像下面的例子一样工作,但不向菜单中添加overflow: hidden
?也就是说,我如何才能阻止flex-box将“其他东西”推到右边?
3条答案
按热度按时间ddhy6vgd1#
TL; DR。参见底部链接的CodePen示例。
有限的空间+多个元素=不可避免的溢出内容
您的
.logo
占用50px
,.other-thing
占用200px
。因为您没有将flex-wrap
设置为.menu
,所以它的宽度不会小于内容。这意味着,随着视口宽度的缩小,您的。header
将不可避免地溢出。将
.menu
设置为overflow: hidden;
也不会对您有利。一旦你的Item 1
和Item 5
被裁剪掉,你的用户将无法滚动到它们,因为overflow: hidden;
禁止它。flex-wrap: wrap;
和@media
,响应更快将
flex-wrap
添加到.menu
将是一个良好的开端。这样,在小视口中,.menu
将根据需要灵活换行。此外,为了适应 Package 行为,我建议您从.header
中删除显式高度,并使用padding
以保持一致性。使用
@media
进行响应式布局将是您更好的长期解决方案。在这里,我建议在较小的viewport上调整.logo
和.other-thing
的大小作为示例。在真实的生活中,您可能希望引入一个仅限移动设备的菜单UI(例如汉堡按钮)而不是保持所有菜单项可见。比方说,在一个较小的屏幕(<640 px),显示50px
徽标和200px
其他东西与所有这些单独的菜单项根本不会优雅地工作。看到这个CodePen example here
u5i3ibmn2#
使用示例2并删除
overflow-hidden
类。将min-width: 0;
添加到menu
以修复溢出问题。然后将dropdown-menu
设置为display: none;
。我将一个名为item-4
的类添加到menu
的第一个子类中。然后你可以使用下面的CSS来显示dropdown-menu
。Fiddle
dw1jzc5e3#
当有一个 Package 器时,我能找到的解决方案都不能完成这项工作,我最终发现使用
position: absolute
解决了这个问题。