两列三列布局(附代码&图)

本文介绍了使用HTML和CSS实现两列和三列布局的三种常见方法:浮动布局、相对绝对定位以及Flexbox布局。详细阐述了每种方法的实现步骤,并提供了布局实现后的效果图。

两列布局

        1:浮动:左边的给宽高,右边的不设宽,用margin-left把左边的宽给留出来

        2:相对绝对定位:给父级加position:relative,左边的给宽高并absolute,右边的不设宽,给高度并用margin把left的宽留出来

        3:flex:给父级设flex,left给宽高,right设置flex为1,给高

效果图:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>两列布局</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        /* 浮动:*/
        .left {
            width: 150px;
            height: 100px;
            background: rgb(87, 207, 228);
            float: left;
        }
        .right {
            height: 100px;
            margin-left: 150px;
            background: rgb(58, 109, 169);
        }


        /*相对绝对定位*/
        #box {
            position: relative;
            margin-bottom: 20px;
        }
        .left1 {
            position: absolute;
            width: 150px;
            height: 100px;
            background: rgb(87, 207, 228);
        }
        .right1 {
            height: 100px;
            margin-left: 150px;
            background: rgb(58, 109, 169);
        }


        /* flex*/
        #box2 {
            display: flex;
        }
        .left2 {
            width: 150px;
            height: 100px;
            background: rgb(87, 207, 228);
        }
        .right2 {
            flex: 1;
            height: 100px;
            background: rgb(58, 109, 169);
        }
    </style>
</head>

<body>

    <!-- 浮动 -->
    <div class="left">left</div>
    <div class="right">right</div>

    <br>

    <!-- 相对绝对定位 -->
    <div id="box">
        <div class="left1">left11</div>
        <div class="right1">right11</div>
    </div>

    <!-- flex -->
    <div id="box2">
        <div class="left2">left22</div>
        <div class="right2">right22</div>
    </div>
</body>

</html>

 三列布局

        1.浮动:写div时要把center放在最后面,left和right设置宽高并左右浮动,center给高度,用margin把左右两边的宽留出来就行了

        2.绝对布局:写div时要把center放在最后面,left和right给宽高设置absolute,left的left值为0,right的right值为0。center给高度并用margin把left和right的宽留出来

        3.flex:要给他们的父级盒子设置为flex,宽度为100%,左右部分都给宽高,center设置flex为1,给高

效果图:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>三列布局</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        /* 浮动*/
        .left {
            width: 200px;
            height: 100px;
            background: rgb(253, 157, 191);
            float: left;
        }
        .center {
            height: 100px;
            background: rgb(228, 223, 223);
            margin-left: 200px;
            margin-right: 200px;
        }
        .right {
            width: 200px;
            height: 100px;
            background: rgb(253, 157, 191);
            float: right;
        }

        /* 绝对布局*/
        .second {
            margin-top: 40px;
        }
        .left1 {
            width: 200px;
            height: 100px;
            background: rgb(253, 157, 191);
            position: absolute;
            left: 0;
        }
        .center1 {
            height: 100px;
            background: rgb(228, 223, 223);
            margin-left: 200px;
            margin-right: 200px;
        }
        .right1 {
            width: 200px;
            height: 100px;
            background: rgb(253, 157, 191);
            position: absolute;
            right: 0;
        }

        /* flex*/
        .three {
            width: 100%;
            height: 100px;
            display: flex;
            margin-top: 20px;
        }
        .left2,
        .right2 {
            width: 200px;
            height: 100px;
            background: rgb(253, 157, 191);
        }
        .center2 {
            /* flex属性是flex-grow,flex-shrink,flex-basis的简写,
            默认值为0 1 auto。后两个属性可选。 */
            flex: 1;
            height: 100px;
            background: rgb(228, 223, 223);
        }
    </style>

</head>

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

    <div class="second">
        <div class="left1">left</div>
        <div class="right1">right</div>
        <div class="center1">center</div>
    </div>

    <div class="three">
        <div class="left2">left</div>
        <div class="center2">center</div>
        <div class="right2">right</div>
    </div>

</body>

</html>

&lt;think&gt;好的,用户的问题是想用三列文字制作桑基,但没有数值,该怎么办呢?首先我需要确认桑基的基本要求。桑基通常用于展示流量、能量或数量的流动,所以通常需要节点之间的数值来表示流量大小。用户的情况是没有数值,这可能意味着他们只有类别或阶段的信息,但没有具体的数值数据。 接下来,我需要考虑用户可能的使用场景。也许他们是在做流程分析、数据关系的可视化,或者只是想展示三个类别之间的某种联系。比如,可能是三个阶段的过程,或者三个不同类别的转换。但因为没有数值,直接生成桑基可能会有困难,因为通常工具需要数值来定义流的宽度。 然后,我需要思考可能的解决方案。首先,用户是否真的没有数值,或者是否可以赋予等值或假设的数值。如果用户的数据中没有数值,可能需要手动分配相同的数值,比如所有连接都设为1,这样桑基会显示相同宽度的流,虽然这可能无法反映实际比例,但至少能展示结构。 另外,可能需要检查用户的数据结构。三列文字是否代表源、中间、目标节点?比如,每一行可能是一个流程,如A&rarr;B&rarr;C,这种情况下,用户需要将三列转换为源、目标,并计算每个流程的出现次数作为数值。例如,统计A到B的次数,B到C的次数,然后使用这些计数作为数值。 如果用户的数据中没有重复项,所有流程都是唯一的,那么每个流的数值都是1,这时候生成的桑基可能看起来比较杂乱,但至少能显示结构。或者,用户可能需要调整数据,添加一个计数列,手动或通过统计赋予数值。 此外,可能需要推荐一些工具或方法,比如使用Python的Plotly、matplotlib的sankey模块,或者在线工具如RAWGraphs、SankeyMATIC。这些工具通常需要源、目标、数值的三列数据,所以用户需要将三列文字转换为这种格式,可能需要处理数据,比如将三列拆分为两列(源到中间,中间到目标),并计算每个连接的次数。 另外,用户可能需要了解即使没有真实数值,也可以通过假设数值来创建桑基,虽然这会影响分析的准确性,但作为示意用途可能可以接受。需要提醒用户注意这一点,确保他们明白在没有真实数值的情况下,桑基的功能会受到限制。 最后,总结步骤:1. 确认数据结构,是否需要转换格式;2. 添加假设数值或统计出现次数;3. 使用工具生成表。同时,要举例说明如何处理数据,比如将三列拆分为两列连接,并添加计数,或者赋予统一数值。&lt;/think&gt;以下是没有数值时制作桑基的解决方案,分三步实现: 一、数据预处理 1. 检查数据结构:确认三列文字符合桑基&quot;源&rarr;中继&rarr;目标&quot;三层结构 - 例:原始数据格式 ``` 供应商 &rarr; 物流中心 &rarr; 客户 A公司 华东仓 张三 B工厂 华南仓 李四 ``` 2. 自动生成虚拟流量: - 方法1:统一赋值为1 - 每行添加第四列数值全设为1 - 最终数据格式: ``` 源点, 中继点, 终点, 数值 A公司, 华东仓, 张三, 1 B工厂, 华南仓, 李四, 1 ``` - 方法2:统计频次(更推荐) - 使用Excel的COUNTIFS函数统计相同路径出现次数 - 公式示例:`=COUNTIFS(A:A,A2,B:B,B2,C:C,C2)` 二、工具选择与实现 1. 在线工具方案: - **SankeyMATIC** (https://sankeymatic.com/) 1. 按格式输入数据: ``` A公司 [1] 华东仓 华东仓 [1] 张三 B工厂 [1] 华南仓 华南仓 [1] 李四 ``` 2. 自动生成等宽流程 2. 编程方案(Python示例): ```python import plotly.graph_objects as go # 虚拟数据示例 label = [&quot;A公司&quot;, &quot;B工厂&quot;, &quot;华东仓&quot;, &quot;华南仓&quot;, &quot;张三&quot;, &quot;李四&quot;] source = [0, 1, 2, 3] # 索引对应label target = [2, 3, 4, 5] value = [1, 1, 1, 1] # 统一赋值 fig = go.Figure(go.Sankey( node=dict(label=label), link=dict(source=source, target=target, value=value)) ) fig.show() ``` 三、结果优化建议 1. 可视化调整: - 颜色区分:为不同类别分配对比色 - 添加说明:用注释标明&quot;流量为示意性数值&quot; - 节点排序:在代码中通过node的`x`,`y`参数调整布局 2. 替代方案建议: ```mermaid graph LR A[关系矩阵] --&gt; B[热力] C[纯连接关系] --&gt; D[弦] E[层级结构] --&gt; F[树状] ``` 注意事项: 1. 当使用虚拟数值时,需在表标题注明&quot;示意,数值非真实比例&quot; 2. 实际应用时应尽量补充真实流量数据,可通过: - 业务系统导出历史记录 - 设计问卷收集量级评估 - 使用时间/数量等替代指标 :效果对比示例 | 虚拟数值方案 | 真实数据方案 | |--------------|--------------| | ![示意性等宽流动](https://via.placeholder.com/150x100/CCCCCC/808080?text=Uniform+Flow) | ![比例化流动](https://via.placeholder.com/150x100/4CAF50/FFFFFF?text=Proportional+Flow) |
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值