float详解、圣杯布局

一、开始

虽然现在有了flex弹性盒子模型,很多布局效果都可以通过flex盒子来实现,但由于flex盒子模型的兼容性不容乐观

ie至少要10才能支持flex,所以还是很有必要学习float流式布局的

二、实例

正常的块级元素的布局是这样的:(文字代表元素的float属性)

对于float布局要记住:

  1.如果浮动元素的上一个元素也是浮动,那么该元素会与上一个元素排列在同一行,如果行宽不够,后面的元素会被挤到下一行

  2.如果浮动元素的上一个元素不是浮动,那么该元素仍然处于上一个元素的下方,根据浮动设定在左或者在右,而其本身也脱离普通流,后边的元素会自动往上移动到上一个普通流元素下方为止

对第二个元素设置float:left,因为红色块不是浮动,所以橙色块仍在红色块下方,紫色块会向上移动到红色块(普通流)下方为止

如果对紫色块设置float:right,则紫色块和橙色块都会位于红色块(普通流)下方,而紫色块相邻的下一个绿色块也会向上移动到红色块(普通流)下方。

如果我们想让绿色块留在原本属于他的一行而不向上移动,可以给他加上clear:both,这样他就不会移动了

关于清除浮动:

  1.清除浮动并不是说让浮动元素回到文档流
  2.清除浮动只会改变改元素自身的位置,并且只针对排在该元素前面的元素。目的是让自己的左边或者右边没有浮动元素

当然用clear做更多的事,比如我们不想让紫色块和橙色块在同一行,可以在紫色块上加clear:left

如果我们给绿色块加的属性不是clear:both,而是clear:left的话,紫色块和绿色块就在同一行了

关键是记住一项元素布局的是他的上一个元素:

比如我们给橙色块加clear:right,紫色块不加clear,则橙色块和紫色块在同一行,橙色块的clear属性不会影响到紫色块:

三、圣杯布局

所谓圣杯布局,即是两边定宽,而中间自适应的一种布局: 用到浮动、负边距、相对定位,不添加额外标签

html结构为:

<div class = "header">header</div>
    <div class = "container">
        <div class = "left">left</div>
        <div class = "center">center</div>
        <div class = "right">right</div>
    </div>
<div class = "footer">footer</div>

填好一些公用的样式:

.header,
    .footer{
        background: grey;
        height: 50px;
        width: 100%;
        text-align: center;
        line-height: 50px;
    }
    .left,
    .center,
    .right{
        height:50px;
        text-align: center;
        line-height: 50px;
    }
    .left{
        background: red;
    }
    .center{
        background: black;
    }
    .right{
        background: purple;
    }

这时候页面的结构为:

接下来我们想让left和right各占50px宽度,中间自适应:

.header,
    .footer{
        background: grey;
        height: 50px;
        width: 100%;
        text-align: center;
        line-height: 50px;
    }
    .container{
        padding: 0 50px;
    }
    .left,
    .center,
    .right{
        position: relative;
        text-align: center;
        line-height: 50px;
    }
    .left{
        float: left;
        width: 50px;
        margin-left: -50px;
        background: red;
    }
    .center{
        float: left;
        width:100%;
        background: black;
    }
    .right{
        float: left;
        margin-left: -50px;
        right: -50px;
        width:50px;
        background: purple;
    }
    .footer{
        clear:both;
    }

即修改了container左右padding:50px,center宽度100%,全部向左浮动,再加上left和margin等属性使之排列在一行

我们希望中间部分的高度被内容撑开,但此时如果任意一个的高度改变,其余两个的高度是不会变的:

这个问题我们可以通过padding补偿发来解决:

.container{
        padding: 0 50px;
        overflow: hidden;
    }
    .left,
    .center,
    .right{
        position: relative;
        text-align: center;
        line-height: 50px;
        padding-bottom: 1000px;
        margin-bottom: -1000px;
    }

主要是修改外层container的overflow:hidden,给子元素一个足够大的padding并margin负值回来,就能够同时改变高度了:

最终代码:

<style>
    #wrapper{
        width: 300px;
        height: 1000px;
        margin: 50px auto;
        line-height: 200px;
        font-size: 20px;
        color: white;
        text-align: center;
        overflow: hidden
    }
    .header,
    .footer{
        background: grey;
        width: 100%;
        text-align: center;
        line-height: 50px;
    }
    .container{
        padding: 0 50px;
        overflow: hidden;
    }
    .left,
    .center,
    .right{
        position: relative;
        text-align: center;
        line-height: 50px;
        padding-bottom: 1000px;
        margin-bottom: -1000px;
    }
    .left{
        float: left;
        width: 50px;
        margin-left: -50px;
        background: red;
    }
    .center{
        float: left;
        width:100%;
        height: 100px;
        background: black;
    }
    .right{
        float: left;
        margin-left: -100%;
        right: -100%;
        width:50px;
        background: purple;
    }
    .footer{
        clear:both;
    }
</style>
<body>
    <div id = ‘wrapper‘>
        <div class = "header">header</div>
        <div class = "container">
            <div class = "left">left</div>
            <div class = "center">center</div>
            <div class = "right">right</div>
        </div>
        <div class = "footer">footer</div>
    </div>
</body>

至此,就简略的复习完了float和圣杯布局的基本知识点

时间: 2024-10-08 13:43:51

float详解、圣杯布局的相关文章

通俗易懂的CSS的浮动float详解

目录: 1. CSS浮动属性float详解 2. CSS常见页面布局 3. CSS浮动清除和清除浮动的几种方法 4. 高度塌陷的产生条件和解决方法 ## CSS浮动属性float详解 *首先,我们需要了解什么是浮动?浮动是指(浮动的特点):- 将元素排除在普通流之外,即元素将脱离标准文档流.- 元素将不在页面占用空间.- 将浮动元素放置在包含框的左边或者右边.- 浮动的框可以向左或者向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止.- 经常使用它来实现特殊的定位效果. float的属性

详解CSS布局

CSS页面布局允许我们拾取网页中的元素,并且控制它们相对正常布局流.周边元素.父容器或者主视口/窗口的位置.主要对文档流的改变进行布局.假设你已经掌握了CSS的选择器.属性和值,并且可能对布局有一定了解可以往下看,如果没有可以先看这篇博客css解析. css实现左右布局 css实现左右布局的方式大概有六种: 1. table的li实现 table标签是能够具有实现左右布局的属性,tr表示一行,td表示一列,tr中可以添加td实现盒子的左右布局. 2 . inline-block display:

CSS布局(四) float详解

一.float设计初衷 因为float被设计出来的初衷是用于--文字环绕效果.即,一个图片一段文字,图片float:left之后,文字会环绕图片. <div style="width: 100px;height: 100px"> <img src="image/1.jpg" style="width: 50px;height: 50px;float: left">阿斯利康大家啊胜利大街拉速度来喀什建档立卡结算单 </

float详解

先上一个简单示例,了解一下float的使用 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>fl0at</title> <style type="text/css&q

[七]基础数据类型之Float详解

Float 基本数据类型float  的包装类 Float 类型的对象包含一个 float 类型的字段 属性简介 用来以二进制补码形式表示 float 值的比特位数 public static final int SIZE = 32; 二进制补码形式表示 float 值的字节数 public static final int BYTES = SIZE / Byte.SIZE; 表示基本类型 float 的 Class 实例 public static final Class<Float> TY

CSS float详解

前言:在我们写CSS样式的时候,float,position,display,overflow这几个关键字用得比较多. 弄清楚他们之间的原理,我们可以更高效的写出我们想要的布局. 作者:Ry-yuan 原文地址:http://www.cnblogs.com/Ry-yuan/p/6816290.html 一.float 1.什么是浮动:在我们布局的时用到的一种技术,能够方便我们进行布局,通过让元素浮动,我们可以使元素在水平上左右移动,再通过margin属性调整位置 2.浮动的原理:使当前元素脱离普

Android开发之详解五大布局

为了适应各式各样的界面风格,Android系统提供了5种布局,这5种布局分别是: LinearLayout(线性布局) TableLayout(表格布局) RelativeLayout(相对布局) AbsoluteLayout(绝对布局) FrameLayout(框架布局) 利用这五种布局,可以在屏幕上将控件随心所欲的摆放,而且控件的大小和位置会随着屏幕大小的变化作出相应的调整.下面是这五个布局在View的继承体系中的关系:<ignore_js_op> 一,LinearLayout(线性布局)

[TimLinux] CSS float和position详解

1. float 详解 1.1. 定义 摘自w3school:float 属性定义元素在哪个方向浮动.以往这个属性总应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动.浮动元素会生成一个块级框,而不论它本身是何种元素.如果浮动非替换元素,则要指定一个明确的宽度:否则,它们会尽可能地窄. 注释:假如在一行之上只有极少的空间可供浮动元素,那么这个元素会跳至下一行,这个过程会持续到某一行拥有足够的空间为止. 1.2. 关键点 从上面的定义,分析几个关键点: float是可以独立存

java对象详解

java对象详解 内存布局 普通对象布局 数组的内存布局 内部类的内存布局 对象分解 对象头-mark word(8字节) 实例数据 对齐填充(可选) java锁分析 java对象详解 HotSpot虚拟机中,对象在内存中存储的布局可以分为对象头,实例数据,对齐填充三个区域.本文所说环境均为HotSpot虚拟机.即输入java -version返回的虚拟机版本: java version "1.8.0_111" Java(TM) SE Runtime Environment (buil