CSS的三种布局机制(标准流、浮动、定位)

CSS的三种布局机制

普通流(标准流)

普通流中主要分为两个板块,一个是块级元素,一个是行内元素

块级元素

块级元素的特点就是独占一行,从上到下顺序排列

块级元素:div、hr、p、h1~h6、ul、ol、dl、form、table、...

行内元素

行内袁术会按照顺序从左到右的顺序排列,直到父元素的宽度不足会换行

行内元素:span、a、i、em、...

浮动:Float

让盒子从普通流中起来,主要作用让多个块级盒子一行显示。

我们知道想让独占一行的块级元素像行内元素那样在一排中有序的排列有两种方式

第一种display: inline-block,转换为行内块元素,但是有个缺陷就是每个行内块元素之间都会有空白间隙

第二种就是我们现在要说的浮动

浮动的特点

脱标 :脱离标准流,浮于标准流的上面

不占位置:浮动的元素是不会占用标准流的位置的,也就是说当一个盒子浮动了之后,其下的空间会被其他标准流元素占用,位于浮动元素下面

改变display属性:float属性会改变元素display属性,任何元素都可以浮动。浮动元素会生成一个块级框, 生成的块级框和我们前面的行内块极其相似。但是是紧密贴在一起的,不会像行内快那样有间隙。在定位后面统一详细说明。

浮动的应用

一般我们的网页的布局就是标准流 + 浮动 + 定位完成的

浮动和标准流的父盒子搭配

因为浮动脱标,所以我们一般会给浮动的元素添加一个父级标准流盒子,这样可以避免浮动的元素影响其他的标准流元素

清除浮动

首先说说清除浮动的运用场景

在很多情况下,我们的父级盒子可能是固定设置高度的,是需要其内子元素的高度叠起来撑起父盒子的高度的,如果此时我们的子盒子都使用了浮动,不占有父级标准流元素的高度,那么父盒子的高度就不会被撑高,高度就会为0。就影响了父盒子下面的标准流盒子,我们得清除由于浮动带来的这种影响,所以这里说成清除浮动

归根到底一句话

清除浮动主要为了解决父级元素因为子级浮动引起内部高度为0 的问题。清除浮动之后, 父级就会根据浮动的子盒子自动检测高度。父级有了高度,就不会影响下面的标准流了

清除浮动的几种方式

  • 第一种

选择器{clear:属性值;}
属性值描述
left 不允许左侧有浮动元素(清除左侧浮动的影响)
right 不允许右侧有浮动元素(清除右侧浮动的影响)
both 同时清除左右两侧浮动的影响

但是我们实际工作中, 几乎只用 clear: both;

  • 第一种的行内表现模式

//是W3C推荐的做法是通过在浮动元素末尾添加一个空的标签例如
style=”clear:both”></div>
  • 第二种:给父级添加overflow属性方法

overflow为 hidden| auto| scroll
  • 第三种 使用after伪元素清除浮动

 .clearfix:after {  
content: "";
display: block;
height: 0;
clear: both;
visibility: hidden;  
}  
.clearfix {
*zoom: 1;
}   /* IE6、7 专有 */
  • 第四种:使用双伪元素清除浮动

.clearfix:before,
.clearfix:after {
content:"";
display:table;
}
.clearfix:after {
clear:both;
}
.clearfix {
*zoom:1;
}

定位:position

将盒子在某一个位置 自由的漂浮在其他盒子(包括标准流和浮动)的上面 即尾定位

定位的组成

定位由两部分组成:定位模式 + 边偏移

  • 首先定位模式有:

语义
static 静态定位,即无定位
relative 相对定位
absolute 绝对定位
fixed 固定定位
  • 静态定位:用于不要定位时运用

  • 相对定位:

    • 是相对于自己本来在标准流中的左上角尾基准进行偏移

    • 使用了边偏移的相对定位,它偏移之前在标准流中的空间仍然被他所占有

  • 绝对定位:

    • 是以带有定位的父级元素为基准

    • 脱标,不想相对定位那样偏移后仍然占有标准流的空间

    • 父元素没有定位,就以浏览器为准,左上角对齐,一般父级元素都设置为相对定位偏移量为0,配合其内的子元素的绝对定位 + 偏移 完成布局,俗称子绝父相

  • 固定定位:

    • 和绝对定位差不多,也是脱标

    • 但是不以带定位的父级为基准,而是从一而终的认浏览器为基准 + 边偏移

    • 不随滚动条而滚动

  • 其次边偏移的元素有:

边偏移属性示例描述
top top: 80px 顶端偏移量,定义元素相对于其父元素上边线的距离
bottom bottom: 80px 底部偏移量,定义元素相对于其父元素下边线的距离
left left: 80px 左侧偏移量,定义元素相对于其父元素左边线的距离
right right: 80px 右侧偏移量,定义元素相对于其父元素右边线的距离

绝对定位的盒子居中显示

之前我们设置居中显示,都是 margin : auto完成,但是在绝对定位和固定定位中,已经不通用了

  • left: 50%;                 //让盒子的左边对齐父盒子的中线

  • margin-left : -50px;//在让盒子想左移动绝对定位盒子的宽度的一般的距离,实现居中显示

  • 水平居中、垂直居中同理。

定位盒子覆盖显示问题

在使用 (相对、绝对、固定) 定位的时候,会出现两个定位的盒子发生了部分区域或者全区域堆叠的问题

默认时是后来者居上,但是我们可以改变这种默认操作

  • z-index : 999;

  • 解释,默认为0,数值越大,盒子越在上面

浮动、定位改变dispay属性

  • 我们知道,display是显示模式

比如转换为行内块:display : inline-block

但是,这里要说都是,当我们使用了浮动和定位后,相当于就是我们将元素转为了行内块,可以对齐直接对这个盒子设置高度和宽度等,无需再次使用display进行转换

  • 给大伙比较一下或许就很好理解了:

显示模式转 为行内快,使元素在一行内顺序显示(多个元素有一定的缝隙,就是标准流)

浮动,使块元素在一行内顺序排列 (多个元素无缝隙,且浮动元素不占标准流空间)

定位(绝对和相对)也和浮动相似,默认转换为行内块的特性,可以直接设置高宽等

待补充......

posted @ 2020-02-26 00:20  阿陈不是混子  阅读(777)  评论(0)    收藏  举报
!function(e){var t={};function a(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,a),s.l=!0,s.exports}a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)a.d(n,s,function(t){return e[t]}.bind(null,s));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=14)}([function(e,t,a){},function(e,t,a){},function(e,t,a){},function(e,t,a){},function(e,t,a){},function(e,t,a){},function(e,t,a){},function(e,t,a){},function(e,t,a){},function(e,t,a){},function(e,t,a){},function(e,t,a){},function(e,t,a){},function(e,t,a){},function(e,t,a){"use strict";a.r(t);a(0);var n={version:"3.0.0",avatar:null,favicon:null,customNavs:[],catalog:{enable:!1,move:!0,index:!0,level1:"h2",level2:"h3",level3:"h4"},signature:{enable:!0,author:null,license:"署名-非商业性使用-相同方式共享 4.0 国际",link:"https://creativecommons.org/licenses/by-nc-sa/4.0/",remark:null},sponsor:{enable:!0,text:"Buy me a cup of coffee ☕.",paypal:null,wechat:null,alipay:null},github:{enable:!1,color:"#fff",target:"_blank",fill:null,link:null}};function s(){return $("#topics").length>0}a(1);var l=function(){var e=n.github;if(e.enable){let t=e.fill?`fill:${e.fill};`:"";$("body").append(`\n \n `)}};a(2);var i=function(){const e=n.customNavs,t=$("#navList");e&&e.length&&(e.forEach(e=>{if(e.chilren&&e.chilren.length){var a=e.chilren.map((function(e){return`
  • ${e.title}
  • `}));t.find("li").eq(1).after(`\n
  • \n ${e.title}\n \n \n
      ${a.join("")}
    \n
  • `)}else t.find("li").eq(1).after(`
  • ${e.title}
  • `)}),$("li.esa-has-subnavs").hover((function(){$(this).find("svg").addClass("open"),$(this).find(".esa-sub-navs").fadeIn("fast")}),(function(){$(this).find("svg").removeClass("open"),$(this).find(".esa-sub-navs").hide()}))),$.each(t.children("li"),(e,t)=>{$(t).children("a").length?$(t).append(""):$(t).remove()}),$("#header").prepend('
    '),$(".esa-mobile-menu").on("click",()=>{$("#navigator").fadeToggle()})};a(3);var o=function(){$("#footer").append(`& Theme Silence v${n.version}`)};a(4);var c=function(){const e=n.avatar,t=n.favicon;e&&$("#sideBarMain").prepend(``),t&&$("#favicon").attr("href",t)};a(5);var r=function(){const e=n.catalog;if(e.enable){let t=[e.level1,e.level2,e.level3],a=$("#cnblogs_post_body").find(t.join(","));if(!a.length)return!1;$("body").append('
    ');let n=0,s=0,l=0,i="",$(".esa-contents").append(i)}};a(6);const d="https://unpkg.com/lightbox2@2.11.1/dist/css/lightbox.min.css",p="https://unpkg.com/lightbox2@2.11.1/dist/js/lightbox.min.js";var h=function(){$("head").append(``),$.getScript(p,()=>{$("#cnblogs_post_body").find("img").wrap((function(){return``})),$(".code_img_closed, .code_img_opened, .cnblogs_code_copy img").unwrap()})};a(7);var u=function(){let e=$(".postBody .cnblogs-markdown").find("pre code");if(!e.length)return!1;$.each(e,(e,t)=>{if(!$(t).hasClass("hljsln")){var a=$(t).html();a=function(e){var t=e.replace(/]*>|<\/span>/g,"");/\r|\n$/.test(t)&&(e+='');var a=1;return e=''+(e=''+(e=e.replace(/\r\n|\r|\n/g,(function(e){return e+''}))))}(a),$(t).html(a).addClass("hljsln");var n=$("span[data-num]:last");n.html()||n.remove()}})};a(8);var f=function(){const e=n.signature;if(e.enable){const t=$("#cb_post_title_url").attr("href"),a=`
    \n

    作者:${e.author||$("#profile_block a").eq(0).html()}

    \n

    出处:${t}

    \n

    版权:本文采用「${e.license}」知识共享许可协议进行许可。

    \n

    ${e.remark||""}

    \n
    `;$("#MySignature").html(a).show()}};a(9),a(10);function v(e){$("body").prepend(`
    ${e}
    `);let t=$(".esa-layer");t.slideDown(200),setTimeout(()=>{t.remove()},2e3)}var m=function(){const e=n.sponsor;$("#blog_post_info").prepend(`\n
    \n
    ${e.text}
    \n
      \n
    • \n
    • \n
    • \n
    \n
    \n \n
    \n
    `);var t=$(".esa-sponsor");t.find(".box li").hover((function(){const a=$(this).attr("class");if("paypal"==a&&!e.paypal)return v("没有设置 PayPal 收款二维码😅");if("alipay"==a&&!e.alipay)return v("没有设置支付宝收款二维码😅");if("wechat"==a&&!e.wechat)return v("没有设置微信收款二维码😅");var n=null;switch(a){case"paypal":n=e.paypal;break;case"alipay":n=e.alipay;break;case"wechat":n=e.wechat}t.find(".qrshow").html(``).show()}),(function(){t.find(".qrshow").hide()}))};a(11);var g=function(){const e=".feedbackItem > .feedbackCon > .blog_comment_body",t=()=>{$(e).before("
    ");let t=$(".feedbackItem > .feedbackCon");$.each(t,(function(e,t){let a=null,n=$(t).find('span[id$="avatar"]');n.length&&(a=$.trim($(n).text())),$(t).find(".esa-comment-avatar img").attr("src",a||"https://pic.cnblogs.com/face/sample_face.gif");const s=$(t).parent().find(".comment_date").next().attr("href");$(t).find(".esa-comment-avatar a").attr("href",$.trim(s))}))};if($(e).length)t();else{let a=1,n=setInterval(()=>{$(e).length&&(clearInterval(n),t()),10==a&&clearInterval(n),a++},500)}};a(12);var b=function(){$("body").append('
    \n
    \n \n \n \n
    \n
    \n
    主题色彩
    \n
    \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n
    \n
    ');const e=s()&&n.catalog.enable;e&&$(".esa-toolbar").append('');const t="silence-mode-"+currentBlogApp,a="silence-theme-"+currentBlogApp,l=sessionStorage.getItem(t)||"light",i=sessionStorage.getItem(a)||"a1";$("html").attr("mode",l),$("html").attr("theme",i);const o=$(".esa-toolbar"),c=$(".skin-popup");let r=!1;o.find(".bars").click((function(){r?(o.find(".bars").removeClass("bars-show"),o.find(".up").removeClass("up-show"),o.find(".mode").removeClass("mode-show"),o.find(".skin").removeClass("skin-show"),e&&o.find(".contents").removeClass("contents-show")):(o.find(".bars").addClass("bars-show"),o.find(".up").addClass("up-show"),o.find(".mode").addClass("mode-show"),o.find(".skin").addClass("skin-show"),e&&o.find(".contents").addClass("contents-show")),r=!r})),o.find(".up").click(()=>{$("html, body").animate({scrollTop:0},450)}),o.find(".mode").click(()=>{const e="light"==$("html").attr("mode")?"dark":"light";sessionStorage.setItem(t,e),$("html").attr("mode",e)}),o.find(".skin").click(()=>{c.slideToggle()}),c.find(".themes button").click((function(){const e=$(this).data("theme");sessionStorage.setItem(a,e),$("html").attr("theme",e)})),o.find(".contents").click(()=>{$(".esa-contents").toggleClass((function(){return $(this).hasClass("active")?($(this).removeClass("active"),"noactive"):($(this).removeClass("noactive"),"active")}))})};a(13);const w={show:()=>{$(".esa-loader").show()},hide:()=>{$(".esa-loader").fadeOut()}};var y=w;new class{constructor(){this.init()}init(){$.extend({silence:e=>{e&&$.extend(!0,n,e),this.building()}})}building(){c(),l(),o(),i(),b(),s()?(r(),h(),u(),f(),m(),g()):($(".forFlow").css({marginLeft:"260px"}),$("#sideBar").show()),y.hide()}}}]);