如何使用flexbox实现复杂,响应迅速的HTML布局?

前端之家收集整理的这篇文章主要介绍了如何使用flexbox实现复杂,响应迅速的HTML布局?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经研究过FlexBox以实现响应式布局,如下图所示.不幸的是,我仍然没有想出如何实现如图1所示的桌面布局,在小于414像素的视口上将其自身重新排列为图2.

图1(桌面视口)

图2(移动视口)


(缩放版)

点击此处查看image in original size

我的代码到目前为止:

  1. .flexBox {
  2. display: -webkit-Box;
  3. display: -ms-flexBox;
  4. display: -webkit-flex;
  5. display: flex;
  6. flex-wrap: wrap;
  7. width: 100%;
  8. margin: 0;
  9. flex-direction: row;
  10. }
  11. .content-flexBox.one {
  12. flex-basis: calc(66% - 1rem);
  13. order: 2;
  14. }
  15. .content-flexBox.two {
  16. flex-basis: calc(30% - 1rem);
  17. order: 1;
  18. }
  19. .content-flexBox.three {
  20. order: 3;
  21. }
  22. .content-flexBox.four {
  23. order: 4;
  24. }
  25. .content-flexBox {
  26. margin: 1rem;
  27. -webkit-Box-flex: 1;
  28. -webkit-flex: 1;
  29. -ms-flex: 1;
  30. flex: 1;
  31. }
  32. @media only screen and (max-width: 959px) {
  33. .flexBox {
  34. -flex-direction: column;
  35. padding-top: 1rem;
  36. }
  37. .content-flexBox {
  38. margin: 1rem;
  39. flex: 1;
  40. flex-basis: 100%;
  41. }
  42. .content-flexBox.one {
  43. flex-basis: 100%;
  44. order: 1;
  45. }
  46. .content-flexBox.two {
  47. flex-basis: 100%;
  48. order: 2;
  49. }
  50. }
  1. <div class="flexBox">
  2. <div class="content-flexBox one">
  3. <h1 class="posttitle">Lorem ipsum</h1>
  4. <h2 class="subtitle">dolor sit amet</h2>
  5. </div>
  6. <div class="content-flexBox two">
  7. <img src="http://placehold.it/300x300" />
  8. </div>
  9. <div class="content-flexBox three">
  10. <span>Lorem ipsum dolor</span>
  11. </div>
  12. <div id="container-voting" class="content-flexBox four">
  13. <div class="inner-container set">
  14. <span>Lorem ipsum dolor</span>
  15. </div>
  16. <div class="inner-container get">
  17. <span>Lorem ipsum dolor</span>
  18. </div>
  19. </div>
  20. </div>

我的问题

这对FlexBox来说甚至可能吗?有更好的选择更适合这种布局吗?

解决方法

虽然这个问题明确要求使用flexBox方法,但还有另一种方法可以使用简单的浮点数来实现它.
媒体查询允许在小于414px宽的视口上按所需顺序重新排列元素:
  1. .wrap {
  2. background: #d0d0d0;
  3. padding: 1%;
  4. }
  5. .wrap:after {
  6. content: '';
  7. display: block;
  8. clear: both;
  9. }
  10. .el {
  11. float: left;
  12. margin: 1%;
  13. }
  14. .el1 {
  15. width: 31.33%;
  16. padding-bottom: 31.33%;
  17. background: #FF7676;
  18. }
  19. .el2 {
  20. float: right;
  21. width: 64.66%;
  22. padding-bottom: 14.66%;
  23. background: #C2FF76;
  24. }
  25. .el3 {
  26. width: 31.33%;
  27. padding-bottom: 14.66%;
  28. background: #FF9BF7;
  29. }
  30. .el4 {
  31. width: 31.33%;
  32. padding-bottom: 6.33%;
  33. background: #9BA4FF;
  34. }
  35. @media (max-width: 414px) {
  36. .el2,.el4 {
  37. width: 98%;
  38. padding-bottom: 31.33%;
  39. }
  40. .el1,.el3 {
  41. width: 48%;
  42. padding-bottom: 48%;
  43. }
  44. }
  1. <div class="wrap">
  2. <div class="el el2"></div>
  3. <div class="el el1"></div>
  4. <div class="el el3"></div>
  5. <div class="el el4"></div>
  6. <div class="el el4"></div>
  7. </div>

请注意,我在此示例中使用了padding-bottom来保持元素的宽高比(this answer中的更多信息).
我不知道你打算在块中放入什么内容,但如果你想坚持使用“填充技术”,你需要使用绝对位置.对于纯文本内容,您可以查看this fiddle.

猜你在找的Flex相关文章