Erlo

css快速入门系列 —— 移动开发闲谈

2025-02-16 21:29:41 发布   29 浏览  
页面报错/反馈
收藏 点赞

移动开发闲谈(Flex和css 库)

背景

目前在做移动小程序开发,效果必须和设计稿一模一样,一个像素都不能有差异。

虽然公司也提供了图生文的工具,但是有时生成的代码可读性不太好,二次修改也比较费劲,这种情况还不如自己重写。

如果长期没有写样式,知识遗忘是正常的。

单个 css 语法问题查文档或者问 gpt 都很方便解决,重要的是要有 css 库的思路。

伸缩盒模型

简介

CSS Flexbox(弹性盒布局模型)在2009年首次提出,又称伸缩盒模型。

flexbox 提供一种简介而强大的方式来排列和对齐页面中的元素,以及定义元素视觉顺序。

Flex在移动端广泛使用。

弹性容器和弹性项目

  • display:flex 将元素变成弹性容器,或者称开启flex布局,其孩子(只作用于第一代)自动变成弹性项目
  • 弹性项目,不论之前是 block、inline、inline-block,都变成block。比如 span
  • display: inline-flex 表现为行内元素。只占据必要的宽度,可以和其他行内元素在同一行排列。
  • 一个元素可以同时是弹性容器、弹性项目


Item 1
Item 2
Item 3
inline-flex 会和此文本在同一行

Tip:

  • display: flex表现为块级元素;
  • display: inline-flex表现为行内元素;
  • display: inline-flex 用的较少。比如将两个 flex 并排放在一行,但两个 flex中间容易出现空隙(比如两个 flex 之间有空格、回车)
  • 主轴对齐默认:flex-start,所以上图会左对齐。

主轴方向

  • 主轴默认是从左到右。弹性项目沿着主轴方向排列。主轴不是只有一条(有N行就可以说有N条主轴)
  • 侧轴(也叫交叉轴)总是与主轴垂直,也可以有多条。侧轴方向只会是:从上到下、从左到右。
  • 只能修改主轴方向。主轴变化,侧轴也会跟着变。
  • 主轴和侧轴的交叉点在哪里不用关心,因为不需要
  • 弹性项目沿着主轴排列,默认方向从左到右
  • 侧轴默认方向是从上到下
  • flex-direction: row(默认值:左->右)/row-reverse(右->左)/column(上-> 下)/column-reverse(下->上)

默认不换行(flex-wrap: nowrap):

.container {
  display: flex;
  align-items: center;
  border: 2px solid #000;
  padding: 10px;
}

flex-direction: row/row-reverse(侧轴对应的方向是:上到下)。请看下图:

flex-direction:column(上到下)/column-reverse(侧轴对应的方向:左到右)。请看下图:

主轴换行

主轴换行:flex-wrap: nowrap(默认)/wrap 换行/wrap-reverse 反向换行

主轴默认是不换行的。比如宽度800600的弹性容器,其中弹性项目宽度200200,放4个正好。在加一个,仍旧排在一行。这里体现了(chrome工具有提示)

如果需要第5个换行,需要将 nowrap 改成 wrap 即可。

  display: flex;
- flex-wrap: wrap;

主轴方向比较节省,大家挤一挤。侧轴方向就有点败家(有多的就多花,没有多余的也不会挤一挤)。比如第5个换行后,发现下面还有400的高度,自己占200,没必要和第一行挤在一起,就放在下面400的中间,上下间距100。

第9个出现后,就和上铺的兄弟说,空间不够了,没必要浪费了,于是第二排(例如第5个)紧挨着第一排

第13个出现,则超出容器(600px高度)排列

wrap-reverse:反向换行。之前是从上到下换行,现在是从下到上换行。



Item 1
Item 2
Item 3
Item 4
Item 5

主轴对齐

justify-content,中文“调整内容”。内容先放上去,然后在调整对齐方式。值有:

  • flex-start(默认值)
  • flex-start(主轴起点对齐,默认值)
  • flex-end(主轴终点对齐。项目顺序不用变)
  • center(居中)
  • space-between(项目均匀分布,边缘项目紧贴容器。较常用)
  • space-around(项目均匀分布,边缘是非边缘间距的一半)
  • space-evenly(项目均匀分布,边缘和非边缘间距相同)

注:如果太满(一行没有任何间隙),无论哪个属性,都看不出变化。第一行填满后再增加一项,假如换到了第二行,新加的这项的对齐方式就能看出来

居中对齐:justify-content: center。请看下图:

主轴终点对齐:justify-content: flex-end。请看下图:


注:别和换主轴方向(flex-direction: row-reverse)搞混

项目均匀分布,边缘是非边缘间距的一半:justify-content:space-around。请看下图:

项目均匀分布,边缘项目紧贴容器:justify-content:space-between。请看下图:

项目均匀分布,边缘和非边缘间距相同:justify-content: space-evenly。请看下图:

注:如果太满,无论哪个属性,都看不出变化。例如这里的:justify-content: flex-end



Item 1
Item 2
Item 3

Tip:更多详情请看:[mdn justify-content][https://developer.mozilla.org/zh-CN/docs/Web/CSS/justify-content]

侧轴对齐

分单行和多行,每种情况用的属性不同。

单行用 align-items,多行用 align-content

总结:

  • 项目多行:align-content: stretch(默认值。平分剩余容器高度,需要项目不设置高度)/flex-start(侧轴起点对齐)/flex-end(侧轴终点对齐)/center/space-around(和主轴对齐中的属性值含义类似)/space-between/space-evenly(侧轴完全平分间隙)
  • 项目多行:每行的高度由其中最高的项目决定
项目单行

align-items:

  • flex-start,侧轴起点对齐
  • flex-end,侧轴终点对齐
  • stretch,默认值。中文“拉伸”,如果弹性项目没有设置高度,将拉伸到容器高度
  • baseline,第一行文字基线对齐。基本不用。


Item 1
Item 2
Item 3

侧轴默认对齐不是顶部:align-items: flex-start,虽然上图表现的效果和 flex-start。这个稍后我们讲。

侧轴底部对齐:align-items: flex-end;

侧轴居中对齐:align-items: center。效果如下:

侧轴基线对齐(几乎不用):align-items: baseline;。请看下图:

align-items: stretch 是默认值,将伸缩项填充父容器高度。

只有伸缩项没有高度时才能拉伸。例如把高度去掉,效果就出来了。



Item 1
Item 2
Item 3


前面因为有高度,无法拉伸,所以效果和 align-items: flex-start 相同。

例如设置后两项的高度,align-items: stretch 效果如下图所示:

项目多行

align-content(和主轴对齐justify-content的值相似)

  • flex-start,侧轴起点对齐
  • flex-end,侧轴终点对齐
  • center,侧轴中点对齐
  • space-between,项目均匀分布,边缘项目紧贴容器
  • space-around,项目均匀分布,边缘是非边缘间距的一半
  • space-evenly,项目均匀分布,边缘和非边缘间距相同
  • stretch,侧轴拉伸对齐。默认值。没有高度的时候生效。

准备环境:准备3行,弹性项目高度不一致。



Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
Item 7
Item 8
Item 9


每行以最高的弹性项目为准,侧轴对齐这里讲的就是如何分配多余的空间。前面我们说到侧轴不太会过日子,有点败家。这里我们研究如何败家。

侧轴起点对齐:align-content: flex-start

侧轴中点对齐:align-content: center

侧轴拉伸对齐:align-content: stretch 默认值。假如三行的高度都去掉,将会平分容器的高度

.item {
  box-sizing: border-box;
  background-color: lightblue;
  width: 200px;
  /* height: 150px; */
  border: 1px solid #007BFF;
}
/* .fn-h1{ height: 200px;} */
/* .fn-h2{ height: 300px;} */

水平垂直居中

方式1
display: flex;
align-items: center;
justify-content: center;


完整代码:



Item
方式2

父元素 display: flex,子元素 margin: auto,也能实现方式1的效果。


伸缩性

flex-grow 伸

flex-grow: 1。默认是 0,表示主轴方向存在多余空间,也不拉伸。

为了研究 flex-grow,先准备环境:



Item1
Item2
Item3

上图可以知道,默认是没有拉伸的。因为剩余300px。

我们给弹性项目增加 flex-grow: 1,弹性盒子则会瓜分剩余空间。

每一个弹性项目都占1/3。

若3个伸缩项目flex-grow的值分别是 1、1、2,则分别瓜分 1/4、1/4、2/4。

flex-grow 默认是 0,即主轴存在剩余空间,也不拉伸。

flex-shrink 缩

flex-shrink,默认值是1。空间不够,会收缩。

:收缩的比例不同于拉伸

准备环境:弹性盒子宽度是700,但容器宽度只有400



Item1
Item2
Item3


容器有富裕的时候,大家按比例分,但是容器不富裕时,就不是这个规则。否则大家都应该减去100。但上图得知 item1 还有114.41,而不是100。item1 也不是200。


规则是这样:

item1 剩余计算规则

1. 缩小比例: 200/(200+200+300)
2. 缩小值:缩小比例 * 300
3. item1 剩余值:

200 - (200/700)*300 = 114.2857142857

但是浏览器是 114.41 和 114.285不一样,原因是浏览器的锅,由于弹性盒子的边框问题造成。

注释掉弹性盒子的边框:

  .item {
    /* box-sizing: border-box; */
    background-color: lightblue;
    width: 200px;
    height: 200px;
    /* border: 1px solid #007BFF; */
  }


这个值和 114.285就非常接近了。

为什么缩的规则不能简单设置为大家均摊赔了多少钱?比如有的弹性项目本来就只有20,你要人家陪100,不合适。

Tip:缩的极限,即内容能呈现

flex复合属性

flex是3个属性的复合属性,三值顺序必须是:flex-grow、flex-shrink、flex-basis



Item1
Item2
Item3

flex: 1 1 100px;

/* 等价 */

flex-grow: 1;
flex-shrink 1;
flex-basis: 100px;
flex-grow: 1;
flex-shrink: 1;
flex-basis: 0;

/* 等于 */

flex: 1 1 0; /* 最常用。0表示没有宽度,按照 “伸” 来走 */

/* 等于 */

flex: 1;

flex 复合属性之所以感觉难,是因为它还有缩写。比如:

flex: auto;

/* 等价 */

flex: 1 1 auto;
flex: none 

/* 等于 */
flex: 0 0 auto;
flex: 0 auto; /* flex 初始值 */

/* 等于 */

flex: 0 1 auto;

排序

order,默认值是0,值越小,排列越靠前

其他

flex-flow

flex-flow 是复合属性,不建议使用。复合了flex-direction 和 flex-wrap

基准长度

flex-basis(使用较少) 设置主轴方向的基准长度,会让宽度(主轴是水平方向)或高度(主轴是垂直方向)失效

默认值是auto,即弹性盒子的宽度或高度。

浏览器用 flex-basis 计算主轴是否有富裕的空间。

下面示例会让宽度失效



Item1
Item2
Item3

更改主轴方向,则会让高度失效:

  display: flex;
- flex-direction: column;

单独对齐

align-self,单独调整弹性项目在侧轴的对齐方式。用的较少。


Tip:为什么只能调整侧轴对齐方式,因为主轴都是连在一起的,无法调。

css 库

单个css 语法不难,重要的是代码复用和可读性。以下是笔者参考网易NEC的css规范写的一个 css 库。

css-library.css

可以将一些常用的 css 零碎的语法统一起来:

/*
目录
  reset.css
  grid.css
  unit.css
  module.css
  skin.css
  function.css
*/
/* reset.css */

/* 将常用的元素的margin和padding清空,方便布局;之所以不用*{margin:0;padding:0;},主要是性能问题,*{}会匹配很多废弃的元素 */
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;}
/* 将html5的标签改为块级元素,如果是移动端开发,可能是多余的(chrome 53测试默认都是block),以防万一吧 */
header,footer,section,article,aside,nav,hgroup,address,figure,figcaption,menu,details{display:block;}
/* 设置table的边框 */
table{border-collapse:collapse;border-spacing:0;}
/* 去除加粗,文本往左 */
caption,th{text-align:left;font-weight:normal;}
/* 去除fieldset、iframe边框 */
html,body,fieldset,img,iframe,abbr{border:0;}
/* 为了语义和设计的兼顾 */
legend{display:none;}
/* i、em、u、s等元素的默认样式保留挺好的 */
/* 去除下面元素的斜体 */
/* i,cite,em,var,address,dfn{font-style:normal;} */
/* 点击summary时有outline,不要 */
[hidefocus],summary{outline:0;}
/* 去除列表样式 */
li{list-style:none;}
/* 去除默认字体大小,继承父类即可,不喜欢normalize.css保留了字体大小 */
h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}
/* small{font-size:100%;} */
/* 设定sup、sub字体大小为父类的83% */
sup,sub{font-size:83%;}
/* chrome中pre是monospace字体,这里将以下元素字体设置为继承,否则即使设置body的字体,pre的字体还是monospace */
pre,code,kbd,samp{font-family:inherit;}
/* 去除" */
/* q:before,q:after{content:none;} */
/* 不让textarea调整尺寸 */
textarea{resize:none;}
/* 将手势改为default,chrome中summary的手势为auto */
label,summary{cursor:default;}
/* 修改为手 */
a,button{cursor:pointer;}
/* 将em、strong、b加粗 */
/* em,strong,b{font-weight:bold;} */
/* 去除del和s的删除线;去除ins和u的下划线;去除a下划线;*/
a,a:hover{text-decoration:none;}
/* del,ins,u,s{text-decoration:none;} */
/* 1rem=10px */
html{font-size:62.5%;}
/* 设置通用字体;有的字体不能继承,例如chrome中body 16px,即使设置body字体为12px,textarea,input,button,select,keygen仍然还是13.333333px;去除textaret、input、select的outline;*/
body,textarea,input,button,select,keygen,legend{font:14px/1.5 sans-serif,arial,5b8b4f53;color:#333;outline:0;/* 若使用rem代替px,p、span等标签在ie10以下文字大小将继承html,而chrome,firefox没问题 */}
/* 将背景ragb(0,0,0,0)改为白色 */
body{background:#fff;}
/* 参考bootstrapV3 */
p{margin-bottom:10px;}
/* 注释下面内容,否则给按钮字体颜色增加很多工作量,不就是chrome点击a字体变红色,没关系 */
/* a,a:hover{color:#333;} */

/* grid.css,网格系统 */
/* 网格容器 */
.g-grid{box-sizing:border-box;margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px;}
.g-grid-w1{width:86%;}
/* 手机和平板是86%;PC和大屏下是960px */
.g-grid-w960{width:960px;}
/* 清除浮动 */
.g-grid::after,.g-grid .row::after,.g-grid .clearfix::after,.g-grid .clearfix_xs::after,.g-grid .clearfix_sm::after,.g-grid .clearfix_md::after,.g-grid .clearfix_lg::after{display:block;height:0;visibility:hidden;content:'.';clear:both;}
/* Column clearing,配合媒体查询 */
 .g-grid .clearfix_xs,.g-grid .clearfix_sm,.g-grid .clearfix_md,.g-grid .clearfix_lg{display:none;}
/* 行的设置 */
.g-grid .row{box-sizing:border-box;margin-left:-15px;margin-right:-15px;margin-bottom:20px;}
.g-grid .row .row{margin-top:10px;margin-bottom:0;}
/* 列的设置 */
.g-grid [class*="col_"]{position:relative;float:left;box-sizing:border-box;padding:15px;}
.g-grid .col_1{width:8.333333333333334%;}
.g-grid .col_2{width:16.666666666666668%;}
.g-grid .col_3{width:25%;}
.g-grid .col_4{width:33.333333333333336%;}
.g-grid .col_5{width:41.666666666666664%;}
.g-grid .col_6{width:50%;}
.g-grid .col_7{width:58.333333333333336%;}
.g-grid .col_8{width:66.666666666666670%;}
.g-grid .col_9{width:75%;}
.g-grid .col_10{width:83.333333333333330%;}
.g-grid .col_11{width:91.666666666666670%;}
.g-grid .col_12{width:100%;}
/* 偏移 */
.g-grid .offset_col_1{margin-left:8.333333333333334%;}
.g-grid .offset_col_2{margin-left:16.666666666666668%;}
.g-grid .offset_col_3{margin-left:25%;}
.g-grid .offset_col_4{margin-left:33.333333333333336%;}
.g-grid .offset_col_5{margin-left:41.666666666666664%;}
.g-grid .offset_col_6{margin-left:50%;}
.g-grid .offset_col_7{margin-left:58.333333333333336%;}
.g-grid .offset_col_8{margin-left:66.666666666666670%;}
.g-grid .offset_col_9{margin-left:75%;}
.g-grid .offset_col_10{margin-left:83.333333333333330%;}
.g-grid .offset_col_11{margin-left:91.666666666666670%;}
.g-grid .offset_col_12{margin-left:100%;}
/* pull */
.g-grid .pull_col_1{left:8.333333333333334%;}
.g-grid .pull_col_2{left:16.666666666666668%;}
.g-grid .pull_col_3{left:25%;}
.g-grid .pull_col_4{left:33.333333333333336%;}
.g-grid .pull_col_5{left:41.666666666666664%;}
.g-grid .pull_col_6{left:50%;}
.g-grid .pull_col_7{left:58.333333333333336%;}
.g-grid .pull_col_8{left:66.666666666666670%;}
.g-grid .pull_col_9{left:75%;}
.g-grid .pull_col_10{left:83.333333333333330%;}
.g-grid .pull_col_11{left:91.666666666666670%;}
.g-grid .pull_col_12{left:100%;}
/* push */
.g-grid .push_col_1{right:8.333333333333334%;}
.g-grid .push_col_2{right:16.666666666666668%;}
.g-grid .push_col_3{right:25%;}
.g-grid .push_col_4{right:33.333333333333336%;}
.g-grid .push_col_5{right:41.666666666666664%;}
.g-grid .push_col_6{right:50%;}
.g-grid .push_col_7{right:58.333333333333336%;}
.g-grid .push_col_8{right:66.666666666666670%;}
.g-grid .push_col_9{right:75%;}
.g-grid .push_col_10{right:83.333333333333330%;}
.g-grid .push_col_11{right:91.666666666666670%;}
.g-grid .push_col_12{right:100%;}
/* 手机 */
@media screen and (max-width:667px){
  /* 定制宽度 */
  .g-grid-w2{width:100%;}
  .g-grid .clearfix_xs{display:block;}
  .g-grid .xs_col_1{width:8.333333333333334%;}
  .g-grid .xs_col_2{width:16.666666666666668%;}
  .g-grid .xs_col_3{width:25%;}
  .g-grid .xs_col_4{width:33.333333333333336%;}
  .g-grid .xs_col_5{width:41.666666666666664%;}
  .g-grid .xs_col_6{width:50%;}
  .g-grid .xs_col_7{width:58.333333333333336%;}
  .g-grid .xs_col_8{width:66.666666666666670%;}
  .g-grid .xs_col_9{width:75%;}
  .g-grid .xs_col_10{width:83.333333333333330%;}
  .g-grid .xs_col_11{width:91.666666666666670%;}
  .g-grid .xs_col_12{width:100%;}
  /* 偏移 */
  .g-grid .xs_offset_col_1{margin-left:8.333333333333334%;}
  .g-grid .xs_offset_col_2{margin-left:16.666666666666668%;}
  .g-grid .xs_offset_col_3{margin-left:25%;}
  .g-grid .xs_offset_col_4{margin-left:33.333333333333336%;}
  .g-grid .xs_offset_col_5{margin-left:41.666666666666664%;}
  .g-grid .xs_offset_col_6{margin-left:50%;}
  .g-grid .xs_offset_col_7{margin-left:58.333333333333336%;}
  .g-grid .xs_offset_col_8{margin-left:66.666666666666670%;}
  .g-grid .xs_offset_col_9{margin-left:75%;}
  .g-grid .xs_offset_col_10{margin-left:83.333333333333330%;}
  .g-grid .xs_offset_col_11{margin-left:91.666666666666670%;}
  .g-grid .xs_offset_col_12{margin-left:100%;}
  /* pull */
  .g-grid .xs_pull_col_1{left:8.333333333333334%;}
  .g-grid .xs_pull_col_2{left:16.666666666666668%;}
  .g-grid .xs_pull_col_3{left:25%;}
  .g-grid .xs_pull_col_4{left:33.333333333333336%;}
  .g-grid .xs_pull_col_5{left:41.666666666666664%;}
  .g-grid .xs_pull_col_6{left:50%;}
  .g-grid .xs_pull_col_7{left:58.333333333333336%;}
  .g-grid .xs_pull_col_8{left:66.666666666666670%;}
  .g-grid .xs_pull_col_9{left:75%;}
  .g-grid .xs_pull_col_10{left:83.333333333333330%;}
  .g-grid .xs_pull_col_11{left:91.666666666666670%;}
  .g-grid .xs_pull_col_12{left:100%;}
  /* push */
  .g-grid .xs_push_col_1{right:8.333333333333334%;}
  .g-grid .xs_push_col_2{right:16.666666666666668%;}
  .g-grid .xs_push_col_3{right:25%;}
  .g-grid .xs_push_col_4{right:33.333333333333336%;}
  .g-grid .xs_push_col_5{right:41.666666666666664%;}
  .g-grid .xs_push_col_6{right:50%;}
  .g-grid .xs_push_col_7{right:58.333333333333336%;}
  .g-grid .xs_push_col_8{right:66.666666666666670%;}
  .g-grid .xs_push_col_9{right:75%;}
  .g-grid .xs_push_col_10{right:83.333333333333330%;}
  .g-grid .xs_push_col_11{right:91.666666666666670%;}
  .g-grid .xs_push_col_12{right:100%;}
}
/* 平板 */
@media screen and (min-width:668px){
  .g-grid .clearfix_sm{display:block;}
  .g-grid .sm_col_1{width:8.333333333333334%;}
  .g-grid .sm_col_2{width:16.666666666666668%;}
  .g-grid .sm_col_3{width:25%;}
  .g-grid .sm_col_4{width:33.333333333333336%;}
  .g-grid .sm_col_5{width:41.666666666666664%;}
  .g-grid .sm_col_6{width:50%;}
  .g-grid .sm_col_7{width:58.333333333333336%;}
  .g-grid .sm_col_8{width:66.666666666666670%;}
  .g-grid .sm_col_9{width:75%;}
  .g-grid .sm_col_10{width:83.333333333333330%;}
  .g-grid .sm_col_11{width:91.666666666666670%;}
  .g-grid .sm_col_12{width:100%;}
  /* 偏移 */
  .g-grid .sm_offset_col_1{margin-left:8.333333333333334%;}
  .g-grid .sm_offset_col_2{margin-left:16.666666666666668%;}
  .g-grid .sm_offset_col_3{margin-left:25%;}
  .g-grid .sm_offset_col_4{margin-left:33.333333333333336%;}
  .g-grid .sm_offset_col_5{margin-left:41.666666666666664%;}
  .g-grid .sm_offset_col_6{margin-left:50%;}
  .g-grid .sm_offset_col_7{margin-left:58.333333333333336%;}
  .g-grid .sm_offset_col_8{margin-left:66.666666666666670%;}
  .g-grid .sm_offset_col_9{margin-left:75%;}
  .g-grid .sm_offset_col_10{margin-left:83.333333333333330%;}
  .g-grid .sm_offset_col_11{margin-left:91.666666666666670%;}
  .g-grid .sm_offset_col_12{margin-left:100%;}
  /* pull */
  .g-grid .sm_pull_col_1{left:8.333333333333334%;}
  .g-grid .sm_pull_col_2{left:16.666666666666668%;}
  .g-grid .sm_pull_col_3{left:25%;}
  .g-grid .sm_pull_col_4{left:33.333333333333336%;}
  .g-grid .sm_pull_col_5{left:41.666666666666664%;}
  .g-grid .sm_pull_col_6{left:50%;}
  .g-grid .sm_pull_col_7{left:58.333333333333336%;}
  .g-grid .sm_pull_col_8{left:66.666666666666670%;}
  .g-grid .sm_pull_col_9{left:75%;}
  .g-grid .sm_pull_col_10{left:83.333333333333330%;}
  .g-grid .sm_pull_col_11{left:91.666666666666670%;}
  .g-grid .sm_pull_col_12{left:100%;}
  /* push */
  .g-grid .sm_push_col_1{right:8.333333333333334%;}
  .g-grid .sm_push_col_2{right:16.666666666666668%;}
  .g-grid .sm_push_col_3{right:25%;}
  .g-grid .sm_push_col_4{right:33.333333333333336%;}
  .g-grid .sm_push_col_5{right:41.666666666666664%;}
  .g-grid .sm_push_col_6{right:50%;}
  .g-grid .sm_push_col_7{right:58.333333333333336%;}
  .g-grid .sm_push_col_8{right:66.666666666666670%;}
  .g-grid .sm_push_col_9{right:75%;}
  .g-grid .sm_push_col_10{right:83.333333333333330%;}
  .g-grid .sm_push_col_11{right:91.666666666666670%;}
  .g-grid .sm_push_col_12{right:100%;}
}
/* PC */
@media screen and (min-width:960px){
  .g-grid .clearfix_md{display:block;}
  .g-grid .md_col_1{width:8.333333333333334%;}
  .g-grid .md_col_2{width:16.666666666666668%;}
  .g-grid .md_col_3{width:25%;}
  .g-grid .md_col_4{width:33.333333333333336%;}
  .g-grid .md_col_5{width:41.666666666666664%;}
  .g-grid .md_col_6{width:50%;}
  .g-grid .md_col_7{width:58.333333333333336%;}
  .g-grid .md_col_8{width:66.666666666666670%;}
  .g-grid .md_col_9{width:75%;}
  .g-grid .md_col_10{width:83.333333333333330%;}
  .g-grid .md_col_11{width:91.666666666666670%;}
  .g-grid .md_col_12{width:100%;}
  /* 偏移 */
  .g-grid .md_offset_col_1{margin-left:8.333333333333334%;}
  .g-grid .md_offset_col_2{margin-left:16.666666666666668%;}
  .g-grid .md_offset_col_3{margin-left:25%;}
  .g-grid .md_offset_col_4{margin-left:33.333333333333336%;}
  .g-grid .md_offset_col_5{margin-left:41.666666666666664%;}
  .g-grid .md_offset_col_6{margin-left:50%;}
  .g-grid .md_offset_col_7{margin-left:58.333333333333336%;}
  .g-grid .md_offset_col_8{margin-left:66.666666666666670%;}
  .g-grid .md_offset_col_9{margin-left:75%;}
  .g-grid .md_offset_col_10{margin-left:83.333333333333330%;}
  .g-grid .md_offset_col_11{margin-left:91.666666666666670%;}
  .g-grid .md_offset_col_12{margin-left:100%;}
  /* pull */
  .g-grid .md_pull_col_1{left:8.333333333333334%;}
  .g-grid .md_pull_col_2{left:16.666666666666668%;}
  .g-grid .md_pull_col_3{left:25%;}
  .g-grid .md_pull_col_4{left:33.333333333333336%;}
  .g-grid .md_pull_col_5{left:41.666666666666664%;}
  .g-grid .md_pull_col_6{left:50%;}
  .g-grid .md_pull_col_7{left:58.333333333333336%;}
  .g-grid .md_pull_col_8{left:66.666666666666670%;}
  .g-grid .md_pull_col_9{left:75%;}
  .g-grid .md_pull_col_10{left:83.333333333333330%;}
  .g-grid .md_pull_col_11{left:91.666666666666670%;}
  .g-grid .md_pull_col_12{left:100%;}
  /* push */
  .g-grid .md_push_col_1{right:8.333333333333334%;}
  .g-grid .md_push_col_2{right:16.666666666666668%;}
  .g-grid .md_push_col_3{right:25%;}
  .g-grid .md_push_col_4{right:33.333333333333336%;}
  .g-grid .md_push_col_5{right:41.666666666666664%;}
  .g-grid .md_push_col_6{right:50%;}
  .g-grid .md_push_col_7{right:58.333333333333336%;}
  .g-grid .md_push_col_8{right:66.666666666666670%;}
  .g-grid .md_push_col_9{right:75%;}
  .g-grid .md_push_col_10{right:83.333333333333330%;}
  .g-grid .md_push_col_11{right:91.666666666666670%;}
  .g-grid .md_push_col_12{right:100%;}
}
/* 大屏 */
@media screen and (min-width:1024px){
  /* 定制宽度 */
  .g-grid-w2{width:960px;}
  .g-grid .clearfix_lg{display:block;}
  .g-grid .lg_col_1{width:8.333333333333334%;}
  .g-grid .lg_col_2{width:16.666666666666668%;}
  .g-grid .lg_col_3{width:25%;}
  .g-grid .lg_col_4{width:33.333333333333336%;}
  .g-grid .lg_col_5{width:41.666666666666664%;}
  .g-grid .lg_col_6{width:50%;}
  .g-grid .lg_col_7{width:58.333333333333336%;}
  .g-grid .lg_col_8{width:66.666666666666670%;}
  .g-grid .lg_col_9{width:75%;}
  .g-grid .lg_col_10{width:83.333333333333330%;}
  .g-grid .lg_col_11{width:91.666666666666670%;}
  .g-grid .lg_col_12{width:100%;}
  /* 偏移 */
  .g-grid .lg_offset_col_1{margin-left:8.333333333333334%;}
  .g-grid .lg_offset_col_2{margin-left:16.666666666666668%;}
  .g-grid .lg_offset_col_3{margin-left:25%;}
  .g-grid .lg_offset_col_4{margin-left:33.333333333333336%;}
  .g-grid .lg_offset_col_5{margin-left:41.666666666666664%;}
  .g-grid .lg_offset_col_6{margin-left:50%;}
  .g-grid .lg_offset_col_7{margin-left:58.333333333333336%;}
  .g-grid .lg_offset_col_8{margin-left:66.666666666666670%;}
  .g-grid .lg_offset_col_9{margin-left:75%;}
  .g-grid .lg_offset_col_10{margin-left:83.333333333333330%;}
  .g-grid .lg_offset_col_11{margin-left:91.666666666666670%;}
  .g-grid .lg_offset_col_12{margin-left:100%;}
  /* pull */
  .g-grid .lg_pull_col_1{left:8.333333333333334%;}
  .g-grid .lg_pull_col_2{left:16.666666666666668%;}
  .g-grid .lg_pull_col_3{left:25%;}
  .g-grid .lg_pull_col_4{left:33.333333333333336%;}
  .g-grid .lg_pull_col_5{left:41.666666666666664%;}
  .g-grid .lg_pull_col_6{left:50%;}
  .g-grid .lg_pull_col_7{left:58.333333333333336%;}
  .g-grid .lg_pull_col_8{left:66.666666666666670%;}
  .g-grid .lg_pull_col_9{left:75%;}
  .g-grid .lg_pull_col_10{left:83.333333333333330%;}
  .g-grid .lg_pull_col_11{left:91.666666666666670%;}
  .g-grid .lg_pull_col_12{left:100%;}
  /* push */
  .g-grid .lg_push_col_1{right:8.333333333333334%;}
  .g-grid .lg_push_col_2{right:16.666666666666668%;}
  .g-grid .lg_push_col_3{right:25%;}
  .g-grid .lg_push_col_4{right:33.333333333333336%;}
  .g-grid .lg_push_col_5{right:41.666666666666664%;}
  .g-grid .lg_push_col_6{right:50%;}
  .g-grid .lg_push_col_7{right:58.333333333333336%;}
  .g-grid .lg_push_col_8{right:66.666666666666670%;}
  .g-grid .lg_push_col_9{right:75%;}
  .g-grid .lg_push_col_10{right:83.333333333333330%;}
  .g-grid .lg_push_col_11{right:91.666666666666670%;}
  .g-grid .lg_push_col_12{right:100%;}
}

/* unit.css */
.u-hr,.u-hr2{display:block;margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee;}
.u-hr2{margin-top:40px;margin-bottom:40px;}
.u-dot{display:inline-block;height:1em;line-height:1;overflow:hidden;vertical-align:-.2em;}
.u-dot::before{display:block;content: '...A..A.';white-space:pre-wrap;animation:dot 3s infinite step-start;}
@keyframes dot{
  33%{transform:translateY(-2em)}
  66%{transform:translateY(-1em)}
}
/* 单行代码 */
.u-code{display:block;padding:2px 4px;border-radius:4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;white-space:normal;word-wrap:break-word;/* 长单词换行,防止溢出 */}
/* 多行代码 参考zhangxinxu */
.u-code2{position:relative;display:block;line-height:1.3;padding:0 15px 0 40px;margin:10px 0;box-sizing:border-box;background:#e4f0f5;white-space:pre-wrap;}
.u-code2::before{position:absolute;top:0;bottom:0;/* 配合top:0定义了此元素的高度,hidden才能生效 */left:0;overflow:hidden;padding-right:5px;border-right:3px solid #3f87a6;background:#fff;content:'01.A 02.A 03.A 04.A 05.A 06.A 07.A 08.A 09.A 10.A 11.A 12.A 13.A 14.A 15.A 16.A 17.A 18.A 19.A 20.A 21.A 22.A 23.A 24.A 25.A 26.A 27.A 28.A 29.A 30.A 31.A 32.A 33.A 34.A 35.A 36.A 37.A 38.A 39.A 40.A 41.A 42.A 43.A 44.A 45.A 46.A 47.A 48.A 49.A 50.A 51.A 52.A 53.A 54.A 55.A 56.A 57.A 58.A 59.A 60.A 61.A 62.A 63.A 64.A 65.A 66.A 67.A 68.A 69.A 70.A 71.A 72.A 73.A 74.A 75.A 76.A 77.A 78.A 79.A 80.A 81.A 82.A 83.A 84.A 85.A 86.A 87.A 88.A 89.A 90.A 91.A 92.A 93.A 94.A 95.A 96.A 97.A 98.A 99';/* A 控制字符的换行 */}
/* 例子 */
.u-example{position:relative;display:block;padding:45px 15px 15px 15px;border:1px solid #ddd;border-radius:4px 4px 0 0;background-color:#fff;}
.u-example::before{position:absolute;top:15px;left:15px;font-weight:700;color:#959595;content:'实例:';text-transform:uppercase;letter-spacing:1px;}
/* 元素标签 em ->  */
.u-eLabel::before{content:'';}
/* 超链接 */
.u-link{color:#337ab7;}
.u-link:hover,.u-link:focus{color:#23527c;text-decoration:underline;}
/* 按钮 */
/* 默认蓝色 */
.u-btn{display:inline-block;height:28px;line-height:28px;padding:0 12px;border:transparent;/* 针对

css-library.css 应用





css-library demo







网格

col_4
col_4
col_4
col_12 sm_col_3
col_12 sm_col_6
col_12 sm_col_3
col_12 lg_col_8
col_12 md_col_6
col_12 md_col_6
col_12 lg_col_4

Column clearing

col_3 xs_col_6


小屏幕下看看
col_3 xs_col_6
col_3 xs_col_6
col_3 xs_col_6

偏移2格

col_5
col_5 offset_col_2

col_3和col_9调换

col_3 md_pull_col_9
col_9 md_push_col_3

元件

.u-hr

.u-hr2(上下间距更大)

.u-code(单行代码)

if(1){ xxx }else{ 长单词换行,不会溢出容器aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa }

.u-code2(多行代码)

if(){ xxx }else{ aaa }
.u-example

.u-eLabel(em -> <em>)

em

.u-link

超链接
按钮 a.u-btn垂直居中
按钮 span.u-btn.u-btn-c1
按钮 span.u-btn.u-btn-lg
按钮 按钮 按钮

inline-block清除浮动

按钮 按钮 按钮
按钮 按钮 按钮
  • 右对齐
  • .u-menu-rt
  • 按钮 按钮 按钮
  • 至少撑满
  • 至少撑满
  • 按钮 按钮 按钮
  • 最多撑满abcdabcdabcd
  • 最多撑满
  • .u-font.u-font-xs 12px

    .u-font.u-font-sm 14px

    .u-font 16px

    .u-font.u-font-lg 20px

    .u-font.u-font-xlg 24px

    标注标题 .tt

    .u-callout

    忽略.......................................................

    标注标题 h2.tt

    .u-callout-danger

    标题下只能是p

    标注标题 h2.tt

    .u-callout-warn

    标题 .u-tt6 1.2rem —— 小标题 .sm(chrome限制,看不出来)

    忽略.............

    标题 .u-tt5 1.4rem —— 小标题 .sm

    忽略.............

    标题 .u-tt4 1.8rem —— 小标题 .sm

    忽略.............

    标题 .u-tt3 2.4rem —— 小标题 .sm

    忽略.............

    标题 .u-tt2 3.0rem —— 小标题 .sm

    忽略.............

    标题 .u-tt1 3.6rem —— 小标题 .sm

    忽略.............

    标题 .u-tt1.u-tt1-hd

    忽略.............

    默认:无边直角定宽定高110*110
    .u-img

    有边图片
    .u-img.u-img-b1

    有边圆角图片
    .u-img.u-img-b1.u-img-br

    高度自适应
    .u-img.u-img-ha

    自定义(填充父容器大小)
    .u-img.u-img-define

    .u-img2.u-img2-b1.u-img2-br

    标题

    省略...........................

    按钮

    图片和文字水平对齐

    图片和文字水平对齐

    请求已成功发出

    请求已成功发出

    肤色

    静音 .s-textMuted

    成功 .s-textSuccess

    主要 .s-textPrimary

    信息 .s-textInfo

    警告 .s-textWarn

    危险 .s-textDanger

    提示 .s-tip

    成功 .s-bgSuccess.f-p15

    主要 .s-bgPrimary.f-p15

    信息 .s-bgInfo.f-p15

    警告 .s-bgWarn.f-p15

    危险 .s-bgDanger.f-p15

    模块

    简易文字链接列表,无需任何类,即可实现

    .m-list2.m-list2-c1.m-list2-rds

    格边框 .m-table
    格边框表头表头表头表头
    内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
    内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
    行边框 .m-table.m-table-row
    格边框表头表头表头表头
    内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
    内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
    圆角 .m-table.m-table-rds 必须有thead和tbody
    圆角表头表头表头表头
    内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
    内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
    内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
    表格提供的状态类
    .m-table .z-active鼠标漂浮
    .m-table .z-success标识成功或积极的动作
    .m-table .z-info标识普通的提示或动作
    .m-table .z-warn标识警告或用户注意
    .m-table .z-danger表示危险或潜在带来的负面作用
    作者:彭加李
    出处:https://www.cnblogs.com/pengjiali/p/18718039
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

    登录查看全部

    参与评论

    评论留言

    还没有评论留言,赶紧来抢楼吧~~

    手机查看

    返回顶部

    给这篇文章打个标签吧~

    棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认