CSS 圣杯布局

前端的两个经典布局想必大家都有多了解--圣杯布局和双飞翼布局,因为它既能体现你懂HTML结构又能体现出你对DIV+CSS布局的掌握。

事实上,圣杯布局其实和双飞翼布局是一回事。它们实现的都是三栏布局,两边的盒子宽度固定,中间盒子自适应,也就是我们常说的固比固布局。它们实现的效果是一样的,差别在于其实现的思想。

通过缩放页面就可以发现,随着页面的宽度的变化,这三栏布局是中间盒子优先渲染,两边的盒子框子固定不变,即使页面宽度变小,也不影响我们的浏览。注意:当你缩放页面的时候,宽度不能小于700PX,为了安全起见,最好还是给body加一个最小宽度!
如果你有了那么一点理解以后,我们来看看圣杯布局的实现:

注:reset部分的代码大家自行添加

1.HTML结构:

 1 <header>
 2     <h4>Header内容区</h4>
 3 </header>
 4 <div class="container">
 5     <div class="middle">
 6         <h4>中间弹性区</h4>
 7     </div>
 8     <div class="left">
 9         <h4>左边栏</h4>
10     </div>
11     <div class="right">
12         <h4>右边栏</h4>
13     </div>
14 </div>
15 <footer>
16     <h4>Footer内容区</h4>
17 </footer>                

有人可能会有疑惑,为什么中间的主体部分要写在最前面。因为中间盒子是要被优先渲染嘛~并且设置其自适应,也就是width:100%。

2.css样式:

header{
    width: 100%;    height: 40px;
    background-color: #8ecfd4;
}
.container{
    overflow:hidden;
}
.middle{
    width: 100%;
    background-color: #f7f537;
    float:left;
}
.left{
    width: 200px;
    background-color: #37f7c8;
    float:left;
}
.right{
    width: 200px;
    background-color: #eb6100;
    float:left;
}
footer{
    width: 100%;
    height: 30px;
    background-color: #8ecfd4;
}

此时的效果图:

这时中间的三栏并没有在一行内显示,原因也很明确。三栏都浮动起来了,但是middle栏的宽度设置成了100%,到时左右两边的撑不下换行显示了。

现在我们需要做的是将left栏放到左侧,right栏放到右侧。那么我们就需要css的负margin了。

3.利用负边距布局

让左边的盒子上去
.left{
    margin-left:-100%;
}

让右边的盒子上去

.right {
    margin-left:-200px;
}

此时的效果图

实现固比固布局

虽然现在貌似已经实现了我们想要的布局,但是在中间填充内容的时候我们还是会发现问题。这一步我们也将中间的主体部分给一个高度,方便视觉效果。

.middle{
    width: 100%;
    height: 200px;
    background-color: #f7f537;
    float:left;
}
.left{
    width: 200px;
    height: 200px;
    background-color: #37f7c8;
    float:left;
}
.right{
    width: 200px;
    height: 200px;
    background-color: #eb6100;
    float:left;
}            

从上面的效果图可以看出,middle栏的内容被两边的部分遮挡住的,这并不是我们想要的,所以我们的工作还得继续。

4.让中间自适应的盒子安全显示(利用父级元素设置左右内边距的值,把父级的三个子盒子往中间挤。)

.container{
    padding: 0 200px;
}

这里的200px是左右盒子的宽度。

效果如下:

利用父级的内边距将盒子往中间挤

我们可以看到,左右两边的内边距是有了,但是中间盒子上的内容还是被压着。

5.左右两边分开来(给左右两个盒子加一个定位,加了定位之后左右两个盒子就可以设置left和right值。)

.left{
    position: relative;
    left: -200px;
}
.right{
    position: relative;
    right: -200px;
}

看最终效果图

现在我们的圣杯布局就OK啦!实现了我们要的效果,左右侧的盒子固定,中间盒子自适应,而且中间盒子的内容完全不受影响。希望对大家有帮助。

时间: 2024-08-27 11:41:49

CSS 圣杯布局的相关文章

css 圣杯布局三种方式

所谓的圣杯布局就是左右两边大小固定不变,中间宽度自适应.我们可以用浮动.定位以及flex这三种方式来实现 一般这种布局方式适用于各种移动端顶部搜索部分,这是最常见的,如京东手机版主页面顶部搜索: 可以看到左边有个菜单按钮,中间是搜索框,右边是登录两个文字,左右大小是固定的,而中间部分则是随着手机屏幕尺寸的大小而自适应.   第一种方法 float实现: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 &

css——圣杯布局

圣杯布局要求 header和footer各自占领屏幕所有宽度,高度固定 中间dontainer部分为左中右三栏式布局 三栏布局中左右两侧宽度固定,中间部分自动填充 实现方式 1.浮动 先定义header和footer的样式,使其宽度撑满,高度随意 container中三列设置为浮动和相对定位,且center部分放在最起那么,对footer设置clear:both;清除浮动 三列中的左右定宽200px,中间设置100% 由于浮动关系,center会撑满container,左右会被挤下去,给left

圣杯布局,双飞翼布局详解

圣杯布局和双飞翼布局解决的问题是一样的,都是用来解决左右定宽,中间自适应的三栏布局,中间栏要放在文档流前面以优先渲染. 圣杯布局和双飞翼布局:三栏全部加上float:left,左右两栏加上负margin,以形成三栏布局. 圣杯布局:大的div设置padding-left和padding-right,左右两个div用相对布局position: relative,加上right和left属性.双飞翼布局:中间div内加一层标签,在设置内层标签的margin html圣杯布局: <div class=

css布局之圣杯布局和双飞翼布局

圣杯布局和双飞翼布局 今天看了很多圣杯布局和双飞翼布局的技术博客,通过自己的理解总结一下吧. 1.二者相同点: 实现的都是三栏布局,两边的盒子宽度固定,中间盒子自适应,也就是我们常说的固比固布局.它们实现的效果是一样的. 2.不同点: 圣杯布局知识点:浮动,负边距,相对定位,不需要添加额外标签. 双飞翼:只用到浮动,负边距,不需要使用相对定位,需要添加一个额外的标签. 注意:html结构中中间部分要写在左右布局之前,为了优先渲染. 下面就先来看一下圣杯布局的实现过程吧: 先写出基本DOM结构:

【CSS】 布局之圣杯布局

在看众多大神的css布局指南时,经常看到一个布局:圣杯布局(也有称为双飞翼布局的).今天我们也来剖析一下. 其实,对于众多css布局,我们只要明确理解了3种技术,那么基本上大多数布局都难不倒我们了: 浮动 float 绝对定位和相对定位 negative margin 负边距 relative position 浮动 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止. 由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样.(w3c) 上面是

CSS之圣杯布局与双飞翼布局

圣杯布局 三行等高 HTML: <!DOCTYPE html><html><head>    <meta charset="utf-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <title></title>    <link rel="stylesheet"

CSS布局 -- 圣杯布局 &amp; 双飞翼布局

按照我的理解,其实圣杯布局跟双飞翼布局的实现,目的都是左右两栏固定宽度,中间部分自适应. 但在这里实现起来还是有一些区别的 [圣杯布局] 在这里,实现了左(200px) 右(220px) 宽度固定,中间自适应,container部分高度保持一致. DEMO 稍微说明一下: html代码中  middle部分首先要放在container的最前部分.然后是left,right 1.将三者都 float:left , 再加上一个position:relative (因为相对定位后面会用到) 2.mid

css中的圣杯布局和双飞翼布局

圣杯布局 布局要求: 三列布局,中间自适应,两边定宽 中间栏要在浏览器优先渲染 允许任意列的高度最高 用最简单的CSS.最少的HACK语句 解释说明: 1.min-width:700px是为了当页面缩小到指定的700px的时候,页面内容宽度不再随着浏览器缩小.是为了电脑的正常浏览效果 2.注意到container设置的值0 220px  0 200px,上 右 下 左,所以left 设置widh:200px,right设置width:220px 3.设置min-height:300px,是让三列

CSS布局(五) 圣杯布局

本文翻译修改自https://alistapart.com/article/holygrail 圣杯布局 在页面上的显示效果就是左右两边是个固定的宽度,中间的容器自适应:即根据页面大小的变化而变化. 如何实现 战略很简单.容器div的侧面有自适应中心和固定宽度的衬垫.然后诀窍是让左列与左侧填充对齐,右侧列与右侧填充对齐,留下中心列以填充容器的自适应宽度. 1.基本结构 <div id='header'></div> <div id='container'> <di