css4种布局技巧-float

我所知的常用的布局技巧有四种,原来的三种(1.float布局  2.position布局 3.table布局)以及现在css3新增的flex布局。这四种布局各有优劣

block与inline属性比较

  • display:block
  1. block元素会独占一行,多个block元素会各自新起一行。默认情况下,block元素宽度自动填满其父元素宽度。
  2. block元素可以设置width,height属性。块级元素即使设置了宽度,仍然是独占一行。
  3. block元素可以设置margin和padding属性。
  • display:inline
  1. inline元素不会独占一行,多个相邻的行内元素会排列在同一行里,直到一行排列不下,才会新换一行,其宽度随元素的内容而变化。
  2. inline元素设置width,height属性无效。
  3. inline元素的margin和padding属性,水平方向的padding-left, padding-right, margin-left, margin-right都产生边距效果;但竖直方向的padding-top, padding-bottom, margin-top, margin-bottom不会产生边距效果。
  • display:inline-block
  1. 简单来说就是将对象呈现为inline对象,但是对象的内容作为block对象呈现。之后的内联对象会被排列在同一行内。比如我们可以给一个link(a元素)inline-block属性值,使其既具有block的宽度高度特性又具有inline的同行特性

float属性

1.会以某种方式将浮动元素从文档的正常流中删除,其他元素会环绕该元素

2.float属性的元素会自动生成块级框,按照块级元素来处理,display:block也可以使用,不过没有具体意义

3.浮动元素的规则:

  • 浮动元素的外边距不会合并(与table不相同,在下文会解释)
  • 浮动元素不能超过其包含块的左右边界
  • 浮动元素的的左右边界必须是文档之前出现的浮动元素边界,除非是在正上方或者正下方
  • 后出现的浮动元素必须比先出现的浮动元素低
  • 浮动超出包含块,会另起一行

对上面规则的解释

放上一段这样的html代码

1 <div style="border: solid 5px #333; width:300px;">
2
3         <div  id="redBox" style="height: 100px; width: 100px; background-color: Red;  ">
4         </div>
5         <div id="greenBox" style="height: 100px; width: 100px; background-color: Green;">
6         </div>
7         <div id="yellowBox" style="height: 100px; width: 100px; background-color: Yellow;">
8         </div>
9     </div>

将redBox改为float:left之后

greenBox消失了,说明浮动元素首先是从父元素中扣出来,形成新的一层,然后开始浮动。对于原有的元素会覆盖

然而,在greenBox加入文字之后呢,

看起来像是在yellowBox里加了文字一样,这是因为文本元素会环绕浮动元素排列,也就是“流动”,而greenBox高度只有100px,所以挤到了他的下边界之外

但是如果greenBox的高度不设置呢,将greenBox的height属性去掉,

高度随着文本流改变,就会出现和行高等高的greenBox

如果redBox之后的父元素中有很多文本,就会出现这种情况,

  

这就解释了1.会以某种方式将浮动元素从文档的正常流中删除,其他元素会环绕该元素

而对于5条浮动规则:

可以这样理解,css每次处理到浮动元素时是不管这个浮动元素上面的元素的,对于这样一段代码

<div style="border: solid 5px #333; width:300px;">
  <p>xxxxxxxxxxxxxxx</p>

        <div  id="redBox" style="height: 100px; width: 100px; background-color: Red;float:left  ">
        </div>
        <div id="greenBox" style="height: 100px; width: 100px; background-color: Green;">
        </div>
        <div id="yellowBox" style="height: 100px; width: 100px; background-color: Yellow;">
        </div>
    </div>

会出现这样的现象

也就述说浮动是以当前浮动元素的原上边界作为浮动的上边界的。

而且浮动块会尽可能的向一个方向浮动,但是不能覆盖其他浮动元素,超出边界 则另起一行

看下面一段代码:

<div style="border: solid 5px #333; width:300px;">
        <div  id="redBox" style="height: 100px; width: 100px; background-color: Red;float:left  ">
        </div>

        <div id="greenBox" style="height: 100px; width: 100px; background-color: Green;float:left">
        </div>

        <div id="yellowBox" style="height: 100px; width: 100px; background-color: Yellow;">
        </div>
    </div>

如果含有多个浮动块

<div style="border: solid 5px #333; width:300px;">
        <div  id="redBox" style="height: 100px; width: 100px; background-color: Red;float:left  ">
        </div>

        <div id="greenBox" style="height: 100px; width: 100px; background-color: Green;float:left">
        </div>
   <div  id="redBox" style="height: 100px; width: 100px; background-color: Red;float:left  ">
        </div>
  <div id="greenBox" style="height: 100px; width: 100px; background-color: Green;float:left">
        </div>
        <div id="yellowBox" style="height: 100px; width: 100px; background-color: Yellow;">
        </div>
    </div>

这时又会发现,浮动块跑到了父元素的外面,这是因为浮动块是相当于从父元素抠出来的,所以不占位置,所以会超出下边界。

关于父元素塌陷的相关内容,具体可以看这篇博客:http://blog.csdn.net/GoodShot/article/details/44348525

clear属性

clear:left | right | both | none | inherit

clear:left  clear:right 分别是清除左右浮动,clear:both是清除所有,看下面的例子

<div style="border: solid 5px #333; width:300px;">
        <div  id="redBox" style="height: 100px; width: 100px; background-color: Red;float:left  ">
        </div>

        <div id="greenBox" style="height: 120px; width: 100px; background-color: Green;float:right">
        </div>

        <div id="yellowBox" style="height: 100px; width: 300px; background-color: Yellow;">
        </div>
    </div>

然后给yellowBox分别设置clear:left,clear:right,clear:both;

                              

以上是我关于浮动的理解

时间: 2024-11-02 23:37:10

css4种布局技巧-float的相关文章

详解 CSS 七种三栏布局技巧

作者:林东洲 链接:https://zhuanlan.zhihu.com/p/25070186 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 三栏布局,顾名思义就是两边固定,中间自适应.三栏布局在开发十分常见,那么什么是三栏布局?比如我打开某东的首页: 映入眼帘的就是一个常见的三栏布局:即左边商品导航和右边导航固定宽度,中间的主要内容随浏览器宽度自适应. 下面围绕的这样的目的,即左右模块固定宽度,中间模块随浏览器变化自适应,想要完成的最终效果如下图所示: 红色

移动平台3G手机网站前端开发布局技巧

本文转载至:移动平台3G手机网站前端开发布局技巧汇总 - 前端开发-武方博 您或许正在或准备参与一个WepApp项目,您或许正在Google搜索mobile development相 关的文章,您或许是一名专业的WEB前端工程师,您或许想学习Mobile前端开发方面的技术,如果您被我说中了,呵呵那么这篇文章将为您带来意想不到的 惊喜!当您看到这篇文章时,哥已经默认认为您是一名资深的WEB前端工程师,如果您不是,可能您会遇见许多不理解或听不懂的专业术语或前端技术(包括 WEB.Mobile).但是

移动平台3G手机网站前端开发布局技巧汇总

移动平台3G手机网站前端开发布局技巧汇总 作者:前端开发-武方博   发布:2011-05-10 09:11   分类:移动开发   阅读:120,618 views   7条评论 您或许正在或准备参与一个WepApp项目,您或许正在Google搜索mobile development相关的文章,您或许是一名专业的WEB前端工程师,您或许想学习Mobile前端开发方面的技术,如果您被我说中了,呵呵那么这篇文章将为您带来意想不到的惊喜!当您看到这篇文章时,哥已经默认认为您是一名资深的WEB前端工程

CSS总结篇—布局技巧

CSS布局技巧 单列布局水平居中 水平居中的页面布局中最为常见的一种布局形式,多出现于标题,以及内容区域的组织形式,下面介绍四种实现水平居中的方法(注:下面各个实例中实现的是child元素的对齐操作,child元素的父容器是parent元素) 使用inline-block 和 text-align实现 .parent{text-align: center;} .child{display: inline-block;} 优点:兼容性好:不足:需要同时设置子元素和父元素 使用margin:0 au

三栏结构布局技巧,顶了

CSS 七种三栏布局技巧 三栏布局,顾名思义就是两边固定,中间自适应,即左边商品导航和右边导航固定宽度,中间的主要内容随浏览器宽度自适应. 下面围绕的这样的目的,即左右模块固定宽度,中间模块随浏览器变化自适应,想要完成的最终效果如下图所示: 红色和蓝色宽度固定,绿色宽度自适应,下面七种方法实现的最终效果跟这个差不多,可能会稍有不同. 下面七种技巧各有千秋,在开发中可以根据实际需求选择适合自己的方法进行编码. 1. 流体布局 <!DOCTYPE html><html lang="

DIV+CSS常用网页布局技巧!

以下是我整理的DIV+CSS常用网页布局技巧,仅供学习与参考! 第一种布局:左边固定宽度,右边自适应宽度 HTML Markup <div id="left">Left sidebar</div>  <div id="content">Main Content</div> CSS Code <style type="text/css"> *{    margin: 0;    paddi

CSS之定位布局(position,定位布局技巧)

css之定位 1.什么是定位:css中的position属性,position有四个值:absolute/relative/fixed/static(绝对/相对/固定/静态(默认))通过定位属性可以设置一些不规则的布局,使用TLBR(top,left,bottom,right)来调整元素位置. 2.各个属性值的描述: static(静态) 没有特别的设定,遵循基本的定位规定,不能通过z-index进行层次分级,在普通流中,各个元素默认的属性. relative(相对定位) 对象不可层叠.不脱离文

UWP开发入门(九)——简单界面的布局技巧及屏幕适应

嘿嘿嘿,题目比较绕哈.本篇主要讨论一般情况下,页面的布局技巧,怎么将元素的展现尽量做到分辨率无关.基本的思路仍然是尽量少的标定具体的数字,而是用比列来标注各元素占据的空间. 这里我打算用易信的名片页来举例: Phone的界面看起来不错,大致以纵向排列.最上方是标题栏,头像部分居中,下面的文字以列表形式靠左对齐,最下部为留白.考虑到标题栏需要锚定在顶部,不参与比例分配.头像,文字和留白的占比大致为2.5:4:3.XAML中的Grid定义如下: <Grid.RowDefinitions> <

Html利用CSS布局技巧

单列布局水平居中 水平居中的页面布局中最为常见的一种布局形式,多出现于标题,以及内容区域的组织形式,下面介绍四种实现水平居中的方法(注:下面各个实例中实现的是child元素的对齐操作,child元素的父容器是parent元素) 使用inline-block 和 text-align实现 .parent{text-align: center;} .child{display: inline-block;} 优点:兼容性好:不足:需要同时设置子元素和父元素 使用margin:0 auto来实现 .c