首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(8-1) - (4-2) - (2-4) - (1-8)响应元件网格-如何用纯CSS解决这一问题?

(8-1) - (4-2) - (2-4) - (1-8)响应元件网格-如何用纯CSS解决这一问题?
EN

Stack Overflow用户
提问于 2016-04-15 16:48:20
回答 3查看 66关注 0票数 2

在响应性网站上,我有以下HTML:

代码语言:javascript
复制
            <div id="fpma">
                <span class="fpm"></span>
                <span class="fpm"></span>
                <span class="fpm"></span>
                <span class="fpm"></span>
                <span class="fpm"></span>
                <span class="fpm"></span>
                <span class="fpm"></span>
                <span class="fpm"></span>
            </div>

容器#fpma的宽度取决于屏幕大小。.fpm中的元素具有固定的宽度。目前的CSS如下:

代码语言:javascript
复制
#fpma {
    text-align: right;
    width: 100%;
}

.fpm {
    width: 48px;
    height: 33px;
    display: inline-block;
    margin: 4px;
    background:url('images/bar.png') center center no-repeat;
}

随着父容器宽度的减少,我希望按以下方式分解这些项:

1行-8元素

2行-4元素

4行-2元素

8行-1元素

寻找一个可重用的解决方案,它不需要通过添加额外的包装来更改HTML。

欢迎使用CSS 3的任何功能,如nth-child、:any /:after、flexbox等等。

寻找一个不依赖于媒体查询的解决方案,(因为它们需要固定的最大宽度/最小宽度)。--如果您可以给出不可能没有媒体查询的原因,并给出一个媒体查询解决方案--这也是可以的。我尝试了各种方法,但还没有结果。

没问题的。若要更改元素显示窗体,请执行以下操作。

EN

回答 3

Stack Overflow用户

发布于 2016-04-15 17:31:46

如果没有@media,您就无法做到这一点,但是.fpm中元素的大小是固定的,这允许您计算@media查询何时应该中断2row、4r、8r,还有我刚才做过的2行的例子,与4,8的逻辑相同。

代码语言:javascript
复制
#fpma {
    text-align: right;
    width: 100%;
    box-sizing:border-box;
    border:1px solid red;
}

.fpm {
    width: 48px;
    height: 33px;
    display: inline-block;
    box-sizing:border-box;
    border:1px solid #000;
    margin: 4px;
    background:url('images/bar.png') center center no-repeat;
}
@media screen and (max-width:408px){
  #fpma:before, #fpma:after {
    content: "";
    display: table;
}
  #fpma:after {
    clear: both;
  } 
  #fpma {
    *zoom: 1;
   }
  .fpm {
    float: right;
    }
  

  .fpm:nth-of-type(5n)
  {
    display: inline;
    clear: right;
    float: right;
  }
}
代码语言:javascript
复制
<div id="fpma">
                <span class="fpm">1</span>
                <span class="fpm">2</span>
                <span class="fpm">3</span>
                <span class="fpm">4</span>
                <span class="fpm">5</span>
                <span class="fpm">6</span>
                <span class="fpm">7</span>
                <span class="fpm">8</span>
            </div>

代码语言:javascript
复制
https://jsfiddle.net/vm0opbab/

我希望我做得对。

票数 1
EN

Stack Overflow用户

发布于 2016-04-15 18:07:58

如果没有媒体查询或脚本,就无法做到这一点,下面是一个使用媒体查询的简单示例。

小提琴演示

堆栈段

代码语言:javascript
复制
#fpma {
  width: 100%;
}
.fpm {
  width: 48px;
  height: 33px;
  float: right;
  margin: 4px;
  background:url('http://placehold.it/100') center center no-repeat;
}

@media screen and (max-width: 450px) {
  .fpm:nth-of-type(5) {
    clear: right;
  }
}
@media screen and (max-width: 225px) {
  .fpm:nth-of-type(3),
  .fpm:nth-of-type(7) {
    clear: right;
  }
}
@media screen and (max-width: 112px) {
  .fpm {
    clear: right;
  }
}
代码语言:javascript
复制
<div id="fpma">
  <span class="fpm"></span>
  <span class="fpm"></span>
  <span class="fpm"></span>
  <span class="fpm"></span>
  <span class="fpm"></span>
  <span class="fpm"></span>
  <span class="fpm"></span>
  <span class="fpm"></span>
</div>

票数 1
EN

Stack Overflow用户

发布于 2016-04-15 19:38:24

我对这4例中的3例有了解决办法。

如果我将容器设置为柔性箱,并调整边距,则得到以下内容

代码语言:javascript
复制
#container {
  width: 581px;
  height: 450px;
  border: solid 1px red;
  display: flex;
  flex-wrap: wrap;
  animation: widen 6s infinite;
}

.box {
  width: 48px;
  height: 50px;
  border: solid 1px blue;
  flex-shrink: 0;
}

.sep1 {
  margin-right: 150px;
}

.sep1 + div {
  margin-left: -150px;
}

.sep2 {
  margin-right: 50px;
}

.sep2 + div {
  margin-left: -50px;
}

@keyframes widen {
  from {width: 110px;}
  to {width: 450px;}
}
代码语言:javascript
复制
<div id="container">
    <div class="box">A</div>
    <div class="box">B</div>
    <div class="box sep2">C</div>
    <div class="box">D</div>
    <div class="box sep1">A</div>
    <div class="box">B</div>
    <div class="box sep2">C</div>
    <div class="box">D</div>
</div>

但是一个元素行的要求打破了..。

也许有人能解决最后一个问题?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36652713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档