我一直在学习CSS,现在我正在尝试复制基本网站,但我偶然发现了一个问题!
我正在尝试垂直对齐一个框,使其始终位于中间,如果我将浏览器垂直缩小,则会自动缩放。到目前为止,我试图复制我横向完成的工作(通常是margin:0 auto;)但是它没有工作。
到目前为止,我的相关HTML和CSS看起来像这样:
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* Global Values */
html{
font-family: "Arial";
font-size: 16px;
line-height: 1.2;
height: 100%;
}
body{
background-color: #f9f9f9;
height: 100%;
}
.container{
display: block;
min-width: 240px;
max-width: 768px;
width: 100%;
/*----------------------------------------------*/
/* This is to make sure that the container height is always the same size as the browser. */
min-height: 100px;
height: 100%;
/*----------------------------------------------*/
margin: 0 auto;
text-align: center;
border-style: solid;
}
header{
border: solid;
min-height: 100px;
margin: auto 5%;
}
<body>
<div class="container">
<header>
<h1>Jon Phillips</h1>
<p>User Interface Designer</p>
<nav class="contact">
<a href="mailto:jon@jonphillips.ca" target="_blank"><p>Contact</p></a>
</nav>
</header>
</div>
</body>
我正在展示边界,所以我可以看到发生了什么,并且我确信(如水平居中)我的边距需要是自动的。当我横向完成这项工作时,它工作得很好......
有没有人建议做什么?
提前致谢!
答案 0 :(得分:0)
Flexbox是你的朋友!您需要将以下内容添加到容器样式
display: flex;
align-items: center;
justify-content: center;
我们使用display: flex;
将显示设置为flex / flexbox,并使用align-items: center;
和justify-content: center;
使用所有供应商前缀,它看起来像:
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* Global Values */
html{
font-family: "Arial";
font-size: 16px;
line-height: 1.2;
height: 100%;
}
body{
background-color: #f9f9f9;
height: 100%;
}
.container{
display: block;
min-width: 240px;
max-width: 768px;
width: 100%;
/*----------------------------------------------*/
/* This is to make sure that the container height is always the same size as the browser. */
min-height: 100px;
height: 100%;
/*----------------------------------------------*/
margin: 0 auto;
text-align: center;
border-style: solid;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
}
header{
border: solid;
min-height: 100px;
margin: auto 5%;
}
<body>
<div class="container">
<header>
<h1>Jon Phillips</h1>
<p>User Interface Designer</p>
<nav class="contact">
<a href="mailto:jon@jonphillips.ca" target="_blank"><p>Contact</p></a>
</nav>
</header>
</div>
</body>
答案 1 :(得分:0)
请检查:https://codepen.io/danieldd/pen/pdooVN
<div class="container">
<div class="item-centered"></div>
</div>
.container {
height: 400px;
width: 100%;
background-color: cyan;
display: flex; /*this is needed for centering*/
align-items: center; /*this center vertically childred elements*/
justify-content: center; /*this center horizontally childred elements*/
}
.item-centered {
height: 200px;
width: 200px;
background-color: red;
}
答案 2 :(得分:-1)
可悲的是,自动边距技巧只能横向运作。在CSS3中,您可以使用另一种技巧。您从top: 50%;
开始,然后使用transform: translateY(-50%);
减去容器高度的一半。 perspective(1px)
只是将计算更正为整个像素,并防止某些浏览器出现问题。查看我添加到CSS中的三行:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* Global Values */
html {
font-family: "Arial";
font-size: 16px;
line-height: 1.2;
height: 100%;
}
body {
background-color: #f9f9f9;
height: 100%;
}
.container {
display: block;
min-width: 240px;
max-width: 768px;
width: 100%;
/*----------------------------------------------*/
/* This is to make sure that the container height is always the same size as the browser. */
min-height: 100px;
height: 100%;
/*----------------------------------------------*/
margin: 0 auto;
text-align: center;
border-style: solid;
}
header {
border: solid;
min-height: 100px;
margin: auto 5%;
position: relative;
top: 50%;
transform: perspective(1px) translateY(-50%);
}
<body>
<div class="container">
<header>
<h1>Jon Phillips</h1>
<p>User Interface Designer</p>
<nav class="contact">
<a href="mailto:jon@jonphillips.ca" target="_blank">
<p>Contact</p>
</a>
</nav>
</header>
</div>
</body>
答案 3 :(得分:-1)
在您尝试居中的项目的父级上,您可以使用display: flex;
,并且孩子应该居中(使用您已经设置的其他样式)。
这也可以通过绝对定位来实现,尽管它还有几行:
.parent {
position: relative;
}
.child {
/* Vertically center - will still need left / right & width adjustment otherwise */
position: absolute;
top: 50%;
transform: translateY(-50%);
}
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* Global Values */
html{
font-family: "Arial";
font-size: 16px;
line-height: 1.2;
height: 100%;
}
body{
background-color: #f9f9f9;
height: 100%;
}
.container{
display: block;
min-width: 240px;
max-width: 768px;
width: 100%;
display: flex;
/*----------------------------------------------*/
/* This is to make sure that the container height is always the same size as the browser. */
min-height: 100px;
height: 100%;
/*----------------------------------------------*/
margin: 0 auto;
text-align: center;
border-style: solid;
}
header{
border: solid;
min-height: 100px;
margin: auto 5%;
width: 100%;
}
<body>
<div class="container">
<header>
<h1>Jon Phillips</h1>
<p>User Interface Designer</p>
<nav class="contact">
<a href="mailto:jon@jonphillips.ca" target="_blank"><p>Contact</p></a>
</nav>
</header>
</div>
</body>
答案 4 :(得分:-1)
有不同的应用可以解决这个问题,最简单和兼容性很好的是使用“表格单元显示”,所以在你的情况下将它添加到你的CSS:
.container {
display:table-cell;
height:100%;
vertical-align:middle
}
重点是表格单元的正确实现应该将父元素视为表,您的父元素是主体本身,因此请将CSS更改为:
body{
background-color: #f9f9f9;
height: 100%;
width:100%;
display:table
}
虽然在.container上的高度适当性并不是绝对必要的,但它可以作为身体表的独特细胞:
.container {
display:table-cell;
vertical-align:middle
}