如何实现两、三栏布局?

两栏布局

方法一:浮动布局
<style>
div{
  height:500px;
}
#aside{
  width:300px;
  background-color:yellow;
  float:left;
}
#main{
  background-color:aqua;
  margin-left:300px;
}
</style>

<body>
	<div id = "aside">
	</div>
	<div id = "main">
	</div>
</body>

左侧栏固定宽度向左浮动,右侧主要内容则用margin-left留出左侧栏的宽度,默认宽度为auto,自动填满剩下的宽度。
在这里插入图片描述
右侧固定宽度,左侧自适应则是同理,只要将固定栏右浮动,使用margin-right空出其宽度即可。

#aside{
  width:300px;
  background-color:yellow;
  float:right;
}
#main{
  background-color:aqua;
  margin-right:300px;
}

方法二:浮动布局+负外边距(双飞翼布局的两栏版)

这种方法是创建简单一列宽度固定,一列内容为宽度的100%的两列布局的好方法:

<div id = "aside">
</div>
<div id = "main">
  <div id = "content"></div>
</div>
div{
  height:500px;
}
#aside{
  width:300px;
  background-color:yellow;
  float:left;
  margin-right:-100%;
}
#main{
  width:100%;
  float:left;
}
#content{
  margin-left:300px;
  background-color:aqua;
}

左侧固定栏指定一个右侧的100%的负外边距,为整个屏幕的宽度,这就使得main的最左侧可以与屏幕最左侧对齐。
此时main的宽度是100%,因此需要为其子内容content指定一个左侧的外边距用于空出左侧栏的位置,即左侧栏的宽度300px

这种方法要相对复杂一些,但也很常用。

绝对定位

<div id = "aside">
</div>
<div id = "main">
</div>
#aside{
    position:absolute;
    left:0;
    width:200px;
}
#main{
    margin-left:200px;
}

flex

<div id="container">
    <div id = "aside"></div>
    <div id = "main"></div>
</div>
#container{
    display:flex;
}
#aside{
    flex:0 0 200px;
}
#main{
    flex: 1 1;
}

三栏布局

方法一:绝对定位

左侧栏和右侧栏分别用绝对定位固定在左侧和右侧,中间栏则利用margin-left和margin-right空出左右栏位置来:


<div id = "left">
</div>
<div id = "main">
</div>
<div id = "right">
</div>
html,body{
  margin:0;
  padding:0;
  height:100%;
}
div{
  height:100%;
}
#left{
  width:200px;
  background-color:yellow;
  position:absolute;
  top:0;
  left:0;
}
#main{
  background-color:aqua;
  margin-left:200px;
  margin-right:300px;
}
#right{
  width:300px;
  background-color:orange;
  position:absolute;
  top:0;
  right:0;
}

这里的三个div的位置可以随意调整。

方法二:浮动+负外边距(双飞翼布局)

与两栏布局中的方法二中-100%外边距的使用有异曲同工之妙,注意理解。
在这里插入图片描述

<!--中间栏写在最前面-->
<div id = "main">
  <div id="content"></div>
</div>
<div id = "left">
</div>

<div id = "right">
</div>
html,body{
  margin:0;
  padding:0;
  height:100%;
}
div{
  height:100%;
}


#main{
  background-color:aqua;
  width:100%;
  float:left;
}
#left{
  width:200px;
  background-color:yellow;
  float:left;
  margin-left:-100%;
}

#right{
  width:300px;
  background-color:orange;
  float:left;
  margin-left:-300px;
}

#content{
  margin-left:200px;
  margin-right:300px;
}

这种方法的好处就是主体main在前面,可以先加载主题内容。

方法三:浮动定位法

此种方法最简单,分别另左侧栏和右侧栏向左和向右浮动,中间栏放在最后,再利用左右外边距空出左右栏的位置即可。

<!--左右侧栏的位置可以更改-->
<div id="left"></div>
<div id="right"></div>
<!--中间栏放最后-->
<div id="main"></div>

*{
  margin:0;
  padding:0;
  height:100%;
}
#left{
  width:300px;
  background-color:yellow;
  float:left;
}
#right{
  width:200px;
  background-color:orange;
  float:right;
}
#main{
  background-color:aqua;
  margin-left:300px;
  margin-right:200px;
}

方法四:flexbox

<div>
  <article></article>
  <nav></nav>
  <aside></aside>
</div>
div{
  display:-webkit-flex;
  display:flex;

  margin:0;
  padding:0;
  height:800px;
}
article{
  flex:1 1;
  order:2;  
  background-color:yellow;
}

nav{
  flex:0 0 200px;
  order:1;  
  background-color:blue;
}
aside{
  flex:0 0 200px;
  order:3;
  background-color:aqua;
}

方法五: 圣杯布局

双飞翼布局的前身。

<div id="container">
  <div id="center" class="column">#center</div>
  <div id="left" class="column">#left</div>
  <div id="right" class="column">#right</div>
</div>

前面的实现都一样,三栏都向左浮动,center的宽度为100%,left的margin-left为-100%,right的margin-left为其自身宽度的负值。
但此时左右边栏实际上是在center上方的,会遮盖center内容。

此时为container设置一个左右的padding,分别为left和right的宽度。此时整体都是向中间压缩的:
在这里插入图片描述
然后对left与right使用position:relative,使其相对现在的位置分别向左、向右移动,从而占据container利用padding空出来的位置。

在这里插入图片描述

### 使用 Flexbox 实现三栏布局的方法 Flexbox 是一种一维布局模型,适用于沿着一个轴(水平或垂直)排列元素。通过设置容器的 `display: flex` 属性,可以使子元素按照 Flexbox 布局排列[^2]。 #### 示例代码 以下是一个使用 Flexbox 创建三栏布局的示例,其中左侧和右侧为固定宽度,中间自动填充剩余空间: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>三栏布局示例 - Flexbox</title> <style> .container { display: flex; /* 启用 Flexbox 布局 */ gap: 10px; /* 设置子元素之间的间距 */ } .left, .right { width: 200px; /* 固定宽度的左右 */ background-color: lightblue; padding: 20px; } .center { flex: 1; /* 中间自适应填充剩余空间 */ background-color: lightcoral; padding: 20px; } </style> </head> <body> <div class="container"> <div class="left">左侧内容</div> <div class="center">中间内容</div> <div class="right">右侧内容</div> </div> </body> </html> ``` 在这个示例中,`.container` 被设置为 Flexbox 容器,`gap` 属性用于设置子元素之间的间距。`.left` 和 `.right` 类设置了固定宽度,而 `.center` 类通过 `flex: 1` 属性自动填充剩余空间[^3]。 #### 自适应布局 为了实现响应式三栏布局,可以结合媒体查询调整子元素的宽度和排列方式。例如,在小屏幕上将布局改为单列显示: ```css .container { display: flex; } @media (max-width: 768px) { .container { flex-direction: column; /* 小屏幕时改为垂直布局 */ } .left, .center, .right { width: 100%; /* 每个子元素占据整行宽度 */ } } ``` 此代码片段展示了如何通过媒体查询改变布局方向,从而实现响应式设计[^4]。 #### 最佳实践 - 使用 `flex` 属性代替固定宽度,使布局更具灵活性。 - 通过 `gap` 属性设置子元素之间的间距,避免使用 `margin` 导致布局混乱。 - 结合媒体查询优化不同设备上的显示效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值