常用布局【类】整理

作者: js_hcl | 来源:发表于2019-04-02 00:26 被阅读21次

    相关文章

    css可以分为三类

    • base.css
    • common.css 本文可以作为common.css来使用
    • page.css

    一、Grid布局(二维布局)(网格布局)

    /* grid布局 */
    .grid{
        display: grid;
    }
    /* grid容器模板设置 */
    .grid-template-xx{
        grid-template-rows: repeat(12,1fr);
        grid-template-columns: 100px;
        grid-template-areas: 'a a a a';
        /* 剩余网格的宽高会根据内容来决定,类似flex */
        grid-auto-rows: auto;/*设置剩余网格的高*/
        grid-auto-columns: auto;/*设置剩余网格的宽*/
    }
    /* 网格间距 */
    .grid-gap-20{
        gap: 20px 20px;
    }
    .grid-gap-40{
        gap: 40px 40px;
    }
    /* 排版方向 */
    /* 指定排版方向,后面项目默认是跟随其后 */
    /* 如果在当前行没有可用位置,网格会自动搜索下一行,这样会造成一定的差距,浪费可用空间 */
    .grid-direction-row{
        grid-auto-flow: row;
    }
    .grid-direction-column{
        grid-auto-flow: column;
    }
    /* 某些项目指定位置以后,剩下的项目怎么自动放置 */
    /* 以下两个属性,是对于部分项目指定位置,导致后面跟随其后留空格问题,的解决方案 */
    /* dense 英 [dens] 稠密的,意为去除空位置 */
    .grid-direction-row-dense{
        grid-auto-flow: row dense;
    }
    .grid-direction-column-dense{
        grid-auto-flow: column dense;
    }
    
    /* 容器内容排版,带c代表content*/ 
    /* 容器内容水平排版 */
    /* start | end | center | stretch | space-around | space-between | space-evenly */
    .grid-justifyc-between{
        justify-content: space-between;
    }
    .grid-justifyc-center{
        justify-content: center;
    }
    /* 容器内容垂直排版,仅对多行时生效*/
    .grid-alignc-start{
        align-content:start;
    }
    .grid-alignc-between{
        align-content: space-between;
    }
    .grid-alignc-center{
        align-content: center;
    }
    /* 项目s内容排版,带s代表项目s */
    /* start | end | center | stretch */
    .grid-justifys-center{
        justify-items: center;
    }
    .grid-aligns-center{
        align-items: center;
    }
    
    /* grid项目常用类 */
    /* 行 跨越几个网格,较少用*/
    .grid-row-span2{
        grid-row: span 2;
    }
    .grid-row-span4{
        grid-row: span 4;
    }
    .grid-row-span6{
        grid-row: span 6;
    }
    .grid-row-span8{
        grid-row: span 8;
    }
    .grid-row-span10{
        grid-row: span 10;
    }
    /* 列跨越几个网格 */
    .grid-column-span2{
        grid-column: span 2;
    }
    .grid-column-span4{
        grid-column: span 4;
    }
    .grid-column-span6{
        grid-column: span 6;
    }
    .grid-column-span8{
        grid-column: span 8;
    }
    .grid-column-span10{
        grid-column: span 10;
    }
    
    /* 项目自身对齐方式 */
    /* start | end | center | stretch */
    /* 项目内容水平方向 */
    .grid-justify-self-start{
        justify-self: start;
    }
    .grid-justify-self-center{
        justify-self: center;
    }
    .grid-justify-self-end{
        justify-self: end;
    }
    /* 项目内容垂直方向 */
    .grid-align-self-start{
        align-self: start
    }
    .grid-align-self-center{
        align-self: center;
    }
    .grid-align-self-end{
        align-self: end;
    }
    

    二、Flex布局(一维布局)(弹性布局)

    /* flex容器常用类 */
    .flex{
        display: -webkit-flex; /* Safari */
        display: flex;
    }
    
    /* 排版方向 */
    .flex-direction-row{
        flex-direction: row;
    }
    .flex-direction-row-reverse{
        flex-direction: row-reverse;
    }
    .flex-direction-column{
        flex-direction: column;
    
    }
    .flex-direction-column-reverse{
        flex-direction: column-reverse;
    }
    
    /* 容器内容排版,带c代表content*/ 
    /* 容器内容水平排版 */
    .flex-justifyc-between{
        justify-content: space-between;
    }
    .flex-justifyc-center{
        justify-content: center;
    }
    /* 容器内容垂直排版,仅对多行时生效*/
    .flex-alignc-start{
        align-content: flex-start;
    }
    .flex-alignc-between{
        align-content: space-between;
    }
    .flex-alignc-center{
        align-content: center;
    }
    /* 换行 */
    .flex-wrap{
        flex-wrap: wrap;
        align-content: flex-start;/* 默认是stretch则每行底下平分剩余高度空间*/
    }
    
    /* 项目s内容排版,带s代表项目s */
    .flex-aligns-center{
        align-items: center;
    }
    
    /* flex项目常用类 */
    /* 平均放大,平均缩小 */
    .flex-auto,.flex1{
        flex:auto;/*1 1 auto*/
    }
    /* 不放大不缩小,超出会溢出*/
    .flex-none,.flex0{
        flex:none;/*0 0 auto*/
    }
    /* 默认,不放大,平均缩小*/
    .flex-default{
         /*放大比例*/
         flex-grow: 0;
        /*缩小比例*/
        flex-shrink: 1;
        /* 主轴空间 */
        flex-basis: auto;
    }
    .flex-2{
        flex:2;/*放大比例系数为2,后面缺省为1 auto*/
    }
    /*多交叉轴自身对齐方式*/
    /* flex-start | flex-end | center | baseline | stretch */
    .flex-align-self-auto{
        align-self: auto;/*默认*/
    }
    .flex-align-self-start{
        align-self: flex-start;
    }
    .flex-align-self-center{
        align-self: center;
    }
    .flex-align-self-end{
        align-self: flex-end;
    }
    
    
    /* 一行多列水平垂直居中,默认水平排版,可由flex-direction来确定排版方向*/
    /* 相当于针对该行,项目内容居中 */
    .flex-all-center{
        justify-content: center;
        align-items: center;
    }
    
    /* 多行多列水平居中,默认水平排版,可由flex-direction来确定排版方向 */
    /* 相当于针对flex容器,容器的居中 */
    .flex-alls-center{
        justify-content: center;
        align-content: center;
    }
    

    1.常见应用

    1.1 多栏铺满布局:flex:auto

    传统要实现这个,借助calc方法也能实现,但要手动计算,费劲
    但对应弹性缩放则无能为力,Flex完胜

    任何复杂的布局,可以拆分出垂直多栏或水平多栏
    1.垂直多栏,弹性铺满
    <div class="divBox flex flex-direction-column">
        <div class="divItem" ></div>
        <div class="divItem flex1" ></div>
        <div class="divItem" ></div>
    </div>
    
    2.水平多栏,弹性铺满
    <div class="divBox flex">
        <div class="divItem flex1" ></div>
        <div class="divItem" ></div>
        <div class="divItem" ></div>
    </div>
    
    3.水平多栏,多栏弹性铺满
    <div class="divBox flex">
        <div class="divItem flex1" ></div>
        <div class="divItem flex2" ></div>
        <div class="divItem" ></div>
    </div>
    

    1.2 该行联动布局:justify-content属性及align-items属性及flex-direction-row

    1. 左右 或 左左右 布局,联动该行垂直居中 (非常常用)
    <div class="divBox flex flex-justifyc-between flex-aligns-center">
        <!-- 左边 ,较多为image-->
        <div class="divItem flex0" ></div>
        <!-- 右边,右边也是flex布局-->
        <div class="divItem flex1 flex flex-justifyc-between flex-aligns-center" >
            <div class="divItem flex1"></div>
            <div class="divItem"></div>
        </div>
    </div>
    
    2.水平居中布局
    等同于margin:0 auto
    但传统布局需要items设置为inline-block,且外面包裹div设置style="margin:0 auto"。
    Flex布局对于排版方向有多个项目,自动转为inline-block,Flex完胜
    <div class="divBox flex flex-justifyc-center">
        <div class="divItem"></div>
    </div>
    
    3.全居中(Flex终于解决了垂直居中顽疾)
    用在容器中,在容器中全居中,场景:弹窗
    用在项目中,项目内容全居中,场景:高度固定的文字等居中展示(棒棒哒)
    <div class="divBox flex flex-all-center" style="height:40px">
       example
    </div>
    
    4.放不下放下一行
    <div class="divBox flex flex-wrap">
        <div class="divItem"></div>
        <div class="divItem"></div>
        <div class="divItem"></div>
    </div>
    
    5.一行放n个
    <div class="divBox flex">
        <div class="divItem right-margin-20"></div>
        <div class="divItem right-margin-20"></div>
        <div class="divItem right-margin-20"></div>
        <div class="divItem right-margin-20"></div>
        <div class="divItem"></div>
    </div>
    //对应css
    div{
        border: 1px solid greenyellow;
        box-sizing: border-box;
    }
    .divBox{
        width: 100%;
        height: 100%;
    }
    .divItem{
        width: calc(20% - 16px);/*重点*/
        height: 100px;
    }
    .right-margin-20{
        margin-right: 20px
    }
    6.多行排版,每行放n个
    <div class="divBox flex flex-wrap">
        <div class="divItem rb-margin-20"></div>
        <div class="divItem rb-margin-20"></div>
        <div class="divItem rb-margin-20"></div>
        <div class="divItem rb-margin-20"></div>
        <div class="divItem"></div>
        <div class="divItem rb-margin-20"></div>
        <div class="divItem"></div>
    </div>
    //对应css
    .rb-margin-20{
        margin: 0 20px 20px 0;
    }
    

    1.3 半独立流:order及flex-direction

    对于会变动顺序的,非常棒!
    对于简单的,flex-direction即可;
    对于复杂的,设置order值
    

    1.4 案例

    <div class="divBox flex flex-wrap">
        <div class="divItem rb-margin-20 flex flex-all-center">1</div>
        <div class="divItem rb-margin-20 flex flex-all-center">2</div>
        <div class="divItem rb-margin-20 flex flex-all-center">3</div>
        <div class="divItem rb-margin-20 flex flex-all-center">4</div>
        <div class="divItem flex flex-all-center">5</div>
        <div class="divItem rb-margin-20 flex flex-all-center">6</div>
        <div class="divItem flex flex-all-center">7</div>
    </div>
    
    图示

    三、其它常用类

    /*其它布局*/
    .fl{float: left;} /* float */
    .fr{float: right;}  
    .clear{height:0;clear:both;font-size:0}
    .clearfix{*zoom:1}
    .clearfix:after,.clearfix:before{display:table;content:" "}
    .clearfix:after{clear:both}
    
    .rel{position:relative;}/* 定位 */
    .abs{position:absolute;}
    .fixed{position: fixed;}
    /* 列表 */
    
    
    /*框类型*/
    .dn{display:none;}
    .db{display:block;}
    .di{display:inline;}
    .dib{-moz-inline-stack:inline-block; display:inline-block;}
    .hidden{visibility:hidden;}
    
    
    /* 内外边距,盒子模型*/
    /* 单位根据应用场景来换 */
    .mtb-20{margin-top:20px;margin-bottom: 20px;}/* 外边框 *//* 上下 */
    .mtb-40{margin-top:40px;margin-bottom: 40px;}
    .mt-20{margin-top:20px;}
    .mt-40{margin-top:40px;}
    .mb-20{margin-bottom: 20px;}
    .mb-40{margin-bottom: 40px;}
    .mlr-auto{margin-left: auto;margin-right: auto;}/*左右*/
    .mlr-20{margin-left: 20px;margin-right: 20px;}
    .mlr-20{margin-left: 20px;margin-right: 20px;}
    .ml-20{margin-left: 20px;}
    .ml-40{margin-left: 40px;}
    .mr-20{margin-right: 20px;}
    .mr-40{margin-right: 40px;}
    .m-auto{margin: auto;}/*可用于绝对定位元素的水平垂直居中*//* 上下左右 */
    .m-20{margin: 20px;}
    .m-40{margin: 40px;}
    .ml--20{ margin-left: -20px;}/* margin负数情况 */
    
    .ptb-20{padding-top:20px;padding-bottom: 20px;}/* 内边框 *//* 上下 */
    .ptb-40{padding-top:40px;padding-bottom: 40px;}
    .pt-20{padding-top:20px;}
    .pt-40{padding-top:40px;}
    .pb-20{padding-bottom: 20px;}
    .pb-40{padding-bottom: 40px;}
    .plr-20{padding-left: 20px;padding-right: 20px;}/*左右*/
    .plr-20{padding-left: 20px;padding-right: 20px;}
    .pl-20{padding-left: 20px;}
    .pl-40{padding-left: 40px;}
    .pr-20{padding-right: 20px;}
    .pr-40{padding-right: 40px;}
    .p-20{padding: 20px;}/* 上下左右 */
    .p-40{padding: 40px;}
    
    /* 盒子模型 */
    /* content-box,border-box */
    /* w3c width指的是内容盒子的宽度,IE指的是到border的宽度 */
    .border-box{box-sizing:border-box;-moz-box-sizing:border-box; /* Firefox */-webkit-box-sizing:border-box; /* Safari */}
    .content-box{box-sizing:content-box;-moz-box-sizing:content-box; /* Firefox */-webkit-box-sizing:content-box; /* Safari */}
    
    .br-4{border-radius: 4px;}/* 圆角 */
    .br-6{border-radius: 6px;}
    .br-8{border-radius: 8px;}
    .br-10{border-radius: 10px;}
    .br-20{border-radius: 20px;}
    .br-25{border-radius: 25px;}
    .br-50{border-radius: 50%;}/* 针对宽高一样的,形成圆 */
    /* 宽高不一样的,需要左右是半圆的,还木有想到办法写成通用类,只能手写 */
    
    
    .bt-line{border-top: 1px solid grey;}/* 边框,颜色根据需求写成模板 */
    .bb-line{border-bottom: 1px solid grey;}
    
    /* 三角形,根据需求来设置模板,*/
    /*类名称:b:border,11代表宽高1:1,-l:代表要left的,-active代表激活的 */
    .b11-l{/*css做出的三角形*/
        --borderWidth:20px;
        --borderHeight:calc(var(--borderWidth) * 1);
        width: 0px;
        height:0px;
        border-top: var(--borderHeight) solid transparent;
        border-right:var(--borderWidth) solid transparent;
        border-left: var(--borderWidth) solid #ffff00;
        border-bottom: var(--borderHeight) solid transparent;
    }
    .b12-t-active{/*css做出的三角形*/
        --borderWidth:20px;
        --borderHeight:calc(var(--borderWidth) * 2);
        width: 0px;
        height:0px;
        border-top: var(--borderHeight) solid  red;
        border-right:var(--borderWidth) solid transparent;
        border-left: var(--borderWidth) solid transparent;
        border-bottom: var(--borderHeight) solid transparent;
    }
    
    .bs-1{box-shadow: 0 0 5px 1px grey;}/* 阴影 */
    
    
    /*对齐*/
    .tc{text-align:center;}/* 水平对齐方式 */
    .tr{text-align:right;}
    .tl{text-align:left;}
    
    .vm{vertical-align:middle;}/* 行内元素在行内的垂直对齐方式 */
    .vtb{vertical-align:text-bottom;}
    .vt{vertical-align:top;}
    
    /* 字体<大小,风格,粗细>*/
    .fs-0{font-size:0;}/*处理,换行时占用宽高问题;其它解决途径:上个标签闭合和该文本在一行即可*/
    .fs-10{font-size: 10px;}
    .fs-12{font-size: 12px;}
    .fs-14{font-size: 14px;}
    .fs-16{font-size: 16px;}
    .fs-18{font-size: 18px;}
    .fs-20{font-size: 20px;}
    
    .fi{font-style: italic;/*斜体*/}
    .fo{font-style: oblique;/*倾斜*/}
    .fn{font-style: normal;font-weight: normal}
    
    .fb{font-weight: bold;}
    
    
    /* 颜色 <主题色(背景色),文本颜色,衬托色(边框/阴影)>*/
    /* 能设置为类的,只有color及background颜色,其它要有颜色,可以借鉴这边颜色,保持颜色一致 */
    /*背景色(看主题色)*/
    /* 具体值根据自己风格设置 */
    /* 深颜色使用c、f、6、9这四个字符,组合生成 RGB 色值 */
    /* 淡颜色使用a、b、c、d、e、f这六个字符,组合生成 RGB 色值 */
    .theme-color-page{background-color:#eee;}
    .theme-color-button{background-color:#ffcc66;}
    
    .color-2{color:#222;}/*文本颜色,2->9为显眼到不显眼*/
    .color-3{color:#333;}
    .color-6{color:#666;}
    .color-9{color:#999;}
    .color-f{color:#fff;}/*白色*/
    
    .color-a{border-color: #aaa;}/* 衬托色 ,建议从aaa、bbb、ccc、ddd这四个色值挑选:阴影的也根据这个来写即可*/
    .color-b{border-color: #bbb;}
    .color-c{border-color: #ccc;}
    .color-d{border-color: #ddd;}
    
    /* 其它 */
    /* 遮罩 */
    .mask{z-index:999;position:fixed;position:absolute;
    top:0;left:0;width:100%;height:100%;background:#000;filter:alpha(opacity=50);opacity:.5}
    
    /* 骨架屏开始,建议每个页面写不一样的 */
    .skeleton {
        background-repeat: no-repeat;
        background-image:/*这里写骨架屏的所有元素(第一个是动画),绘制背景。底下属性,对应其大小和位置*/
            linear-gradient(to right,transparent 0%, grey 50%,transparent 100%), /* 第4层 动画 */
            radial-gradient(circle closest-side at center, white 100%, transparent), /* 第3层 头像 */
            linear-gradient(to right, white , white 100%), /* 第2层 标题 */
            linear-gradient(to right, white , white 100%), /* 第1层 标题 */
            linear-gradient(to bottom,gray 0%,gray 100%); /* 第0层 卡片背景 */
        background-size:
            20px 100%,  /* 动画 */
            32px 32px,  /* 头像 */
            200px 25px,  /* 标题 */
            250px 25px,  /* 标题 */
            100% 100%; /* 卡片背景 */
        background-position:
            -20px 0,  /* 动画 */
            24px 24px,  /* 头像 */
            24px 70px, /* 标题 */
            24px 100px, /* 标题 */
            0 0;        /* 卡片背景 */
            -webkit-animation: skeletonLoading 5s infinite;
            animation: skeletonLoading 2s infinite;
    }
    @-webkit-keyframes skeletonLoading {
        0% {
            background-position: 24px 0,24px 24px,24px 70px,24px 100px, 0 0;
            background-size: 20px 100%,32px 32px,0 25px,0 25px,100% 100%; 
        }
        100% {
            /*其实有两种动画,自己选择需要的一种。*/
            /* 分别是以上元素的position */
            background-position: 260px 0,24px 24px,24px 70px,24px 100px, 0 0;
            background-size: 20px 100%,32px 32px,200px 25px,250px 25px,100% 100%; 
        }
    }
    @keyframes skeletonLoading {
        0% {
            background-position: 24px 0,24px 24px,24px 70px,24px 100px, 0 0;
            background-size: 20px 100%,32px 32px,0 25px,0 25px,100% 100%; 
        }
        100% {
            /* 分别是以上元素的position */
            background-position: 260px 0,24px 24px,24px 70px,24px 100px, 0 0;
            background-size: 20px 100%,32px 32px,200px 25px,250px 25px,100% 100%; 
        }
    }
    /* 骨架屏结束 */
    
    /* 超出省略号... */
    .dots{
        display:-webkit-box;
        -webkit-line-clamp:3;/* 多行改这个数字即可*/
        overflow:hidden;/*要设置容器高度,为:line-height*-webkit-line-clamp*/
        /* 否则,虽然会出现...。但如果高度较高,底下还是会展示 */
        /*如果要文字外层使用padding,则在祖父容器设置padding,父容器设置dots*/
        text-overflow:ellipsis;
        -webkit-box-orient:vertical;
        word-break:break-all;
    }
    
    /* 动画 */
    @-webkit-keyframes fadeIn{
        0%{opacity:0}
        to{opacity:1}
    }
    @keyframes fadeIn{
        0%{opacity:0}
        to{opacity:1}
    }
    

    相关文章

      网友评论

        本文标题:常用布局【类】整理

        本文链接:https://www.haomeiwen.com/subject/feuibqtx.html