圣杯布局和双飞翼布局简单实现

左右两栏固定高度,中间部分自适应的三栏布局。一个像圣杯/展翅的禽类

圣杯布局

中间内容元素在dom元素次序中优先位置,缺点在于:.main的最小宽度不能小于.left/.right

在页面宽度缩的很小时,中间栏只会达到最小宽度

实现源码:

<div id="container">
	<!-- 自适应元素置于顶部,否则其他元素位置错乱 -->
    <div class="main">main</div>
    
    <div class="left">left</div>
    <div class="right">right</div>
</div>
* {
 	margin: 0;
    padding: 0;
    font-size: 1.6rem;
    box-sizing: border-box;
}
#container {
    min-width: 40rem;  /* 设置最小宽度,即使页面最小,内容的宽度也不可以小于400rem */
    background-color: green;
    height: 20rem;
    /* 为两侧预留位置 */
    padding: 0 20rem;
}
.main {
    width: 100%;
    height: 20rem;
    float: left;
    background-color: blue;
}
.left, .right {
    float: left;
    width: 20rem;
    height: 50rem;
    background-color: red;
}
/* 如果正数的话,left子盒子会向右移,如果是负数的话,则子盒子会在父盒子内部,相对于本行向子盒子的上一行从右向左移动,因为是-100%,所以上一行从右向左的移动距离为父盒子的宽度,即于父盒子的左边线相邻 */
.left {
    margin-left: -100%;
    position: relative;
    left: -20rem;
}
.right {
    margin-left: -20rem;/* 负的自身的宽度 */
    position: relative;
    right: -20rem;
}

双飞翼布局

中间栏宽度可以缩小至0

实现源码:

<div id="container">
      <!-- 自适应元素置于顶部,否则其他元素位置错乱 -->
      <div class="main">
          <div class="main-content">main</div>
      </div>

      <div class="left">left</div>
      <div class="right">right</div>
 </div>
* {
    margin: 0;
    padding: 0;
}
#container {
    min-width: 40rem;
    height: 20rem;
    background-color: green;
}
.main, .left, .right {
    float: left;
}
.left, .right {
    width: 20rem;
    height: 50rem;
    background-color: blue;
}
.main {
    width: 100%;
    height: 30rem;
    background-color: red;
}
.main-content {
    margin: 0 20rem;
}
.left {
    margin-left: -100%;
}
.right {
    margin-left: -20rem;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@乐知者@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值