【发布时间】:2012-05-04 20:04:07
【问题描述】:
前注:这不是重复的。我检查了几个问题,但我的问题在细节上有所不同。
我目前在网页上有这样的水平导航菜单:
菜单是一个 ul 元素。问题是目前我必须明确指定边距以获取 li 之间的间距。我希望间距尽可能为 60px,但只要浏览器缩小并且不再允许如此大的菜单间距,就缩小。
我怎样才能做到这一点?
【问题讨论】:
标签: html css layout spacing alignment
前注:这不是重复的。我检查了几个问题,但我的问题在细节上有所不同。
我目前在网页上有这样的水平导航菜单:
菜单是一个 ul 元素。问题是目前我必须明确指定边距以获取 li 之间的间距。我希望间距尽可能为 60px,但只要浏览器缩小并且不再允许如此大的菜单间距,就缩小。
我怎样才能做到这一点?
【问题讨论】:
标签: html css layout spacing alignment
我认为您正在寻找超级神圣的 Uber-Grail。我可能错了,但我认为单独使用 CSS 是不可能的。这是因为没有像 max-width 这样的 max-margin 。而如果你使用 JS(比如 jQuery)你会有一种定位的跳跃,因为 JS 必须等到页面加载并准备好之后才开始计算宽度值。
如果你愿意做一些不同的事情。我建议您定义与窗口大小相结合的整个导航的最大宽度,然后为现代浏览器使用 CSS flex。如果您使用 modernizr.com,您可以在 IE8 的 CSS 中进行分支,并改用 display:table、table-row、table-cell。对于 IE7,您只需使用 float。
为什么不在现代浏览器中使用 display:table?我可能看起来一样,但元素之间的边距增益在 flex 和 table 中不同。虽然在 flex 中元素之间的间隙是完全一样的(意味着像素方面),但它们在表格中是相对相同的(意味着更宽的表格单元格比窄的单元格获得更多的空间)
table
+--------------------------------+---------+
| wide content in here | short |
+--------------------------------+---------+
6px 6px 2px 2px
flex
+----------------------------+-------------+
| wide content in here | short |
+----------------------------+-------------+
4px 4px 4px 4px
【讨论】:
display:table, table-row, table-cell- 我个人看不到任何可行的替代方法来使用这些 CSS 属性(除了使用表格本身)