【问题标题】:Left, right and center aligned divs左、右和居中对齐的 div
【发布时间】:2023-03-16 16:25:01
【问题描述】:

我正在尝试创建一个连续有多个 3 个 div 的页面,这些 div 左右居中对齐。

我尝试使用float:leftfloat:right,但效果非常糟糕。页面超级随机缩放,我希望 div 在页面缩小时变为 2 列,然后在移动设备上变为 1 列。

.container {
  display: inline-block;
  text-align: center;
  width: 100%;
  position: relative;
}
.left,
.middle,
.right {
  width: 200px;
  height: 200px;
  background-color: red;
  display: inline-block;
}
.left {
  float: left;
}
.right {
  float: right;
}
<div class="container">

  <div class="left">
    <div class="content">
    </div>
  </div>
  <div class="middle">
    <div class="content">
    </div>
  </div>
  <div class="right">
    <div class="content">
    </div>
  </div>

</div>

jsFiddle:https://jsfiddle.net/azizn/j4cgef5g/

【问题讨论】:

  • 考虑调查媒体查询。当每行有 2 个时,第 3 个项目应该如何表现?将在 2 个框下居中?
  • 你在使用吗?引导程序。框架。 ?
  • 我没有使用引导程序,当它们变为 2 时,我希望它们彼此处于下方。类似于此页面的内容:indiegogo.com/partners

标签: html css scaling


【解决方案1】:

这是 flexbox 的教科书用例:

.container{
  display: flex; 
  justify-content: space-between;
}

这是一个例子:http://codepen.io/memoblue/pen/XKQqGg

有很多方法可以处理响应式方面,但我需要更具体地了解布局在不同断点处应该是什么样子才能给你一个有用的答案……

【讨论】:

  • 是的,但完全忽略了响应方面。
  • 谢谢,我也尝试过使用 flex 并得到了相同的结果。不过,缩放是个问题。我希望当屏幕达到一定宽度时,两列具有相同的位置或位于中心(不确定它看起来会更好),顶部和底部有一些边距。基本上我正在制作一个合作伙伴页面。它看起来像这样:indiegogo.com/partners
  • 我已经更新了我的笔,其布局类似于您链接到的 indiegogo 页面。不过和你原来的描述有很大的不同。我没有看,但我很确定它们只是浮动元素……当有 2 列时,它甚至没有居中。我的是 ;) 我正在使用与元素宽度相对应的断点。你必须调整你的尺寸。我还清理了 HTML。我希望你不要介意!如果您有任何问题,请告诉我。
  • 是的,他们是我能找到的最接近我想要的东西。你的看起来不错,但你能做到左右对齐(这样它们就会接触到屏幕的边缘)吗?
【解决方案2】:

查看我在下面包含的示例(CSS 和 HTML 脚本)

HTML

<div id='columns'>
    <div id='col1'></div>
    <div id='col2'></div>
    <div id='col3'></div>
</div>

CSS

#columns{
    position: absolute;
    height: 100%;
    width: 100%;
}

#columns #col1{
    float: left;
    width: 33.33%;
    height: 100%;
}


#columns #col2{
    float: left;
    width: 33.33%;
    height: 100%;
}


#columns #col3{
    float: left;
    width: 33.33%;
    height: 100%;
}

@media media only screen and (max-width:1024px) and (min-width:540px){
    #columns #col1{
        width: 50%;
    }


    #columns #col2{
        width: 50%;
    }


    #columns #col3{
        width: 100%;
    }
}

@media media only screen and (max-width:540px){
    #columns #col1{
        width: 100%;
    }


    #columns #col2{
        width: 100%;
    }


    #columns #col3{
        width:  100%;
    }
}

请注意,我还没有实际测试过上面的示例,但它应该可以工作。您可以根据需要编辑宽度和高度值,以及媒体查询的宽度。随着屏幕变小,它会从显示中删除第 3 列和第 2 列,同时使其他列变大。要使三列位于左、中和右位置,您不需要指定不同的浮点数,因为在块中它们会自动碰撞并在左侧堆叠,直到它们碰到屏幕边缘。这也是为什么宽度一般只能是33.33%的原因,因为到33.333%一般会因为空间不够而导致第三块被推下。在大多数情况下,0.01% 的死区并不明显。

【讨论】:

  • 谢谢,不过,div 似乎占据了所有空间,我希望有一些边距。但是想一想,如果我在里面制作更多我想要的大小的 div,它应该可以工作,对吧?
  • 所以我尝试了这种方法,它在大多数情况下都有效。问题是当我在列上设置自定义大小时,所有内容都左对齐。我基本上希望左右列与边缘对齐,中间位于它们之间的中心。你能帮我解决这个问题吗?
  • 如果你想改变内部 3 个 div 的大小,你需要改变容器 columns 的大小,因为它们占据了容器宽度的三分之一。因此,如果您希望所有 div 都可见时为 250px,您可以将容器设置为大约 750px。请记住,它永远不会是准确的,但在大约 0.01-0.1 像素的误差范围内。
  • 我无法让它以某种方式工作,我认为它不会以这种方式工作。如果我使用的是较小的容器,但问题是我希望容器具有 100%,并且列在其中左对齐、右对齐和居中。如果我为容器设置自定义宽度,它不再与我的标题对齐。你能检查一下这个小提琴,看看我的意思吗? jsfiddle.net/j4cgef5g/1
  • 我的例子对我有用,所以我不完全确定为什么它不适合你。您可以尝试的一件事是,将容器保持在 100%,将左侧设置为 float: left;,将右侧设置为 float: right;,最后将中间设置为 margin: 0 auto;。这样,您可以将内列设置为任意宽度(只要它们的总和小于 100%),并且它应该有一个左、中和右 div。
猜你喜欢
  • 1970-01-01
  • 2017-07-02
  • 2013-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 1970-01-01
相关资源
最近更新 更多