CSS3:响应式居中行,大小可变 outter-elements

CSS3: responsive centered row with variable size outter-elements

更新 2

根据 @kidconcept 关于使用 table 标签的新更新,我已将其修改为居中 Table 时间线。注意:copy-pasting @kidconcept 进入本地项目(不是 JS Fiddle)没有这个 属性。我还添加了 css 选择器,以便更轻松地改变方向。


感谢您考虑我的问题。

我正在尝试制作自定义行。我想要实现的是在 description.

标题下进行更详细的描述

此外,我还包括了一个 JS Fiddle,它让我接近(也许)我想要实现的目标(例如,我投入了一些工作)。

我不太了解 CSS3,W3-schools 上的教程实际上只涵盖基础知识,但是对 display 选项之间的区别和 [= =14=]其实确实给了object不轻易给出。

非常感谢您的帮助,并渴望向您学习:)


描述

JS Fiddle:tri-element 行,中间元素大小固定

我正在尝试创建一个恰好包含三个元素的行。我希望中间元素具有固定大小并居中。我希望其他两个元素(左/右)与中间元素有固定的间距,但大小要有响应,见下文:

此外,我想以固定间距堆叠这些行:

以及响应小 window 尺寸:

更新

使用 @kidconcept 的答案,您可以制定合理的时间表。

我建议使用框架


节省了很多时间,可以专注于逻辑

they all have offset as one of their classes

但是我们如何在 Bootstrap 中实现相同的是

<div class="container">
    <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
        <div class="col-xs-2 col-xs-offset-3 col-sm-2 col-sm-offset-3 col-md-2 col-md-offset-3 col-lg-2 col-lg-offset-3">
        </div>
        <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2"></div>

        <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2"></div>
    </div>
</div>

它做了什么它给最左边的块留了一个填充

你的情况。check this(jsfiddle)

或者更确切地说

div.block{
  width:32%;
  height:50px;
  border:1px solid black;
  float:left;
  margin:2px;
}
div.block-2{
  width:31%;
  height:50px;
  float:left; border:1px solid black;
  margin:2px;
}
div.margin-l{
  margin-left:50px;
}
div.section-2{
  margin:0 auto;
  width:60%;
}
<section class="tri-element-rows">
 <div class="block">
 
 </div>
  <div class="block">
 
 </div> <div class="block">
 
 </div>
 <div class="section-2">
 <div class="block-2 ">
   
 </div>
 <div class="block-2">
   
 </div><div class="block-2">
   
 </div>
 </div>
</section>

更新:我认为使用 table 更容易解决这个问题。只需创建一个包含三列的 table 并为中间列指定固定宽度。

<table>
<tr>
  <td></td>
  <td class="middle"></td>
  <td></tr>
</table>

td {
  background-color: tomato;
  padding: 2rem;
}

.middle {
  width: 10rem;
}

Table Fiddle

https://jsfiddle.net/botbvanz/2/


有问题的 Flex 方法:flex。了解有关弹性 here 的更多信息。

<section class="tri-element-rows">
  <div class="left-element"></div>
  <div class="middle-element"></div>
  <div class="right-element"></div>
</section>

html, body {
  height: 100%
}
section {
  display: flex;
  height: 50%;
}

div.middle-element {
  width: 15rem;
  height: 10rem;
}

div.left-element,
div.right-element {
  flex-grow: 1;
}

div {
  background-color: coral;
  margin: 1rem;
}

要实现这种效果,只需将三个元素放在一个 display: flex 框中即可。将中间元素的宽度设置为固定,在本例中为 15rem。然后给 left/right 个元素 flex-grow: 1,这表明它们应该平均填充剩余的 space。给所有的 div 一个固定的边距,在本例中为 1rem。

对于高度,我不确定我是否完全理解您的要求,但是如果您希望内部 div 的高度响应 window 您可以将它们的高度设置为父容器。为了使这个技巧起作用,您需要记住将 html 的高度和主体设置为 100%(这使它们成为 的百分比。在这种情况下,我设置section-height 为 50%,这意味着两行将始终填满屏幕。另一个问题是,如果您为 section 元素设置填充或边框,该元素将变为 50% plus 内边距和边框。要避免这种情况,请在节标签上设置 box-sizing: border-box

这是一个fiddle:https://jsfiddle.net/ksgd6r11/

我同意 kidconcept 的观点,即 flexbox flex-grow 属性 是您的最佳解决方案。 This article is a good resource for getting started with flexbox. Some developers still shy away from the flexbox module, but it’s extremely useful and browser support is great。也就是说,本着帮助您了解更多的精神,我使用简单的浮点数创建了一些接近您要求的内容。

Fiddle

<section class="row">
  <div class="left">
      <p>Left</p>
  </div>
  <div class="right-block">
    <div class="center">
      <p>Center</p>
    </div>
    <div class="right">
      <p>Right</p>
    </div>
  <div>
  </section>

<section class="row">
  <div class="left">
      <p>Left</p>
  </div>
  <div class="right-block">
    <div class="center">
      <p>Center</p>
    </div>
    <div class="right">
      <p>Right</p>
    </div>
  <div>
</section>

.row {
  width: 100%;
  height: 180px;
  margin-top: 20px;
}
.left p, .right p {
  padding: 0 30px;
}
.left {
  height: 100%;
  background: red;
  width: 40%;
  float: left;
}
.center {
  width: 140px;
  height: 120px;
  margin: 0 20px;
  background: #4FBA49;
  float: left;
  text-align: center;
}
.right-block {
  height: 100%;
  margin-left: 20px;
  overflow: hidden;
}
.right {
  height: 100%;
  background: #FDCF1A;
  overflow: hidden;
  text-align: right;
}

在更概念化的层面上,浮动从网页上的正常事物流中拉出元素,将它们向左或向右移动,并允许文本等环绕它们。老实说,在我看来,它们并不是全部,而且我一直发现它们是一个不完美的解决方案。 This article 提供了对浮动的有用概述。

您可能还会发现 this answer 有助于理解如何将浮点数与 overflow: hidden 属性 一起使用,我在 Fiddle 中使用了一个有用的概念。最后,您可能还会从阅读 css 网格中获益,尤其是在 Bootstrap 或其他框架的上下文中。希望这可以帮助!