使用CSS更改元素的布局而不更改HTML

前端之家收集整理的这篇文章主要介绍了使用CSS更改元素的布局而不更改HTML前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有 HTML标记,包含三个div:
  1. <div class="gallery">Gallery</div>
  2. <div class="content">Content</div>
  3. <div class="sidebar">Sidebar</div>

我想使用CSS以两种不同的布局呈现它(如果我可以控制侧边栏是左侧还是右侧,那就更好了):

  1. +------------------+
  2. | Gallery |
  3. +------+-----------+
  4. | Side | Content |
  5. | | |
  6. +------+-----------+
  7.  
  8. +------+-----------+
  9. | Side | Gallery |
  10. + +-----------+
  11. | | Content |
  12. | | |
  13. +------+-----------+

事实上,如果我可以控制侧边栏是左侧还是右侧,那就更好了.

只要内容出现在侧边栏之前,我就可以添加额外的div和/或更改div的源顺序.但是不能在每个布局的基础上更改HTML.

这是我使用flexBox order属性解决问题的不完整尝试.

  1. /* for demonstration */
  2. .gallery { height: 100px; background-color: #CCC; }
  3. .content { height: 200px; background-color: #EEE; }
  4. .sidebar { height: 150px; background-color: #AAA; }
  5. /* common */
  6. .middle { display: flex; flex-direction: row; flex-wrap: wrap; }
  7. /* layout-1 */
  8. .middle.layout-1 .gallery { order: 1; width: 100%; }
  9. .middle.layout-1 .content { order: 3; width: 75%; }
  10. .middle.layout-1 .sidebar { order: 2; width: 25%; }
  11. /* layout-2 */
  12. .middle.layout-2 .gallery { order: 2; width: 75%; }
  13. .middle.layout-2 .content { order: 3; width: 75%; }
  14. .middle.layout-2 .sidebar { order: 1; width: 25%; }
  1. <div class="middle layout-1">
  2. <div class="gallery">Gallery</div>
  3. <div class="content">Content (this layout works perfectly)</div>
  4. <div class="sidebar">Sidebar</div>
  5. </div>
  6. <hr>
  7. <div class="middle layout-2">
  8. <div class="gallery">Gallery</div>
  9. <div class="content">Content (should go below gallery)</div>
  10. <div class="sidebar">Sidebar</div>
  11. </div>

解决方法

通常我会避免像瘟疫这样的漂浮物,但在这种情况下,它们可以满足您的需要.

如果要切换侧边栏的侧面,只需交换左侧和右侧.

这将使您的布局保持动态大小的内容

  1. .gallery {
  2. background: red;
  3. }
  4. .content {
  5. background: green;
  6. }
  7. .sidebar {
  8. background: blue;
  9. }
  10. /* layout1 */
  11. .layout1 .gallery {
  12. width: 100%;
  13. }
  14. .layout1 .content {
  15. width: 75%;
  16. float: right;
  17. }
  18. .layout1 .sidebar {
  19. width: 25%;
  20. float: left;
  21. }
  22. /* layout2 */
  23. .layout2 .gallery {
  24. width: 75%;
  25. float: right;
  26. }
  27. .layout2 .content {
  28. width: 75%;
  29. float: right;
  30. }
  31. .layout2 .sidebar {
  32. width: 25%;
  33. }
  1. <div class="layout1">
  2. <div class="gallery">Gallery</div>
  3. <div class="content">Content</div>
  4. <div class="sidebar">Sidebar</div>
  5. </div>
  6. <br>
  7. <br>
  8. <br>
  9. <div class="layout2">
  10. <div class="gallery">Gallery</div>
  11. <div class="content">Content</div>
  12. <div class="sidebar">Sidebar</div>
  13. </div>

猜你在找的CSS相关文章