微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有 HTML标记,包含三个div:
<div class="gallery">gallery</div>
<div class="content">Content</div>
<div class="sidebar">Sidebar</div>

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

+------------------+
| gallery          |
+------+-----------+
| Side | Content   |
|      |           |
+------+-----------+

+------+-----------+
| Side | gallery   |
+      +-----------+
|      | Content   |
|      |           |
+------+-----------+

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

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

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

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

解决方法

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

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

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

.gallery {
  background: red;
}
.content {
  background: green;
}
.sidebar {
  background: blue;
}
/* layout1 */
.layout1 .gallery {
  width: 100%;
}
.layout1 .content {
  width: 75%;
  float: right;
}
.layout1 .sidebar {
  width: 25%;
  float: left;
}
/* layout2 */
.layout2 .gallery {
  width: 75%;
  float: right;
}
.layout2 .content {
  width: 75%;
  float: right;
}
.layout2 .sidebar {
  width: 25%;
}
<div class="layout1">
  <div class="gallery">gallery</div>
  <div class="content">Content</div>
  <div class="sidebar">Sidebar</div>
</div>
<br>
<br>
<br>
<div class="layout2">
  <div class="gallery">gallery</div>
  <div class="content">Content</div>
  <div class="sidebar">Sidebar</div>
</div>

原文地址:https://www.jb51.cc/css/215809.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。