如何使用 flexbox 使菜单居中 [关闭]
Posted
技术标签:
【中文标题】如何使用 flexbox 使菜单居中 [关闭]【英文标题】:How to center a menu using flexbox [closed] 【发布时间】:2017-01-18 00:43:47 【问题描述】:我有一个第二行菜单,我想使用 flexbox 居中。我是 flexbox 新手,有几个问题:
-
当我在 DreamWeaver CS6 中验证 html 时,它无法识别元素 top_row、left_button 和 right_button。然而,我遵循了一些关于 flexbox 的示例,表明这是一种正确的格式。我对这些元素定义做错了什么?
如何让宽度为 875 像素的“主菜单”行在我展开窗口以使其更宽和更窄时保持居中?现在它保持左对齐。
如何让left_button(主页)在窗口变宽和变窄时与主菜单的左侧对齐?现在它保持左对齐。
当窗口变宽和变窄时,如何让 right_button(后退)与主菜单的右侧对齐?现在它与扩大或缩小窗口的右侧对齐。
如何获得“文本装饰:无;”属性才能工作,以便按钮上没有下划线?
这是我第一次尝试使用 flexbox 时的示例代码。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
body
background: #EEE8AA;
#main
margin: 0px;
padding: 0px;
display: flex;
flex-flow: row;
font-family: Arial, Helvetica, sans-serif;
font-size: 14px;
line-height: 25px;
text-align: center;
max-width: 875px;
align-items: center;
justify-content: space-between;
#main > top_row
background: #BDB76B;
display: flex;
justify-content: center;
align-items: center;
width: 875px;
height: 25px;
#main > left_button
margin: 5px;
background: #BDB76B;
order: 1;
position: absolute;
left: 0;
width: 150px;
text-decoration: none;
#main > right_button
margin: 5px;
background: #BDB76B;
order: 3;
position: absolute;
right: 0;
width: 150px;
text-decoration: none;
</style>
<title>Sample Title</title>
</head>
<body>
<div id="main">
<top_row>Main Menu</top_row>
</div>
<br />
<div id="main">
<left_button><a href="http://www.msn.com/">Home</a>
</left_button>
<right_button><a href="#" onclick="history.go(-1)">Back</a>
</right_button>
</div>
</body>
</html>
当它工作时,我会将<style>
标记信息移动到一个 CSS 文件中。
感谢您查看此内容。
【问题讨论】:
这真的很宽泛,而且显然不仅仅是一个单独的问题,甚至是“几个问题”。但是我会回答你的#1,其余的你可能想用minimal examples 使用codepen 或jsfiddle 或其他东西在你得到#1 的平方之后分解成更简洁的问题。无论如何,您的 #1 是预期的,因为您尚未通过 document.registerElement 注册您的自定义 html 标签,所以无论您放入什么都不知道您在说什么,包括您的所见即所得编辑器......干杯! :) 【参考方案1】:基本 HTML5
您好像在使用 DWCS6?如果是这样,请将您的新页面作为 HTML5 开始。标记中的第一个标签是 HTML4 的回归。只需从您创建的每个页面开始:
<!DOCTYPE html>
最基本的<meta>
标签应该是:
<meta charset='utf-8'>
有一个finite amount of actual tags you can use in HTML5 这些是NOT标签,所以它会验证失败:
<top_row>
<right_button>
<left_button>
具有id='main'
的标签不止一个。有一条基本规则永远不应该被打破:
请勿在每个文档中使用多个元素/标签上的 ID
改为使用类,它可以用于任意数量的标签。 ID几乎没有用,因为它的限制。一旦你开始使用 javascript,它对你来说会更有价值。
在下面的代码片段中,我重构了 OP。评论是细节和问题的答案。顺便说一句,SO (***) 对多个问题不满意,因此在发布问题时,请尝试将其最小化为特定问题,并确保制作 Snippet 或 Plunker 来展示您的示例(我已经为您做过)。请记住,guidelines 后面的问题和Minimal, Complete, and Verifiable example 将吸引更多愿意发布答案的人。
片段
<!DOCTYPE html><!-- <>QUESTION 1<> -->
<html>
<head>
<meta charset="utf-8">
<title>SO39418788</title>
<style>
/*[OPTIONAL]
| The next 3 rulesets are a reset that you
| can apply to almost any webpage.
*/
html
width: 100%;
height: 100%;
box-sizing: border-box;
font: 400 16px/1.428 Arial, Helvetica, sans-serif;
body
width: 100%;
height: 100%;
background: #EEE8AA;
*,
*:before,
*:after
box-sizing: inherit;
margin: 0;
padding: 0;
border: 0 none transparent;
/*[FLEX CONTAINER]
| <>QUESTIONS 2, 3, and 4<>
| Using a container that encompasses all tags
| will give you more control. Having trouble
| with 3 tags? 50 tags? Wrap a container
| around them and you'll have influence
| over them as a group. This will save you
| from writing extra repetitive code
| because the descendants of the container
| will inherit the styles.
*/
.top
display: flex;
/*
| flex-flow is not 100% with all browsers.
| It's safer to use flex-direction
*/
flex-direction: row;
line-height: 25px;
text-align: center;
/* <>QUESTION 2<> */
width: 100%;
max-width: 875px;
justify-content: space-between;
position: relative;
/* <>QUESTION 2<>
| As long as the element is a block this
| style will center it horizontally.
*/
margin: 0 auto;
.center
background: #BDB76B;
flex: 2 0 auto;
order: 2;
font-size: 1.4rem;
.left
margin: 5px;
background: #BDB76B;
order: 1;
position: absolute;
left: 0;
width: 150px;
.right
margin: 5px;
background: #BDB76B;
order: 3;
position: absolute;
right: 0;
width: 150px;
a,
a:link,
a:visited
color: rgba(122, 2, 14, .8);
/* <>QUESTION 5<>
| Apply the style directly on <a>
*/
text-decoration: none;
a:hover,
a:active
background: #000;
color: #BDB76B;
</style>
</head>
<body>
<header class='top'>
<button class='left'>
<a href="http://www.msn.com/">Home</a>
</button>
<h1 class='center'>Main Menu</h1>
<button class='right'>
<a href="#" onclick="history.go(-1)">Back</a>
</button>
</header>
</body>
</html>
【讨论】:
谢谢 zer00ne。我有一些小的调整要做,但这让我到了那里。非常感谢您的帮助。 没问题,我看到你对学习很认真。如果你打算经常使用 SO,你应该把你的名字改成更容易记住的名字。这样一来,如果我注意到您有问题,我就会知道这是一篇值得回答的严肃帖子。以上是关于如何使用 flexbox 使菜单居中 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章