- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 flex-box(示例见下面的代码片段)。
我想设置它,以便在所有情况下,<h2>
位于 flex-box 的中心,其他 span 将根据它们的标记围绕它流动。
我基本上是在寻找 align-self
CSS 代码,但用于主轴,而不是横轴(this 可能有助于解释我的问题)。
我也在申请margin: auto;
到我的<h2>
,这是我在阅读后了解到的 this (一个很棒的页面,但它仍然留给我以下问题——除非我没有完全理解它)。
这是我得到的代码:
.container {
align-items: center;
border: 1px solid red;
display: flex;
justify-content: center;
width: 100%;
}
h2 {
margin: auto;
]
<div class="container">
<h2>I'm an h2</h2>
<span>I'm span 1</span>
<span>I'm span 2</span>
<span>I'm span 3</span>
</div>
<div class="container">
<span>I'm span 1</span>
<span>I'm span 2</span>
<span>I'm span 3</span>
<h2>I'm an h2</h2>
<span>I'm span 4</span>
<span>I'm span 5</span>
<span>I'm span 6</span>
</div>
<div class="container">
<span>I'm span 1</span>
<span>I'm span 2</span>
<h2>I'm an h2</h2>
<span>I'm span 3</span>
</div>
To fully reiterate my question: I want to know how to center the
<h2>
on my page so that where ever the other<span>
s are, the<h2>
will always be in the dead center of the flex-box.
P.S.:我愿意使用 JavaScript 和 jQuery,但我更喜欢纯 CSS 的方式来实现这一点。
在 an answer by Michael Benjamin 之后:
他的回答让我开始思考。虽然我还没有找到执行此操作的方法,但我相信以下是朝着正确方向迈出的一步:
HTML
<div class="container">
<div>
<span>I'm span 1</span>
<span>I'm span 2</span>
<span>I'm span 3</span>
</div>
<h2>I'm an h2</h2>
<div>
<span>I'm span 4</span>
<span>I'm span 5</span>
<span>I'm span 6</span>
</div>
</div>
CSS
.container div {
flex: 1 1 auto;
text-align: center;
}
h2 {
flex: 0 0 auto;
margin: auto;
}
.container {
align-items: center;
border: 1px solid red;
display: flex;
justify-content: center;
width: 100%;
}
.container div {
flex: 1 1 auto;
text-align: center;
}
h2 {
flex: 0 0 auto;
margin: auto;
}
<div class="container">
<div>
</div>
<h2>I'm an h2</h2>
<div>
<span>I'm span 1</span>
<span>I'm span 2</span>
<span>I'm span 3</span>
</div>
</div>
<div class="container">
<div>
<span>I'm span 1</span>
<span>I'm span 2</span>
<span>I'm span 3</span>
</div>
<h2>I'm an h2</h2>
<div>
<span>I'm span 4</span>
<span>I'm span 5</span>
<span>I'm span 6</span>
</div>
</div>
<div class="container">
<div>
<span>I'm span 1</span>
<span>I'm span 2</span>
</div>
<h2>I'm an h2</h2>
<div>
<span>I'm span 3</span>
</div>
</div>
基本上,理论是,虽然总量 <span>
s未知,已知一共有三个元素:<div><h2><div>
As you can see in my above snippet, I have tried (
flex: 0 0 auto
andflex: 1 1 auto
, etc.) to get it to work but have not been successful. Can anyone give me some insight as to if this is a step in the right direction and maybe how to push it through to an actual product?
最佳答案
Flex 对齐属性通过分配容器中的可用空间来工作。
因此,当一个 flex 元素与其他元素共享空间时,没有单步方法可以使它居中,除非两边的 sibling 的总长度相等。
在您的第二个示例中,h2
两侧的跨度总长度相等.结果,h2
完美地居中于容器中。
.container {
display: flex;
justify-content: center;
align-items: center;
border: 1px solid red;
margin: 5px;
padding: 5px;
}
p { text-align: center;}
p > span { background-color: aqua; padding: 5px; }
<div class="container">
<span>I'm span 1</span>
<span>I'm span 2</span>
<span>I'm span 3</span>
<h2>I'm an h2</h2>
<span>I'm span 4</span>
<span>I'm span 5</span>
<span>I'm span 6</span>
</div>
<p><span>TRUE CENTER</span></p>
请记住,将 h2
居中与 justify-content: center
(或 space-around
或 space-between
),仅在双方平衡时才有效。两侧之间的每个像素差异都会抛出 h2
相应的数量。
在您的第一个和最后一个示例中,双方之间存在明显的不平衡。标准对齐属性,例如 justify-content
和 margin
将不起作用,因为它们位于可用空间的中心,而不是总空间。
您可以使用 visibility: hidden
在对边插入重复的跨度达到平等的平衡。但这会使您的标记中包含语义上毫无值(value)的元素。
相反,如果您有能力计算每个跨度的宽度,则可以插入伪元素来实现相等的平衡。
.container {
display: flex;
justify-content: center;
align-items: center;
border: 1px solid red;
margin: 5px;
padding: 5px;
}
span {
flex: 0 0 75px;
border: 1px dashed black;
box-sizing: border-box;
}
div.container:first-child::before {
content: "";
width: 225px;
}
.container:nth-child(2)::after {
content: "";
width: 75px;
}
p { text-align: center;}
p > span { background-color: aqua; padding: 5px; border: none; }
<div class="container">
<h2>I'm an h2</h2>
<span>I'm span 1</span>
<span>I'm span 2</span>
<span>I'm span 3</span>
</div>
<div class="container">
<span>I'm span 1</span>
<span>I'm span 2</span>
<h2>I'm an h2</h2>
<span>I'm span 3</span>
</div>
<p><span>TRUE CENTER</span></p>
最终,作为使用 CSS 的最后手段,您可以将 h2
居中具有绝对定位。这将从文档流中删除该元素,但始终将其完美居中放置在容器中。
.container {
display: flex;
justify-content: center;
align-items: center;
border: 1px solid red;
position: relative; /* NEW */
height: 50px;
}
h2 {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
margin: 0;
}
.container:nth-child(1) { justify-content: flex-end; }
.container:nth-child(2) > span:nth-of-type(4) { margin-left: auto; }
.container:nth-child(3) > span:nth-of-type(2) { margin-right: auto; }
p { text-align: center;}
p > span { background-color: aqua; padding: 5px; }
<div class="container">
<h2>I'm an h2</h2>
<span>I'm span 1</span>
<span>I'm span 2</span>
<span>I'm span 3</span>
</div>
<div class="container">
<span>I'm span 1</span>
<span>I'm span 2</span>
<span>I'm span 3</span>
<h2>I'm an h2</h2>
<span>I'm span 4</span>
<span>I'm span 5</span>
<span>I'm span 6</span>
</div>
<div class="container">
<span>I'm span 1</span>
<span>I'm span 2</span>
<h2>I'm an h2</h2>
<span>I'm span 3</span>
</div>
<p><span>TRUE CENTER</span></p>
更新(基于修改后的问题)
Basically, the theory is that while the amount of total
<span>
s are unknown, what is known is that there will be a total of three elements:<div><h2><div>
.
因此,如果我们知道总会有三个元素,那么就有一个使用 flex 属性的潜在解决方案。
.container {
display: flex;
}
.container > * {
flex: 1; /* KEY RULE */
}
h2 {
text-align: center;
margin: 0;
}
.container > div {
display: flex;
justify-content: space-around;
}
/* non-essential decorative styles */
.container { background-color: lightgreen; border: 1px solid #ccc; padding: 5px; }
.container > * { border: 1px dashed red; }
p { text-align: center;}
p > span { background-color: aqua; padding: 5px; }
<div class="container">
<div>
<span>I'm span 1</span>
<span>I'm span 2</span>
<span>I'm span 3</span>
</div>
<h2>I'm an h2</h2>
<div>
<span>I'm span 4</span>
<span>I'm span 5</span>
<span>I'm span 6</span>
</div>
</div>
<p><span>TRUE CENTER</span></p>
这是发生了什么:
flex: 1
,这导致它们在它们之间平均分配容器空间。最终结果是三个等宽的元素。h2
居中h2
中的文字元素还将使容器中的文本居中。更多信息和解决方案:
关于javascript - 当被其他 flex 元素包围时,容器中的中心 flex 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39028999/
这是我想做的 1 - 点击提交 2 - 隐藏 DIV 容器 1 3 - 显示 DIV 容器 2 4 - 将“PricingDisclaimer.php”中找到的所有 DIV 加载到 Div 容器 2
我有一个 ios 应用程序,它使用 iCloudcontainer 来保存用户的一些数据,例如用户的“到期日期”。我要用不同的方式创建应用程序的副本开发者账号。我要将用户从第一个应用程序迁移到第二个应
这是场景。 我有三个容器。 Container1、container2 和 container3(基于 Ubuntu 的镜像),其中 container2 充当容器 1 和容器 2 之间的路由器。 我
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我正在改造管道以使用声明式管道方法,以便我能够 to use Docker images在每个阶段。 目前我有以下工作代码,它执行连接到在 Docker 容器中运行的数据库的集成测试。 node {
我正在开发一个需要尽可能简单地为最终用户安装的应用程序。虽然最终用户可能是经验丰富的 Linux 用户(或销售工程师),但他们对 Tomcat、Jetty 等并不真正了解,我认为他们也不应该了解。 所
我从gvisor-containerd-shim(Shim V1)移到了containerd-shim-runsc-v1(Shim V2)。在使用gvisor-containerd-shim的情况下,
假设我们只在某些开发阶段很少需要这样做(冒烟测试几个 api 调用),让项目 Bar 中的 dockerized web 服务访问 Project Foo 中的 dockerized web 服务的最
各位,我的操作系统是 Windows 10,运行的是 Docker 版本 17.06.0-ce-win19。我在 Windows 容器中运行 SQL Server Express,并且希望将 SQL
谁能告诉我,为什么我们不能在 Azure 存储中的容器内创建容器?还有什么方法可以处理,我们需要在 azure 存储中创建目录层次结构? 最佳答案 您无法在容器中创建容器,因为 Windows Azu
#include template struct Row { Row() { puts("Row default"); } Row(const Row& other) { puts
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
RDF容器用于描述一组事物 例如,把一本书的所有作者列在一起 RDF容器有三种类型: <Bag> <Seq> <Alt> <rdf:
编辑:从到目前为止添加的答案和评论看来,我没有正确解释我想要什么。下面是一个例子: // type not supporting any type of comparison [] [] type b
我正在测试 spatie 的异步项目。我创建了一个这样的任务。 use Spatie\Async\Task; class ServiceTask extends Task { protecte
我想使用 Azure Blob 存储来上传和下载文档。有一些公司可以上传和下载他们的文档。我想保证这些文件的安全。这意味着公司只能看到他们的文件。不是别人的。 我可以在 blob 容器中创建多个文件夹
我正在尝试与 Azure 中的容器实例进行远程交互。我已执行以下步骤: 已在本地注册表中加载本地镜像 docker load -i ima.tar 登录远程 ACR docker登录--用户名--密码
我正在研究http://progrium.viewdocs.io/dokku/process-management/,并试图弄清楚如何从单个项目中运行多个服务。 我有一个Dockerfile的仓库:
我有一个想要容器化的单体应用程序。文件夹结构是这样的: --app | |-file.py <-has a variable foo that is passed in --configs
我正在学习 Docker,并且一直在为 Ubuntu 容器制作 Dockerfile。 我的问题是我不断获取不同容器之间的持久信息。我已经退出,移除了容器,然后移除了它的图像。在对 Dockerfil
我是一名优秀的程序员,十分优秀!