zoukankan      html  css  js  c++  java
  • 前端基础之布局篇

    1.两栏布局(左边宽度固定,右边宽度自适应)

    ①浮动(定位)+外边距

    <style type="text/css" rel="stylesheet">
            body{
                margin:0;
                padding:0;
            }
            .left{
                100px;
                height:200px;
                background-color:blueviolet;
                float:left;
            }
            .right{
                height:200px;
                margin-left:100px;//外边距值等于左边固定宽度的值,不能给右边自适应元素写width
                background-color:yellowgreen;
            }
        </style>
    <body>
        <div class="left"></div>
        <div class="right"></div>
    </body>
    

    ②自身浮动+自适应元素负边距

    <style type="text/css" rel="stylesheet">
            body{
                margin:0;
                padding:0;
            }
            .left{
                100px;
                height:200px;
                background-color:blueviolet;
                float:left;
            }
            .right{
                float:left;
               100%;//width写给父元素
                margin-left:-100px;
            }
            .inner{
                margin-left:100px;
                height:200px;//height写给子元素
                background-color:yellowgreen;
            }
        </style>
    <body>
        <div class="left"></div>
        <div class="right">
            <div class="inner">123</div>
        </div>
    </body>
    

    ③自身浮动+固定元素负边距

    <style type="text/css" rel="stylesheet">
            body{
                margin:0;
                padding:0;
            }
            .left{
                100px;
                height:200px;
                background-color:blueviolet;
                float:left;
                margin-right:-100%;
            }
            .right{
                float:left;
               100%;
            }
            .inner{
                margin-left:100px;
                height:200px;
                background-color:yellowgreen;
            }
        </style>
    <body>
        <div class="left">13123</div>
        <div class="right">
            <div class="inner">123</div>
        </div>
    </body>
    

    ④用BFC实现

    什么是BFC

    BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域。只有Block-level-box参与,它规定了内部的Block-level-box如何布局,并且与这个区域外部毫不相干。

    触发BFC的条件

    • float的值不为none;
    • overflow的值为scroll,auto或hidden;
    • display的值为table-cell,table-caption或inline-block;
    • position的值不为relative或static。

    BFC的规则

    • 内部的Box会在垂直方向,一个接一个地放置。
    • Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠。
    • BFC的区域不会与float box重叠。
    • BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
    • 计算BFC的高度时,浮动元素也参与计算。
    <style type="text/css" rel="stylesheet">
            body{
                margin:0;
                padding:0;
            }
            .left{
                100px;
                height:200px;
                background-color:blueviolet;
                float:left;
            }
            .right{
                height:200px;
                background-color:yellowgreen;
                overflow:hidden;
            }
        </style>
    <body>
        <div class="left">13123</div>
        <div class="right">2333</div>
    </body>
    

    ⑤flex实现

    <style type="text/css" rel="stylesheet">
            body{
                margin:0;
                padding:0;
            }
            .wrap{
                display:flex;
                100%;
            }
            .left{
                flex:0 0 100px;
                background-color:blueviolet;
            }
            .right{
                flex:auto;//auto表示 1 1 auto;
                height:200px;
                background-color:yellowgreen;
            }
        </style>
        <body>
        <div class="wrap">
            <div class="left">13123</div>
            <div class="right">2333</div>
        </div>
    </body>
    

    2.三栏布局
    ①圣杯布局

    <style type="text/css" rel="stylesheet">
            body{
                margin:0;
                padding:0;
            }
            .header,.footer{
                100%;
                height:50px;
                background-color:blueviolet;
            }
            .wrap{
                padding-left:100px;
                padding-right:100px;
                overflow:hidden;
            }
            .left{
                100px;
                margin-left:-100%;
                float:left;
                height:200px;
                background-color:black;
                position:relative;
                left:-100px;
                top:0;
            }
            .main{
                100%;
                height:200px;
                background-color:red;
                float:left;
            }
            .right{
                100px;
                height:200px;
                margin-left:-100px;
                float:left;
                background-color:yellowgreen;
                position:relative;
                right:-100px;
                top:0;
            }
        </style>
        <body>
       <div class="header"></div>
        <div class="wrap">
            <div class="main"></div>
            <div class="left"></div>
            <div class="right"></div>
        </div>
        <div class="footer"></div>
    </body>
    

    ②双飞翼布局

    <style type="text/css" rel="stylesheet">
            body{
                margin:0;
                padding:0;
            }
            .header,.footer{
                100%;
                height:50px;
                background-color:blueviolet;
                clear:both;
            }
            .left{
                100px;
                margin-left:-100%;
                float:left;
                height:200px;
                background-color:black;
            }
            .right{
                100px;
                height:200px;
                margin-left:-100px;
                float:left;
                background-color:yellowgreen;
            }
            .wrap{
                float:left;
                100%;
            }
            .main{
                margin-left:100px;
                margin-right:100px;
                height:200px;
                background-color:blanchedalmond;
            }
        </style>
        <body>
       <div class="header"></div>
        <div class="wrap">
            <div class="main"></div>
        </div>
            <div class="left"></div>
            <div class="right"></div>
        <div class="footer"></div>
    </body>
    

    ③用flex布局实现

    <style type="text/css" rel="stylesheet">
            body{
                margin:0;
                padding:0;
            }
            .header,.footer{
                100%;
                height:50px;
                background-color:blueviolet;
                clear:both;
            }
            .wrap{
                display:flex;
            }
            .main{
                flex:auto;
                background-color:yellowgreen;
                height:200px;
            }
            .left{
                100px;
                height:200px;
                background-color:black;
            }
            .right{
                100px;
                height:200px;
                background-color:royalblue;
            }
        </style>
    <body>
       <div class="header"></div>
        <div class="wrap">
            <div class="left"></div>
            <div class="main"></div>
            <div class="right"></div>
        </div>
        <div class="footer"></div>
    </body>
    

    如何实现绝对居中布局

    ①已知div的宽度高,采用position绝对定位的方式来实现居中

    <style type="text/css" rel="stylesheet">
            body{
                margin:0;
                padding:0;
            }
            .inner{
                200px;
                height:200px;
                background-color:greenyellow;
                position:absolute;
                margin-left:-100px;
                margin-top:-100px;
                top:50%;
                left:50%;
            }
        </style>
    <body>
        <div class="inner"></div>
    </body>
    

    利用position:absolute;绝对定位,可以让元素脱离文档流,然后利用top,right,bottom,left四个属性来对元素进行定位,注意:position:absolute;会有一个定位参考的父元素,它是相对于最近的,已经定位的,position不是static的元素进行定位的,如果没有,就是相对于根元素,也就是html来进行定位(因为这里没有设置父元素的定位,就是相对于根元素进行定位的)。然后在设置它的左margin和上margin为div宽度的一半就可以实现绝对居中了。

    ②已知div的宽高,实现绝对居中的另一种写法

    <style type="text/css" rel="stylesheet">
            body{
                margin:0;
                padding:0;
            }
            .inner{
                200px;
                height:200px;
                background-color:greenyellow;
                position:absolute;
                margin:auto;
                top:0;
                left:0;
                right:0;
                bottom:0;
            }
        </style>
    <body>
        <div class="inner"></div>
    </body>
    

    ③用flex布局实现

    <style type="text/css" rel="stylesheet">
            body{
                margin:0;
                padding:0;
                display:flex;
                height:600px;
                background-color:blanchedalmond;
                justify-content:center;
                align-items:center;
            }
            .inner{
                200px;
                height:200px;
                background-color:greenyellow;
            }
        </style>
    <body>
        <div class="inner"></div>
    </body>
    
  • 相关阅读:
    mingw-gcc-10.0.1-experimental-i686-posix-sjlj-20200202-0303907
    可以修改 QtScrcpy 窗口大小的小工具
    autosub 添加代理服务器参数 -P --proxy
    Python网络数据采集系列-------概述
    【刷题笔记】I'm stuck! (迷宫)-----java方案
    【刷题笔记】火车购票-----java方案
    mvc自定义全局异常处理
    使用html2canvas实现浏览器截图
    再谈Newtonsoft.Json高级用法
    Spire.Doc组件读取与写入Word
  • 原文地址:https://www.cnblogs.com/laijun/p/7467998.html
Copyright © 2011-2022 走看看