CSS三栏布局

本文详细介绍了网页布局中的五种常见技术:绝对定位、浮动、圣杯布局、双飞翼布局及Flexbox布局。每种布局技术均附带示例代码,便于理解其原理与应用场景。

一、绝对定位

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <style type="text/css">
            .container{
                position: relative;
            }
            .left{
                position: absolute;
                top: 0;
                right: 0;
                width: 100px;
                height: 100px;
                background: blue;
            }
            .right{
                position: absolute;
                top: 0;
                right: 0;
                width: 100px;
                height: 100px;
                background: green; 
            }
            .center{
                margin: 0px 100px;
                height: 100px;
                background: gray;
            }
        </style>
    </head>

    <body>
        <div class="container">
            <div class="left">left</div>
            <div class="center">center</div>
            <div class="right">rigth</div>
        </div>
    </body>
</html>                    

 

二、浮动

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <style type="text/css">
            .left{
                float: left;
                width: 100px;
                height: 100px;
                background-color: blue;
            }
            .right{
                float: right;
                width: 100px;
                height: 100px;
                background-color: red;
            }
            .center{
                height: 100px;
                margin: 0 100px;
                background-color: green;
            }
        </style>
    </head>

    <body>
        <div>
            <div class="left">left</div>
            <div class="right">right</div>
            <div class="center">center</div>
        </div>
    </body>
</html>

 

三、圣杯

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <style type="text/css">
            .container{
                height: 100px;
                padding: 0 100px 0 100px;
            }
            .center{
                float: left;
                width: 100%;
                height: 100%;
                background: #808080;
            }
            .left{
                position: relative;
                left: -100px;
                float: left;
                width: 100px;
                height: 100%;
                background: red;
                margin-left: -100%;
            }
            .right{
                position: relative;
                right: -100px;
                float: left;
                width: 100px;
                height: 100%;
                background: green;
                margin-left: -100px;
            }
        </style>
    </head>

    <body>
        <div class="container">
            <!-- 中间的 div 必须写在最前面 -->
            <div class="center">center</div>
            <div class="left">left</div>
            <div class="right">rigth</div>
        </div>
    </body>
</html>

  1.中间盒子的宽度设置为 width: 100%; 独占一行;

  2.使用负边距(均是 margin-left)把左右两边的盒子都拉上去和中间盒子同一行;
    .left {margin-left:-100%;} 把左边的盒子拉上去
    .right {margin-left:-右边盒子宽度px;} 把右边的盒子拉上去

  3.父盒子设置左右的 padding 来为左右盒子留位置;

  4.对左右盒子使用相对布局来占据 padding 的空白,避免中间盒子的内容被左右盒子覆盖;

 

四、双飞翼

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <style type="text/css">
            .container{
                height: 100px;
            }
            .center{
                float: left;
                width: 100%;
                height: 100%;
                background: #808080;
            }
            .center-inner{
                margin: 0 100px;
            }
            .left{
                float: left;
                width: 100px;
                height: 100%;
                background: red;
                margin-left: -100%;
            }
            .right{
                float: left;
                width: 100px;
                height: 100%;
                background: green;
                margin-left: -100px;
            }
        </style>
    </head>

    <body>
        <div class="container">
            <!-- 中间的 div 必须写在最前面,并且中间的盒子再套一个div -->
            <div class="center">
                <div class="center-inner">center</div>
            </div>
            <div class="left">left</div>
            <div class="right">rigth</div>
        </div>
    </body>
</html>

  1.中间盒子的宽度设置为 width: 100%; 独占一行;

  2.使用负边距(均是 margin-left)把左右两边的盒子都拉上去和中间盒子同一行;

  3.在中间盒子里面再添加一个 div,然后对这个 div 设置 margin-left 和 margin-right来为左右盒子留位置;

 

五、圣杯和双飞翼异同

  圣杯布局和双飞翼布局解决的问题是一样的,都是两边定宽,中间自适应的三栏布局,中间栏要在放在文档流前面以优先渲染。

  两种方法基本思路都相同:首先让中间盒子 100% 宽度占满同一高度的空间,在左右两个盒子被挤出中间盒子所在区域时,使用 margin-left 的负值将左右两个盒子拉回与中间盒子同一高度的空间。接下来进行一些调整避免中间盒子的内容被左右盒子遮挡。

  主要区别在于 如何使中间盒子的内容不被左右盒子遮挡:
    圣杯布局的方法:设置父盒子的 padding 值为左右盒子留出空位,再利用相对布局对左右盒子调整位置占据 padding 出来的空位;
    双飞翼布局的方法:在中间盒子里再增加一个子盒子,直接设置这个子盒子的 margin 值来让出空位,而不用再调整左右盒子。

  简单说起来就是双飞翼布局比圣杯布局多创建了一个 div,但不用相对布局了,少设置几个属性。

 

六、Flexbox

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <style type="text/css">
            .container{
                display: flex;
                flex-direction: row;
                height: 100px;
            }
            .left{
                flex-basis: 100px;
                height: 100%;
                background: #0000FF;
            }
            .center{
                flex-grow: 1;
                height: 100%;
                background: gray;
                
            }
            .right{
                flex-basis: 100px;
                height: 100%;
                background: #0000FF;
            }
        </style>
    </head>

    <body>
        <div class="container">
            <div class="left">left</div>
            <div class="center">center</div>
            <div class="right">rigth</div>
        </div>
    </body>
</html>

 

转载于:https://www.cnblogs.com/lishuxue/p/7274583.html

一、数据采集层:多源人脸数据获取 该层负责从不同设备 / 渠道采集人脸原始数据,为后续模型训练与识别提供基础样本,核心功能包括: 1. 多设备适配采集 实时摄像头采集: 调用计算机内置摄像头(或外接 USB 摄像头),通过OpenCV的VideoCapture接口实时捕获视频流,支持手动触发 “拍照”(按指定快捷键如Space)或自动定时采集(如每 2 秒采集 1 张),采集时自动框选人脸区域(通过Haar级联分类器初步定位),确保样本聚焦人脸。 支持采集参数配置:可设置采集分辨率(如 640×480、1280×720)、图像格式(JPG/PNG)、单用户采集数量(如默认采集 20 张,确保样本多样性),采集过程中实时显示 “已采集数量 / 目标数量”,避免样本不足。 本地图像 / 视频导入: 支持批量导入本地人脸图像文件(支持 JPG、PNG、BMP 格式),自动过滤非图像文件;导入视频文件(MP4、AVI 格式)时,可按 “固定帧间隔”(如每 10 帧提取 1 张图像)或 “手动选择帧” 提取人脸样本,适用于无实时摄像头场景。 数据集对接: 支持接入公开人脸数据集(如 LFW、ORL),通过预设脚本自动读取数据集目录结构(按 “用户 ID - 样本图像” 分类),快速构建训练样本库,无需手动采集,降低系统开发与测试成本。 2. 采集过程辅助功能 人脸有效性校验:采集时通过OpenCV的Haar级联分类器(或MTCNN轻量级模型)实时检测图像中是否包含人脸,若未检测到人脸(如遮挡、侧脸角度过大),则弹窗提示 “未识别到人脸,请调整姿态”,避免无效样本存入。 样本标签管理:采集时需为每个样本绑定 “用户标签”(如姓名、ID 号),支持手动输入标签或从 Excel 名单批量导入标签(按 “标签 - 采集数量” 对应),采集完成后自动按 “标签 - 序号” 命名文件(如 “张三
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值