让前端飞Web前端之路视觉艺术

前端基础——页面架构

2020-04-02  本文已影响0人  隽小吚

1. CSS Reset

为什么需要CSS Reset

浏览器对于各个HTML都赋予了默认的样式,并且不同的浏览器默认的样式不同,而通常我们的产品设计中样式都是不同于浏览器默认样式的,所以我们在开发中经常要去覆盖默认的样式,针对不同的浏览器需要写不同的覆盖代码确保兼容性。


image.png

如果一开始我们就清除掉浏览器默认的样式,后面的开发就可以完全根据设计进行而不需要考虑浏览器默认样式的影响,从而提高开发效率。

怎么做CSS Reset

浏览器默认的样式定义在标签上,所以CSS Reset里面也使用标签选择器来覆盖默认样式。
示例:

html,body,h1,h2,h3,h4,h5,h6,div,dl,dt,dd,ul,ol,li,p,blockquote,pre,hr,figure,table,caption,th,td,form,fieldset,legend,input,button,textarea,menu{margin:0;padding:0;}
header,footer,section,article,asidejnav,hgroup,address,figure,figcaption,menu,details{display:block;}
table{border-collapse:collapse;border-spacing:0;}
caption,th{text-align: left;font-weight: normal;}
html,body,fieldset,img,iframe,abbr{border:0;}
i,cite,em,var,address,dfn{font-style:normal;}
[hidefocus],summary{outline:0;} 
li{list-style:none;}
h1,h2,h3,h4,h5,h6,small{font-size:100%;}
sup,sub{font-size:83%;}
pre,code,kbd,Samp{font-family:inherit;}
q:before,q:after{content: none;}
textarea{overflow:auto;resize:none;}
label,summary{cursor: default;}
a,button{cursor:pointer;}
h1,h2,h3,h4,h5,h6,em,strong,b{font-weight: normal;} 
del, ins,u,s,a,a:hover{text-decoration:none;}
body,textarea,input,button,select,keygen,legend{font:12px/l.14 arial,simsun;color:#333;outline:0;} 
body{background: #fff;}
a,a:hover{color:#333;}
Tips
  1. 代码优化:示例中将同一个标签的样式分布为几处,这样可以节省代码
  2. css reset并不是统一一成不变的,在实际项目中,可以根据设计中的大部分相同样式可以在reset中定义好,作为全局样式定义,减少后续的样式重写
  3. css reset最好在项目初期就制定好,后期再来修改会带来大的UI风险,因为reset里面是一个全局样式
  4. reset css应该放在最前面引用

2. 页面布局解决方案

示例html代码

<div class="parent">
    <div class="child">Hello Word</div>
</div>

自适应宽度水平居中

  1. inline-block + text-align方案
    css代码:
.parent{
        text-align: center;
    }
    .child{
        display: inline-block;
    }
  1. table + margin方案
    CSS代码:
.child{
    display: table;
    margin: 0 auto;
}
  1. absolute + transform方案
    CSS代码:
.parent{
    position: relative;
}
.child{
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
}
  1. flex + justify-content方案
    CSS代码:
.parent{
    display: flex;
    justify-content: center;
}
.parent{
    display: flex;
}
.child{
margin: 0 auto;
}

只设置父元素(代码片段1)或者同时设置子元素的margin(代码片段2),都可以达到效果

自适应高度垂直居中

  1. table-cell + vertical-align方案
    CSS代码:
.parent{
    display: table-cell;
    vertical-align: middle;
}
  1. absolute+transform方案
    CSS代码:
.parent{
    position: relative;
}
.child{
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
}
  1. flex + align-items方案
    CSS代码:
.parent{
    display: flex;
    align-items: center;
}

水平垂直都居中

  1. inline-block + text-align + table-cell + vertical-align
    CSS代码:
.parent{
    text-align: center;
    display: table-cell;
    vertical-align: middle;
}
.child{
    display: inline-block;
}
  1. absolute + transform
    CSS代码:
.parent{
    position: relative;
}
.child{
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%,-50%);
}
  1. flex + justify-content + align-items
    CSS代码:
.parent{
    display: flex;
    justify-content: center;
    align-items: center;
}

多列布局

示例html:

<div class="parent">
    <div class="left">
        <p>Left</p>
    </div>
    <div class="right">
        <p>right</p>
        <p>right</p>
    </div>
</div>
定宽+自适应
  1. float + margin
    CSS代码:
.left{
    float: left;
    width: 100px;
}
.right{
    margin-left: 120px;
}
  1. float + overflow
    CSS代码:
.left{
        float: left;
        width: 100px;
        margin-right: 20px;
    }
    .right{
        overflow: hidden;
    }
  1. table
    CSS代码:
.parent{
    display: table; 
    width: 100%; // 如果不设置,宽度默认根据内容自适应
    table-layout: fixed; // 设置布局优先,否则宽度会受内容影响,即使设置了宽度
}
.left,.right{
    display: table-cell;
}
.left{
    width: 100px; // 默认单元格是根据内容比例分配的
    padding-right: 20px; // margin对单元格不起作用
}
  1. flex
    CSS代码:
.parent{
        display: flex; // 子元素默认宽度自适应
    }
    .left{
        width: 100px; // 设置定宽,不参与缩放分配
        margin-right: 20px;
    }
    .right{
        flex: 1; // left不参与分配,剩余空间都分配给right
    }
不定宽 + 自适应
  1. float + overflow
    CSS代码:
.left{
        float: left;
        margin-right: 20px;
    }
    .right{
        overflow: hidden;
    }
  1. table
    CSS代码:
.parent{
    display: table; 
    width: 100%; 
}
.left,.right{
    display: table-cell;
}
.left{
    width: 0.1%; // 默认单元格会根据内容宽度按比例分配,设置一个很小的宽度使得单元格宽度刚刚包裹内容,没有设置table布局优先,所以虽然宽度很小,但是会被内容撑开
    padding-right: 20px;
}
  1. flex
    CSS代码:
.parent{
    display: flex;
}
.left{
    margin-right: 20px;
}
.right{
    flex: 1;
}
等分布局

示例HTML:

<div class="parent">
    <div class="column">
        <p>1</p>
    </div>
    <div class="column">
        <p>2</p>
    </div>
    <div class="column">
        <p>3</p>
    </div>
    <div class="column">
        <p>4</p>
    </div>
</div>
  1. float
    CSS:
.parent{
    margin-left: -20px;
}
.column{
    float: left;
    width: 25%;
    padding-left: 20px;
    box-sizing: border-box; 
}
  1. table方式
    CSS:
.parent-fix{
    margin-left: -20px;
}
.parent{
    display: table;
    width:100%;
    table-layout: fixed;
}
.column{
    display: table-cell;
    padding-left: 20px;
}
  1. flex
    CSS:
.parent{
    display: flex;
}
.column{
    flex: 1;
}
//选择前面还有一个column的元素
.column+.column{
    margin-left:20px;
}
等高布局
  1. table方式,代码同以上多列布局,table单元格默认都是等高的
    增加以下css形成左右间距:
.left
{
border-right: 20px solid transparent;
background-clip:padding-box;
}
  1. flex方式,代码同以上多列布局,默认等到,align-items默认strech
  2. float方式,伪等高
    CSS:
.left{
        float: left;
        width: 100px;
        margin-right: 20px;
    }
    .right{
        overflow: hidden;
    }
    .left, .right{
padding-bottom: 9999px;
margin-bottom:-9999px;
}
.parent{
overflow: hidden;
}

3. 模块化 & 组件化

模块化

什么是模块化?
如何实现模块化?

组件化

什么是组件?
如何实现组件化
<span class="button button-1">按钮</span>
<span class="button button-1 disabled">按钮</span>
.button{}
.button:hover{}
.button.disabled{}
.button-1{}

模块,组件以及其扩展应该写在一起,方便后期维护

为什么使用模块化和组件化

  1. 方便多人协同
  2. 可以扩展,重用
  3. 可读性好,可维护性好

规范

模块化和组件化在团队中实施时,必须要靠规范来落地

文件规范

规范文件位置结构,可分为通用类,业务类
-- 通用类可以放置全局base文件(如reset.css)和第三个框架css文件
-- 业务类根据自己产品的业务来区分

命名规范
  1. 分类,比如区分开模块(.m-xxx)和组件(.u-xxx)
  2. 扩展,在模块和组件类名加后缀(.m-xx-x),按照自己团队的需求和习惯制定自己的规范
  3. 语义,团队形成共识
格式规范

1.定义,文本格式,属性定义顺序等


image.png
  1. 注释规范,单行注释,多行注释

单行注释星号前后需要后空格,否则如果出现编码问题会影响css生效

上一篇下一篇

猜你喜欢

热点阅读