LayUI中的布局

前言

最近在准备找工作的事项,但是作为一个后台也是需要了解一些前端框架的。就目前的来说有大火的VUE,但是VUE还是存在一定的学习成本,所以决定先从对后台友好的LayUI开始入手先做一些小项目练练手,后面会考虑使用VUE+ElementUI做一个大型一点的SAAS系统。查阅资料后得到如下文章,作为学习记录使用。

页面布局

容器布局

layui的页面布局可以使用布局容器进行布局。布局容器分为固定宽度和完整宽度。大部分时候我们使用的是固定宽度。

  • 固定宽度
    样式:layui-container
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>布局</title>
    <!-- 引入LayUId的核心CSS-->
    <link rel="stylesheet" type="text/css" href="layui/css/layui.css">
</head>
<body>
    <!--
        布局容器
        1,固定宽度,两侧有留白效果
        2,完整宽度,占据屏幕的100%
    -->
    <div class="layui-container" style="background-color: cyan;height: 300px">
        固定宽度
    </div>

</body>
</html>

在这里插入图片描述

  • 完整宽度
    样式:layui-fluid
<div class="layui-fluid" style="background-color: cyan;height: 300px">
        固定宽度
</div>

在这里插入图片描述

栅格布局

为了丰富网页布局,简化 HTML/CSS 代码的耦合,并提升多终端的适配能力,layui 在 2.0 的版本中引进了自己的一套具备响应式能力的栅格系统。我们将容器进行了 12 等分,预设了 4*12 种 CSS 排列类,它们在移动设备、平板、桌面中/大尺寸四种不同的屏幕下发挥着各自的作用。

栅格布局规则:
  • 采用 layui-row 来定义行,如:
<div class="layui-row"></div>
  • 采用类似 layui-col-md* 这样的预设类来定义一组列(column),且放在行(row)内
    其中:
    变量md 代表的是不同屏幕下的标记(可选值见下文)
    变量* 代表的是该列所占用的12等分数(如6/12),可选值为 1 - 12
    如果多个列的“等分数值”总和等于12,则刚好满行排列。如果大于12,多余的列将自动另起一行
  • 列可以同时出现最多四种不同的组合
    分别是:xs(超小屏幕,如手机)、sm(小屏幕,如平板)、md(桌面中等屏幕)、lg(桌面大型屏幕),以呈现更加动态灵活的布局
  • 可对列追加类似 layui-col-space5、 layui-col-md-offset3 这样的预设类来定义列的间距和偏移
  • 最后,在列(column)元素中放入你自己的任意元素填充内容,完成布局!
    如下代码所示:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>栅格系统</title>
    <!-- 引入LayUId的核心CSS-->
    <link rel="stylesheet" type="text/css" href="layui/css/layui.css">
</head>
<body>

    <div class="layui-container">
        <!--定义行-->
        <div class="layui-row">
            <!--定义列-->
            <div class="layui-col-md5" style="background-color:darkviolet;height: 50px">
                内容的5/12
            </div>
            <div class="layui-col-md7" style="background-color:deepskyblue;height: 50px">
                内容的7/12
            </div>
        </div>
        <!--定义行-->
        <div class="layui-row">
            <!--定义列-->
            <div class="layui-col-md4" style="background-color:mediumspringgreen;height: 50px">
                内容的4/12
            </div>
            <div class="layui-col-md4" style="background-color:honeydew;height: 50px">
                内容的4/12
            </div>
        </div>
    </div>
</body>
</html>

在这里插入图片描述

栅格系统的自适用
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>栅格系统</title>
    <!-- 引入LayUId的核心CSS-->
    <link rel="stylesheet" type="text/css" href="layui/css/layui.css">
</head>
<body>

    <div class="layui-container">
        <!--定义行-->
        <div class="layui-row">
            <!--定义列-->
            <div class="layui-col-md5" style="background-color:darkviolet;height: 50px">
                内容的5/12
            </div>
            <div class="layui-col-md7" style="background-color:deepskyblue;height: 50px">
                内容的7/12
            </div>
        </div>
        <!--定义行-->
        <div class="layui-row">
            <!--定义列-->
            <div class="layui-col-md4" style="background-color:mediumspringgreen;height: 50px">
                内容的4/12
            </div>
            <div class="layui-col-md4" style="background-color:honeydew;height: 50px">
                内容的4/12
            </div>
            <div class="layui-col-md6" style="background-color:orangered;height: 50px">
                内容的6/12
            </div>
        </div>

        <hr>
        <h3>平板和桌面端的不同表现</h3>
        <div class="layui-row" >
            <div class="layui-col-sm6 layui-col-md4" style="background-color:dodgerblue;height: 50px">
                平板6/12,桌面端4/12
            </div>
        </div>
        <div class="layui-row" >
            <div class="layui-col-sm12 layui-col-md8" style="background-color:orchid;height: 50px">
                平板12/12,桌面端8/12
            </div>
        </div>
    </div>
</body>
</html>

桌面端效果
在这里插入图片描述
模拟平板/手机端效果
在这里插入图片描述

响应式规则

栅格的响应式能力,得益于CSS3媒体查询(Media Queries)的强力支持,从而针对四类不同尺寸的屏幕,进行相应的适配处理
在这里插入图片描述

响应式的公共类

在这里插入图片描述

列间距

通过“列间距”的预设类,来设定列之间的间距。且一行中最左的列不会出现左边距,最右的列不会出现右边距。列间距在保证排版美观的同时,还可以进一步保证分列的宽度精细程度。我们结合网页常用的边距,预设了 12 种不同尺寸的边距,分别是:

  • layui-col-space1
  • layui-col-space2
  • layui-col-space4
  • layui-col-space5
  • layui-col-space6
  • layui-col-space8
  • layui-col-space10
  • layui-col-space12
  • layui-col-space14
  • layui-col-space15
  • layui-col-space16
  • layui-col-space18
  • layui-col-space20
  • layui-col-space22
  • layui-col-space24
  • layui-col-space25
  • layui-col-space26
  • layui-col-space28
  • layui-col-space30
    支持列之间为 1px-30px 区间的所有双数间隔,以及 1px、5px、15px、25px 的单数间隔

下面是一个简单的例子,列间距为10px:

        <h3>列边距</h3>
        <div class="layui-row layui-col-space10" >
            <div class="layui-col-md4" style="height: 50px">
                <div style="background-color:darkviolet;height: 50px">4</div>
            </div>
            <div class="layui-col-md4" style="height: 50px">
                <div style="background-color:darkcyan;height: 50px">4</div>
            </div>
            <div class="layui-col-md4" style="height: 50px">
                <div style="background-color:#00F7DE;height: 50px">4</div>
            </div>
        </div>

在这里插入图片描述
如果需要的间距高于30px(一般不常见),请采用偏移。

列偏移

对列追加 类似 layui-col-md-offset* 的预设类,从而让列向右偏移。其中 * 号代表的是偏移占据的列数,可选中为 1 - 12。
如:layui-col-md-offset3,即代表在“中型桌面屏幕”下,让该列向右偏移 3 个列宽度。
下面是一个采用「列偏移」机制让两个列左右对齐的实例

        <h3>列偏移</h3>
        <div class="layui-row">
            <div class="layui-col-md4" style="background-color:green;height: 50px">
                4/12
            </div>
            <div class="layui-col-md4 layui-col-md-offset4"style="background-color:green;height: 50px">
                偏移4列,从而在最右
            </div>
        </div>

在这里插入图片描述
请注意,列偏移可针对不同屏幕的标准进行设定,比如上述的例子,只会在桌面屏幕下有效,当低于桌面屏幕的规定的临界值,就会堆叠排列。

栅格嵌套

理论上,你可以对栅格进行无穷层次的嵌套,这更加增强了栅格的表现能力。而嵌套的使用非常简单。在列元素(layui-col-md*)中插入一个行元素(layui-row),即可完成嵌套。下面是一个简单的例子:

        <h3>栅格嵌套</h3>
        <div class="layui-row layui-col-space5">
            <div class="layui-col-md5" style="background-color:deepskyblue;height: 110px">
                <div class="layui-row grid-demo">
                    <div class="layui-col-md3" style="background-color:deeppink;height: 50px">
                        内部列
                    </div>
                    <div class="layui-col-md9" style="background-color:mediumblue;height: 50px">
                        内部列
                    </div>
                    <div class="layui-col-md12" style="background-color:orchid;height: 50px">
                        内部列
                    </div>
                </div>
            </div>
            <div class="layui-col-md7" style="background-color:deepskyblue;height: 110px">
                <div class="layui-row grid-demo grid-demo-bg1">
                    <div class="layui-col-md12" style="background-color:mediumspringgreen;height: 50px">
                        内部列
                    </div>
                    <div class="layui-col-md9" style="background-color:deeppink;height: 50px">
                        内部列
                    </div>
                    <div class="layui-col-md3" style="background-color:mediumblue;height: 50px">
                        内部列
                    </div>
                </div>
            </div>
        </div>

在这里插入图片描述

让IE8/9兼容栅格

事实上IE8和IE9并不支持媒体查询(Media Queries),但你可以使用下面的补丁完美兼容!该补丁来自于开源社区:

<!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
<!--[if lt IE 9]>
  <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
  <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->

将上述代码放入你页面 标签内的任意位置

  • 管理系统界面布局
    layui 之所以赢得如此多人的青睐,更多是在于它「前后界面兼备」的能力。既可编织出绚丽的前台页面,又可满足繁杂的管理系统界面需求。layui 致力于让每一位开发者都能轻松搭建自己的管理界面。
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <title>layout 管理系统大布局 - Layui</title>
    <link rel="stylesheet" href="./layui/css/layui.css">
</head>
<body>
<div class="layui-layout layui-layout-admin">
    <div class="layui-header">
        <div class="layui-logo layui-hide-xs layui-bg-black">layout demo</div>
        <!-- 头部区域(可配合layui 已有的水平导航) -->
        <ul class="layui-nav layui-layout-left">
            <!-- 移动端显示 -->
            <li class="layui-nav-item layui-show-xs-inline-block layui-hide-sm" lay-header-event="menuLeft">
                <i class="layui-icon layui-icon-spread-left"></i>
            </li>

            <li class="layui-nav-item layui-hide-xs"><a href="">nav 1</a></li>
            <li class="layui-nav-item layui-hide-xs"><a href="">nav 2</a></li>
            <li class="layui-nav-item layui-hide-xs"><a href="">nav 3</a></li>
            <li class="layui-nav-item">
                <a href="javascript:;">nav groups</a>
                <dl class="layui-nav-child">
                    <dd><a href="">menu 11</a></dd>
                    <dd><a href="">menu 22</a></dd>
                    <dd><a href="">menu 33</a></dd>
                </dl>
            </li>
        </ul>
        <ul class="layui-nav layui-layout-right">
            <li class="layui-nav-item layui-hide layui-show-md-inline-block">
                <a href="javascript:;">
                    <img src="//tva1.sinaimg.cn/crop.0.0.118.118.180/5db11ff4gw1e77d3nqrv8j203b03cweg.jpg" class="layui-nav-img">
                    tester
                </a>
                <dl class="layui-nav-child">
                    <dd><a href="">Your Profile</a></dd>
                    <dd><a href="">Settings</a></dd>
                    <dd><a href="">Sign out</a></dd>
                </dl>
            </li>
            <li class="layui-nav-item" lay-header-event="menuRight" lay-unselect>
                <a href="javascript:;">
                    <i class="layui-icon layui-icon-more-vertical"></i>
                </a>
            </li>
        </ul>
    </div>

    <div class="layui-side layui-bg-black">
        <div class="layui-side-scroll">
            <!-- 左侧导航区域(可配合layui已有的垂直导航) -->
            <ul class="layui-nav layui-nav-tree" lay-filter="test">
                <li class="layui-nav-item layui-nav-itemed">
                    <a class="" href="javascript:;">menu group 1</a>
                    <dl class="layui-nav-child">
                        <dd><a href="javascript:;">menu 1</a></dd>
                        <dd><a href="javascript:;">menu 2</a></dd>
                        <dd><a href="javascript:;">menu 3</a></dd>
                        <dd><a href="">the links</a></dd>
                    </dl>
                </li>
                <li class="layui-nav-item">
                    <a href="javascript:;">menu group 2</a>
                    <dl class="layui-nav-child">
                        <dd><a href="javascript:;">list 1</a></dd>
                        <dd><a href="javascript:;">list 2</a></dd>
                        <dd><a href="">超链接</a></dd>
                    </dl>
                </li>
                <li class="layui-nav-item"><a href="javascript:;">click menu item</a></li>
                <li class="layui-nav-item"><a href="">the links</a></li>
            </ul>
        </div>
    </div>

    <div class="layui-body">
        <!-- 内容主体区域 -->
        <div style="padding: 15px;">内容主体区域。记得修改 layui.css 和 js 的路径</div>
    </div>

    <div class="layui-footer">
        <!-- 底部固定区域 -->
        底部固定区域
    </div>
</div>
<script src="./layui/layui.js"></script>
<script>
    //JS
    layui.use(['element', 'layer', 'util'], function(){
        var element = layui.element
            ,layer = layui.layer
            ,util = layui.util
            ,$ = layui.$;

        //头部事件
        util.event('lay-header-event', {
            //左侧菜单事件
            menuLeft: function(othis){
                layer.msg('展开左侧菜单的操作', {icon: 0});
            }
            ,menuRight: function(){
                layer.open({
                    type: 1
                    ,content: '<div style="padding: 15px;">处理右侧面板的操作</div>'
                    ,area: ['260px', '100%']
                    ,offset: 'rt' //右上角
                    ,anim: 5
                    ,shadeClose: true
                });
            }
        });

    });
</script>
</body>
</html>

在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值