我已经研究过FlexBox以实现响应式布局,如下图所示.不幸的是,我仍然没有想出如何实现如图1所示的桌面布局,在小于414像素的视口上将其自身重新排列为图2.
图1(桌面视口)
图2(移动视口)
点击此处查看image in original size
我的代码到目前为止:
- .flexBox {
- display: -webkit-Box;
- display: -ms-flexBox;
- display: -webkit-flex;
- display: flex;
- flex-wrap: wrap;
- width: 100%;
- margin: 0;
- flex-direction: row;
- }
- .content-flexBox.one {
- flex-basis: calc(66% - 1rem);
- order: 2;
- }
- .content-flexBox.two {
- flex-basis: calc(30% - 1rem);
- order: 1;
- }
- .content-flexBox.three {
- order: 3;
- }
- .content-flexBox.four {
- order: 4;
- }
- .content-flexBox {
- margin: 1rem;
- -webkit-Box-flex: 1;
- -webkit-flex: 1;
- -ms-flex: 1;
- flex: 1;
- }
- @media only screen and (max-width: 959px) {
- .flexBox {
- -flex-direction: column;
- padding-top: 1rem;
- }
- .content-flexBox {
- margin: 1rem;
- flex: 1;
- flex-basis: 100%;
- }
- .content-flexBox.one {
- flex-basis: 100%;
- order: 1;
- }
- .content-flexBox.two {
- flex-basis: 100%;
- order: 2;
- }
- }
- <div class="flexBox">
- <div class="content-flexBox one">
- <h1 class="posttitle">Lorem ipsum</h1>
- <h2 class="subtitle">dolor sit amet</h2>
- </div>
- <div class="content-flexBox two">
- <img src="http://placehold.it/300x300" />
- </div>
- <div class="content-flexBox three">
- <span>Lorem ipsum dolor</span>
- </div>
- <div id="container-voting" class="content-flexBox four">
- <div class="inner-container set">
- <span>Lorem ipsum dolor</span>
- </div>
- <div class="inner-container get">
- <span>Lorem ipsum dolor</span>
- </div>
- </div>
- </div>
我的问题
这对FlexBox来说甚至可能吗?有更好的选择更适合这种布局吗?
解决方法
虽然这个问题明确要求使用flexBox方法,但还有另一种方法可以使用简单的浮点数来实现它.
媒体查询允许在小于414px宽的视口上按所需顺序重新排列元素:
媒体查询允许在小于414px宽的视口上按所需顺序重新排列元素:
- .wrap {
- background: #d0d0d0;
- padding: 1%;
- }
- .wrap:after {
- content: '';
- display: block;
- clear: both;
- }
- .el {
- float: left;
- margin: 1%;
- }
- .el1 {
- width: 31.33%;
- padding-bottom: 31.33%;
- background: #FF7676;
- }
- .el2 {
- float: right;
- width: 64.66%;
- padding-bottom: 14.66%;
- background: #C2FF76;
- }
- .el3 {
- width: 31.33%;
- padding-bottom: 14.66%;
- background: #FF9BF7;
- }
- .el4 {
- width: 31.33%;
- padding-bottom: 6.33%;
- background: #9BA4FF;
- }
- @media (max-width: 414px) {
- .el2,.el4 {
- width: 98%;
- padding-bottom: 31.33%;
- }
- .el1,.el3 {
- width: 48%;
- padding-bottom: 48%;
- }
- }
- <div class="wrap">
- <div class="el el2"></div>
- <div class="el el1"></div>
- <div class="el el3"></div>
- <div class="el el4"></div>
- <div class="el el4"></div>
- </div>
请注意,我在此示例中使用了padding-bottom来保持元素的宽高比(this answer中的更多信息).
我不知道你打算在块中放入什么内容,但如果你想坚持使用“填充技术”,你需要使用绝对位置.对于纯文本内容,您可以查看this fiddle.