CSS多种三列自适应布局实现

实现 以下布局
在这里插入图片描述

第一种:基于float实现

实现思路:常规思路,使左右两个Aside分别浮动至左右两侧即可

代码实现

<!-- HTML部分 -->
<div class="container">
  <!-- 顶部Header -->
  <header>顶部Heade</header>
  <!-- 中间aside及content -->
  <div class="middle clearfix">
    <aside class="left">left</aside>
    <aside class="right">right</aside>
    <!-- 中间content显示内容 为了防止将右侧挤下去故放置在右侧栏下方 -->
    <div class="content">这里是内容</div>
  </div>
  <!-- 底部Footer -->
  <footer>底部Footer</footer>
</div>
<style type="text/less">
*{
	padding:0;
	margin:0;
	font-size:30px;
}
.clearfix {
zoom: 1;
	&::after {
		display: block;
		content: ' ';
		clear:both
	}
}
html,body{
	width:100%;
	height:100%;
}
.container{
	width:100%;
	height:100%;
	header,footer{
		height:80px;
		background-color:#00BCD4;
	}
	.middle {
		height: calc(100% - 80px - 80px);
		aside{
			height:100%;
			width:300px;
			background-color:#CDDC39;
		}
	}
	.left{float:left;}
	.right{float:right;}
}
</style>

第二种:基于position:absolute实现

实现思路:为中间三栏父级赋予position: relative,赋予左右Aside position: absolute,并且分别赋予left: 0 right: 0 width:自定义值,赋予中间content left,right 分别等于左右width即可

<!-- HTML部分 -->
<div class="container">
  <!-- 顶部Header -->
  <header>顶部Heade</header>
  <!-- 中间aside及content -->
  <div class="middle clearfix">
    <!-- 左侧Aside -->
    <aside class="left">left</aside>
    <!-- 中间content内容 -->
    <div class="content">这里是内容</div>
    <!-- 右侧Aside -->
    <aside class="right">right</aside>
  </div>
  <!-- 底部Footer -->
  <footer>底部Footer</footer>
</div>
<style type="text/less">
* {
    margin: 0;
    padding: 0
  }
  html, body {
    width: 100%;
    height: 100%
  }
  .container {
    width: 100%;
    height: 100%;
    header,footer {
      height: 80px;
      background: #00BCD4;
    }
    .middle {
      height: calc(100% - 80px - 80px);
      position: relative;
      aside,.content {
        position: absolute;
      }
	aside{
	  width: 300px;
        background: #CDDC39;
        height: 100%;
	}
      .left {
        left: 0;
      }
      .right {
	 right: 0;
      }
      .content {
        left: 300px;
        right: 300px;
      }
    }
  }
</style>

在这里插入图片描述

第三种:基于display:flex实现

实现思路:赋予左中右三列父级display: flex,赋予左右Aside width自定义,赋予中间content flex:1即可

<!-- HTML部分 -->
<div class="container">
  <!-- 顶部Header -->
  <header>顶部Heade</header>
  <!-- 中间aside及content -->
  <div class="middle clearfix">
    <!-- 左侧Aside -->
    <aside class="left">left</aside>
    <!-- 中间content内容 -->
    <div class="content">这里是内容</div>
    <!-- 右侧Aside -->
    <aside class="right">right</aside>
  </div>
  <!-- 底部Footer -->
  <footer>底部Footer</footer>
</div>
<style type="text/less">
  .container {
    width: 100%;
    height: 100%;
    header,footer {
      height: 80px;
      background: #00BCD4;
    }
    .middle {
      height: calc(100% - 80px - 80px);
      display:flex;
	aside{
	  width: 300px;
        background: rgba(156, 154, 249, 1);
        height: 100%;
	}
      .content {
        flex:1;
      }
    }
  }
</style>

第四种:基于display: table实现

实现思路 : 赋予左中右三列父级display: table, width: 100%,分别赋予左中右三列display: table-cell,分别赋予左右Aside width即可。

<style type="text/less">
  .container {
    width: 100%;
    height: 100%;
    header,footer {
      height: 80px;
      background: #00BCD4;
    }
    .middle {
      display:table;
	width:100%;
      height: calc(100% - 80px - 80px);
	aside{
	  width: 300px;
	  display:table-cell;
        background: rgba(156, 154, 249, 1);
	}
      .content {
        display:table-cell;
      }
    }
  }
</style>

第五种:基于display: grid实现

实现思路 : 赋予左中右三列父级display: grid,并且使用grid-template-columns: 300px auto 300px,将其分为宽为300px、auto、300px三列布局即可。

.container {
    width: 100%;
    height: 100%;
    header,footer {
      height: 80px;
      background: #00BCD4;
    }
    .middle {
      display:grid;
	  grid-template-columns: 300px auto 300px;
      height: calc(100% - 80px - 80px);
	  aside{
	    background: rgba(156, 154, 249, 1);
	  }
    }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/less.js/3.11.1/less.min.js" ></script>

https://mp.weixin.qq.com/s/IDog_4HKKyrEv5mg0fKwlg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

@阿猫阿狗~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值