将 3 个 div 并排浮动并堆叠在较小的屏幕上

Float 3 divs next to each other and stack on smaller screens

我已经搜索了论坛并根据当前答案尝试了多种方法,但似乎没有任何方法可以满足我的需要,因此非常感谢任何帮助,因为我正在努力!

我正在使用 Joomla 3 并创建了一个自定义 html 模块来显示带有注册表单的下载。

我需要在左侧显示一些文本,我正在调用的注册模块在中间使用 Modules Anywhere,在右侧显示图像,像这样:

Text  |  Module  |  Image

然后在小屏幕上它应该像这样堆叠:

Text
Module
Image

我的无效代码是:

<div style="float: left;">Blah blah blah</div>
<div>{module Newsletter Signup}</div>
<div><img src="images/content/ebook.png" alt="ebook" width="150" /></div>

我希望将间距设置为百分比,这样在水平视图中它看起来不错,甚至在所有屏幕尺寸上也是如此。

提前感谢您的任何建议

要在某个断点处有不同的布局,您需要 CSS 媒体查询:

HTML

<div class="row">
  <div class="col">
    blah blah blah
  </div>
  <div class="col">
    {module}
  </div>
  <div class="col alignImgRight">
    <img src="images/content/ebook.png" alt="ebook" width="150" />
  </div>
</div>

CSS

.row:after { clear: both; }

.row:before, .row:after {
  content: " ";
  display: table; }

@media (min-width: 768px) {
  .col { 
    float: left;
    width: 33.33333333%; }

  .alignImgRight { text-align: right; }
}

当然你可以把断点改成任何你想要的。在这种情况下,列的 1/3 宽度和浮动将仅适用于 768px 屏幕宽度以上。在此之下,div 将采用默认的 100% 宽度,没有浮动(即堆叠)。 .row 父元素简单地包含了所有带有 clear 的列,所以它们不会全部溢出并用浮动弄乱布局。

我强烈建议将 Bootstrap 视为响应式框架。这是处理此类布局的行业标准。

试试这个 -> http://jsfiddle.net/tm4trhsw/

#wrapper {
    overflow:hidden;
}
.item {
    float:left;
    width:27%;
    outline:1px solid blue;
    margin:0 0.5%;
    padding:2%;
}

@media only screen and (max-width: 40em) {
    .item {
        float:none;
        width:100%;
        margin-bottom:5px
    }
}
<div id="wrapper">
<div id="text" class="item">TEXT BLA BLA</div>
<div id="module" class="item">MODULE BLA BLA</div>
<div id="image" class="item">Image BLA BLA</div>
</div>

*{
    padding: 0;
    margin: 0;
    box-sizing: border-box;
}

.table{
    width: 100%;        
    display: table;
}
.table-cell{
    display: table-cell;
    vertical-align: middle;
    border-left: 1px solid #000;
    width: 33.333%;
    text-align: center;
    padding: 15px;
    background: #f7f7f7;
}
.table-cell:nth-child(1){
    border-left: none;   
}
@media screen and (max-width: 767px){
    
    .table-cell{        
        width: 100%;  
         border-left: none;
         display: table-caption;
    }
    .table-cell:nth-child(1){
        border-left: none;        
    }
    .table-cell:nth-child(2){
      background: #ccc;     
      
    }
    
}
<div class="table">
    <div class="table-cell">Text</div>
     <div class="table-cell">Module</div>
     <div class="table-cell">Image</div>
</div>

浮点数可能很棘手。您还有其他几个选择:

1.显示:内联块和显示:块

在小屏幕尺寸下:

.text, .module, .image {
    display: block;
    width: 100%;
}

然后使用您希望它们并排放置的任意宽度的最小宽度媒体查询。您选择的宽度(此处为 700 像素)适合您的设计:

@media (min-width: 700px) { 
    .text, .module, .image {
        display: inline-block;
        width: 30%; /*you'll have to play with this % */
    }
 }

Mozilla Developer Info on Media Queries

2。弹性框

设置三个部分的父容器以显示为 flex,并设置子容器以您希望的方式运行。

.parent {
    display: flex;
    flex-direction: row;
    justify-content: center; /*you might prefer space-between. It depends on how it looks*/
}

如果您能够使用(即不支持某些侏罗纪浏览器),flexbox 有很多选项。尝试一些生成器 - 有很多好的生成器 - 并查看 CSS-tricks 以获得对 flexbox 的很好解释。祝你好运!