网站适配方案最近在做一些官网类的门户页面，发现这些页面布局大都类似，而且都有移动端的适配样式，按照我以往样的经验是写两套CSS代码进行维护，但这样每次修改都很麻烦，需要改很多地方。所以我就去请教了组内大佬，看看（CV）他们是怎么进行适配开发。PC的网页一般都是上中下结构，类似圣杯布局 顶部一个功能tab，中间内容有个固定宽度和两边保持一个边距：移动端的一般就是这样：PC布局PC上一般宽度变化不是非常明显，所以设计为了保持内容的大小在屏幕中有个合适的占比往往会对一些常见的宽度进行单独设计，所以UI图可能有好几个。当然我们不可能每个都分一个CSS文件进行书写，这样工作量就成倍增长了，所以我们可以利用CSS的媒体查询和LESS进行书写提高我们的效率。媒体查询变量定义媒体查询我们可以使用LESS变量进行定义，这样在不同的地方就可以书写变量来简化工作量了。根据设计图来定义多种媒体查询：@small-size: ~'(max-width: 910px)'; @middle-size: ~'screen and (min-width: 911px) and (max-width: 1199px)'; @large-size: ~'screen and (min-width: 1200px) and (max-width: 1792px)'; @biggest-size: ~'(min-width: 1793px)';布局方案使用栅格布局，所以我们需要定义一个基本的栅格系统：// 栅格的数量及宽度根据ui图来定，标准的ui图每个块的宽度一般和栅格是成整数倍的。 @col-width:40px; @col-gap:40px; @col-width-l:32px; @col-gap-l:32px; //这里设计18个栅格，另外有17个gap // 从1循环到18 @selectors:range(18); // 定义不同屏幕尺寸下不同的格栅大小变量，以及宽度类，这里只写了两个尺寸的 :root { each(@selectors, { --col-@{value}:(@value * @col-width + (@value - 1) * @col-gap) }); } each(@selectors, { .col-@{value}{ width:(@value * @col-width + (@value - 1) * @col-gap); } }); :root { each(@selectors, { --col-@{value}-l:(@value * @col-width-l + (@value - 1) * @col-gap-l) }); } each(@selectors, { .col-@{value}-l{ width:(@value * @col-width-l + (@value - 1) * @col-gap-l); } }); ...这样定义好之后我们就可以根据内容块是几个栅格之间的宽度进行书写，效率提升大大的。// 比如该盒子的宽度为10个栅格之间的宽度 .box{ width: var(--col-10); } @media @large-size { .box { width: var(--col-10-l); } }移动端布局移动端布局一般推荐VW布局进行适配各种宽度的屏幕所以我们可以根据UI图进行定义变量，比如UI图移动端的宽度为780px我们就可以以这个为基准来定义：@vw:(100 / 780vw);这样我们在UI图里量的多少px，就按照如下写法就行了@media @small-size { // 在ui图里为100px .box { width: 100*@vw; } }综上我们按照栅格+VW的方式就比较简洁高效的完成了多端布局
单行省略首先书写以下代码块 文字换行 单行换行 Lorem ipsum dolor sit amet, consectetur adipisicing elit. Blanditiisitaquequodpraesentiumexplicaboincidunt? Dolores beatae nam at sed dolorum ratione dolorem nisi velit cum.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Blanditiisitaquequodpraesentiumexplicaboincidunt? Dolores beatae nam at sed dolorum ratione dolorem nisi velit cum.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Blanditiisitaquequodpraesentiumexplicaboincidunt? Dolores beatae nam at sed dolorum ratione dolorem nisi velit cum.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Blanditiisitaquequodpraesentiumexplicaboincidunt? Dolores beatae nam at sed dolorum ratione dolorem nisi velit cum. 效果如下：可以看到文字换行了，但是有些较长的单词没有换行，如果你要求这些过长的单词也换行可以使用这个属性：word-wrap(该属性在css3修改为了overflow-wrap，当然目前还是能使用前面的那个属性名)。我们来为p标签设置属性：p{ overflow-wrap: break-word; }效果：另外还有一个换行属性：word-break，这些在不同文字间有不同的换行效果。回到正题，我们要求单行省略，那就不需要换行。所以这里设置不换行：这里需要一个属性white-spacep{ white-space: nowrap; }效果：可以看到没有换行，接下来设置溢出文本省略：p{ white-space: nowrap; overflow:hidden; }添加省略号样式：通过text-overflow设置。p{ white-space: nowrap; overflow:hidden; text-overflow:ellipsis; }多行省略多行省略就和单行有点不一样，首先在样式上，设置不换行的属性white-space就不用了,需要额外的三个属性：display: -webkit-box 将对象作为弹性伸缩盒子模型显示。-webkit-box-orient 设置或检索伸缩盒对象的子元素的排列方式。text-overflow: ellipsis 用省略号“…”隐藏超出范围的文本。overflow : hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2;/*设置换行的行数*/ -webkit-box-orient: vertical;目前多行的省略部分样式有兼容性问题，所以遇到兼容性问题还是需要另寻找方案了。比如使用伪元素来设置个省略号。
React中书写css代码React本身就是一个支持组件化的框架，但是React并没有对css处理好组件化。相较于Vue，Vue这个一块就处理的很好，css放置在style标签中，而且可以设置scope作用域，防止样式覆盖，也可以设置css预处理器。在组件化开发中我们需要书写局部的css，全局的css，动态的css(根据状态来设置css)。React中书写css就没有那么的方便，下面介绍一些在React中css的书写方式。内联样式官方推荐的一种写法。export default class componentName extends Component { render() { return ( 你好 世界 ); } }css中短横线链接的属性需要转为小驼峰的形式来书写，以对象的形式书写css样式，同时可以引入state中的属性来动态引入属性。当然缺点很明显，如果需要书写大量的代码，那这种方式一定不方便，没有代码提示等。另外一些样式也不能书写，伪元素等选择器是不能书写的。普通的css引入我们将css单独写在一个文件中，在引入到文件中。import React, { Component } from "react"; import './index.css' export default class componentName extends Component { render() { return ( 你好 世界 ); } }但这样引入的css没有组件之间的作用域，是作用在全局的，属于全局css，会相互影响。所以适合写一些基本的全局样式。css module 写法该方法不是React自带的方法，只要在类似webpack配置打包环境下都可以使用。如果在其他项目中使用我们需要自己配置，配置webpack.config.js中的属性modules:true等。React脚手架已经配置了css modules的配置。我们书写的.css/.less/.scss都需要修改为.module.css/.module.less/.module.scss。引入方式，需要一个变量来接受，className需要以{style.className}形式来书写import React, { Component } from "react"; import style from './index.module.css' export default class componentName extends Component { render() { return ( 你好 世界 ); } }这样就避免了作用域问题，渲染出来的className如下：当然缺陷也有，比如引入的类名不能是短横线连接，不方便修改属性。但这方法也是不错的css书写方式。CSS in JS通过js来增强React中css书写的一种方式。当然我们学些这个方式前先了解下ES6的一种语法，ES6标签模板字符串我们使用该方法需要引入第三方库，这里推荐以下几个库：styled-componentsemotionglamorous我们以styled-components这个库来演示，这个库在社区中是很流行的。安装方式：//npm方式 npm install styled-components -S //yarn方式 yarn add styled-components该库本质上是调用函数来创建一个组件，组件会添加不会重复的class。该方式支持css预处理器的嵌套写法，支持css的各类写法。基本用法：import styled from "styled-components";//创建一个组件 const TitleWrapper = styled.div` color: yellow; .title { background-color: tomato; &::after { content: "---aaa"; } } `;这个函数中根元素为div，其中的样式只作用于该组件中export default class CssInJS extends Component { state = {color:'pink'} render() { return ( <TitleWrapper> 我是谁 hahah </TitleWrapper> ); } } 渲染结果：props,attr属性props可以穿透，直接作用在元素上const InputWrapper = styled.input` background-color: red; `; export default class CssInJS extends Component { state = {color:'pink'} render() { return ( {/* 属性是可以穿透的，直接应用到标签上 */} <InputWrapper type="password"></InputWrapper> ); } }渲染结果：另外获取props需要通过${}形式获取，其中定义一个函数，props会作为函数的参数。const InputWrapper = styled.input` background-color: red; padding: ${(props) => props.padding}; `; export default class CssInJS extends Component { state = { color: "pink" }; render() { return ( <InputWrapper type="text" padding="20px"></InputWrapper> ); } }attr属性，为元素设置一些默认属性const Input2Wrapper = styled.input.attrs({ placeholder: "zhangsan", bColor: "red",//这种不存在的属性不能添加 'data-day':111 })` background-color: #f2f2f2; color: ${(props) => props.color}; `; export default class CssInJS extends Component { state = { color: "pink" }; render() { return ( <Input2Wrapper color={this.state.color} /> ); } }渲染效果：高级特性支持样式继承我们可以将另一个组件传入函数中来实现样式的继承const SuperButton = styled.button` padding: 8px 30px; border-radius: 5px; `; const MyButton = styled(SuperButton)` background-color: red; color: #bfa; `; export default class CssInJS extends Component { render() { return ( <MyButton>按钮</MyButton> ); } }渲染效果：主题设置import CIJ from "./cssInJS"; import { ThemeProvider } from "styled-components"; function App() { return ( 你好 <ThemeProvider theme={{color:'#bcf', fontSize:'30px'}}> <CIJ></CIJ> </ThemeProvider> ); } export default App;后代元素中获取theme中的属性const TitleWrapper = styled.div` color: ${(props) => props.theme.color}; font-size: ${(props) => props.theme.fontSize}; .title { background-color: tomato; &::after { content: "---aaa"; } } `;动态添加className在项目中我们需要为组件动态的添加一些css类名，这在react中只能自己实现。React没有为我们提供像Vue中的一些模板语法(比如一些指令v-bind等)，我们可以借助一个第三方库classnames来简化我们的工作量。//npm npm install classnames -S //yarn yarn add classnamesimport React, { Component } from 'react' import classNames from 'classnames'; export default class App extends Component { constructor(props){ super(props); this.state = { isActive:true, info:'info' } } render() { return ( 你好 世界 000 111 222 ) } }渲染结果：
我在使用ant-design-vue的开发的时候用到轮播组件，但是需求要求轮播效果是类似网易云window桌面端首页轮播图效果，有视差的效果，ant-design-vue提供的滚动效果有限，但是就这一个需求我又不太希望引入其他的轮播组件，就想着原生实现一个，然后在网上找了点资料，参照了一个博主的文章链接。了解了这个效果的实现，这里主要记录下实现过程以及原理。博主主要采用的还是css为主的方式来实现轮播展示和切换的效果。我主要做了一些功能的添加。完整代码如下： <slot name="item" :item="item"></slot> <slot name="arrow-left"> <</slot> <slot name="arrow-right">></slot> {{ item }} 后续添加上展示的gif，后续优化切换的动画，以及跨级切换动画层级问题。
实现效果如下：我在做相机界面时遇到了这样的按钮需求我的思路是两个圆环的嵌套，最里面的大圆环是透明色，然后嵌套其中的小圆环中央居中，最后再给大圆环设置一个边框，这样就实现了了这样的样式。实例代码如下
最近刚学了flex，这个非常方便的方法，但是里面的align-items 和align-content这两个属性在属性值上有很多相似的地方，而且它们的含义解释看似也比较相似，所以我就有点混淆它们的用法。align-itemsalign-items属性适用于所有的flex容器，它是用来设置每个flex元素在侧轴上的默认对齐方式。align-items和align-content有相同的功能，不过不同点是它是用来让每一个单行的容器居中而不是让整个容器居中。align-contentalign-content属性只适用于多行的flex容器，并且当侧轴上有多余空间使flex容器内的flex线对齐。看到上述的意思后感觉又懂了，但是还是有些懵逼，所以我们来代码演示下基本代码 实体 这时的效果加上align-items: center;去掉align-items: center;加上align-content:center;这时我们改变下子元素的宽度，并设置换行这时我们再加上align-items:center;然后再去掉align-items:center;加上align-content:center;由上述我们发现，align-content在单行的情况下不会生效，它是针对flex容器里面多轴(多行)的情况，而且是对整个容器进行操作。align-items属性适用于所有的flex容器，是针对每一行的元素进行排列，而不是整体进行排列。
[scode type="share"]概述：HTML(Hypertext Markup Language)，是一种标识性的语言。它包括一系列标签．通过这些标签可以将网络上的文档格式统一，使分散的Internet资源连接为一个逻辑整体。CSS(Cascading Style Sheets)是一种用来表现HTML（标准通用标记语言的一个应用）或XML（标准通用标记语言的一个子集）等文件样式的计算机语言。CSS不仅可以静态地修饰网页，还可以配合各种脚本语言动态地对网页各元素进行格式化。网页大致可以分为结构（HTML）表现（CSS）行为 (JS)。元素和标签是一样的，元素就是标签，标签就是元素。[/scode]HTML部分[collapse status="false" title="1.html的基本结构"] Title [/collapse][collapse status="false" title="2.实体"]在网页中编写的多个空格默认情况会自动被浏览器解析为一个空格，同时在HTML中有些时候，我们不能直接书写一些特殊符号，比如：多个连续的空格，比如字母两侧的大于和小于号。如果我们需要在网页中书写这些特殊的符号，则需要使用html中的实体（转义字符） 实体的语法： &实体的名字;一些常用的实体 空格 > 大于号 < 小于号 © 版权符号[/collapse][collapse status="false" title="3.meta，title标签"]在html的head中我们经常看到这类标签 meta主要用于设置网页中的元数据，其中有些属性和属性值含义如下：charset 指定网页的字符集 name 指定数据的名称， content 指定数据的内容keywords 表示网站的关键字 description 用于网站的描述，会显示在搜索引擎的搜索结果中 title标签的内容会作为搜索结果的超链接上的文字显示(网页的标题) document 其他标签中常见的标签 定义CSS样式 链接外部CSS文件或脚本文件 定义脚本语言 定义页面所有链接的基础定位（用得很少）[/collapse][collapse status="false" title="4.语义化标签"]在使用标签时，还需要关注的是标签的语义，而不只是它的样式h1~h6 标题标签，重要性逐级减小。h1在网页中重要性仅此于title标签，h6最不重要，当然一般只会用到h1~h3标题标签都是块元素，在页面中独占一行的元素称为块元素 标签一 标签二 标签三 标签四 标签五 标签六 p标签表示页面中的一个段落,p也是一个块元素hgroup用来为标题分组，可将一组相关的标题放入当中 <hgrpup> 回乡偶书 其一 </hgrpup>em标签用于表示语义语音的加重，在页面中不会独占一行的元素交内联元素（行内元素），em标签就是内联元素 今天天气不错 strong表示重要的内容强调，也是内联元素blockquote 表示一个长引用，是一个块元素q 表示短语引用，是一个内联元素鲁迅说： 这句话我从来都没说过！ 鲁迅说:这句话我从来都没说过！br标签表示换行，是一个自结束标签 div 无语义标签，目前页面的主要布局标签span 行内元素，主要用于套文字总结一些语义化标签hr 表示水平线cite 表示cite（引用），表现为斜体(常用来引用网站url)sup 表示superscripted(上标)sub 表示subscripted(下标)del 表示删除线H5新增的一些语义化标签header 表示网页头部main 表示网页的主体(一个页面只有一个)footer 表示网站的底部nav 表示网页中的导航aside 和主题相关的其他内容（侧边栏）article 表示独立的文章section 表示一个独立的区块，如上的标签都不能用时使用section标签元素的一些特点块元素，在网页中一般通过块元素对页面进行布局常见块元素：div ，p ，ul , li ,h1-h6…行内元素，行内元素主要用来包裹文字常见行内元素：span ,a ,strong ,em ,b ,s ,i ,font…一般会在块元素内放行内元素，而不会在行内元素里放内联元素注意：p标签中不能放任何的块元素[/collapse][collapse status="false" title="5.列表"]列表（list），在html中可创建列表，有三种有序列表无序列表定义列表有序列表，使用ol标签来创建列表，使用li来表示列表项 无序列表，使用ul标签来创建列表，使用li来表示列表项定义列表，使用dl来创建列表，使用dt来表示定义的内容，使用dd来表示对内容的说明另外，列表之间可以互相嵌套写法： 结构 表现 行为 1 2 3 结构 结构表示网页的结构，结构用来规定网页中那里是标题，那里是段落 [/collapse][collapse status="false" title="6.超链接"] 超链接 a标签超链接可以从一个页面跳转到其他页面，或者是当前页面的其他位置，属性：href：填写网址的urltarget：用来指定超链接打开页面的位置属性值：_self 默认值，在当前页面打开超链接_blank 在一个新的页面打开超链接还可将a的href属性值写为#，表示回到顶部，另外想跳转到页面的指定位置可以使用id值 注意：在a标签中可以放任何标签，除了自己 [/collapse][collapse status="false" title="7.路径"]相对路径，是指目标相对于当前文件的路径，网页结构设计中多采用这种方法来表示目标的路径。相对路径有多种表示方法，其表示的意义不尽相同。表示方法如下：./表示当前文件所在目录（可省略）../表示当前文件的上一级目录../../ 代表文件所在的父级目录的父级目录/ 代表文件所在的根目录（可以理解成项目内部的绝对路径）绝对路径，完整的地址[/collapse][collapse status="false" title="8.图片标签"]img标签，属于替换元素，基于块元素和行内元素之间属性：1.src指的是图片的路径2.alt是对图片的描述，用于图片加载不出来对图片的描述，搜索引擎会根据alt中的内容来识别图片 3.width图片的高度4.height图片的宽度，单位px，宽度和高度只改一个，那么图片会等比例变化，但是一般不建议都修改图片宽高 图片的格式：jpg 支持的颜色比较丰富，不支持透明效果和动态，一般用于照片gif 支持颜色不丰富，支持动态，支持简单透明，动态图片png 支持颜色丰富，支持复杂透明，不支持动图，转为网页webp 集齐了其他格式的所有优点，专为网页设计的格式 格式原则：效果一样用小的，效果不一样用好的，缺点兼容性不太好base64编码，将图片使用base64进行编码，一般都是需要和网页一起加载的图片才进行编码[/collapse][collapse status="false" title="9.内联框架"]内联框架 iframe标签用于像当前页面引入一个外部页面，就相当于网页里嵌套另一个网页1.src 引入图片的路径2.width ，height 用于指定窗口的大小3.frameborder 指定内联框架的边框，0表示关闭边框，1表示开启边框4.scrolling设置框架的滚动条，yes表示显示，no表示关闭，auto表示自适应设置滚动条[/collapse][collapse status="false" title="10.音视频标签"]audio 标签 用来向页面中引入一个外部音频文件，音视频文件引入时，默认不让用户自己控制播放停止属性：1.controls 是否允许用户控制播放，这个属性没有值，加上就有用户控制界面2.autoplay 设置自动播放，也没属性值，页面会在打开时播放，但是现在页面大部会不会自动播放，相当于这个属性有时会被忽略3.loop 音乐是否循环播放，也没属性值写法： 使用video标签来引入一个视频文件，使用方式基本和audio一样,当然ie8也是不兼容这个标签，就可以用embed写法： [/collapse]CSS部分[collapse status="false" title="1.CSS语法"]css 层叠样式表第一种修改样式方式：在标签内部通过style属性来修改，这样只能对一个标签修改，当要修改也不方便，所以开发不能用内联样式第二种，在head中的style标签中来修改通过css选择器来选择标签进行样式修改，这种方式不能跨页面使用第三种，外部样式表可以将css样式编写到外部的css文件中，通过link标签来引入外部的css标签，这个方式更加高效 css语法：选择器 声明块通过选择器可以选中页面中的指定元素通过声明块来指定要为元素设置的样式 [/collapse][collapse status="false" title="2.CSS常用选择器"]1.元素选择器根据标签名来选择指定的元素语法：标签名{}例如：p{}，div{}2.id选择器根据元素的id属性值选中一个元素语法#id属性值{}例如：#one{} 3.类选择器根据元素的class值选中一组元素语法: .class属性值{}例如：.two{}class是一个标签的属性，它和id类似，不同的是class可以重复使用可通过class属性来为元素分组，可同时为一个元素指定多个class元素，多个class之间用空格隔开4.通配选择器选择页面中的所有元素语法：*{}5.复合选择器交集选择器选择同时符合多个条件的元素语法：选择器1选择器2选择器3{}注意：交集选择器中要把元素选择器放在最前面如：div.red表示给class为red的div元素设置样式并集选择器可同时选择多个选择器对应的元素语法：选择器1，选择器2，选择器3{}例如：#one,.red{}6.关系选择器首先明确以下关系：父元素--直接包含子元素的元素子元素--直接被父元素包含的元素祖先元素--直接或间接包含后代的元素后代元素--直接或间接被祖先元素包含的元素兄弟元素--拥有相同父元素的元素是兄弟元素 子元素选择器选中指定父元素的指定子元素语法：父元素>子元素{}例如：.one > .span{}后代选择器选择指定元素内中指定的后代元素语法：祖先 后代{}兄弟选择器选择下一个兄弟元素语法：前一个 + 后一个{}选择下边所有的兄弟元素 语法：前一个 ~ 后一个 7.属性选择器属性选择器语法：[xxx]{}也可以在前面加上标签例如：p[title]{}其他写法：[属性名] 选择含有指定属性的元素[属性名=属性值] 选择含有指定属性和属性值的元素（有且仅有）[属性名^=属性值] 选择属性值以指定开头开始的元素[属性名$=属性值] 选择属性值以指定结尾结束的元素 [属性名*=属性值] 选择属性值含有某值的元素（含有）8.伪类选择器伪类，描述一个元素的特殊状态比如：第一个元素，被点击的元素...:first-child例如ul>li:first-child{}表示为第一个子元素且标签为li的设置样式:last-child就是为最后一个子元素设置样式:nth-child()选中第n个子元素，括号中填写数字特殊值：若值为n，则选中所有（0~正无穷）元素2n 或者 even ，则选中偶数位置的元素2n+1 或者 odd，则选中为奇数位的元素注意：以上的伪类是根据所有的子元素来排位置的，而不是标签种类:first-of-type:last-of-type:nth-last-of-type()上述三个伪类是根据类型不同来选择的例如：ul>li:first-of-type{}表示在ul子元素第一个li元素而 ul>li:first-child{}表示ul子元素li中的第一个li元素 :not() 否定伪类--将符合条件的元素从选择器中剔除，就是剔除的元素不设置样式括号里面还可嵌套伪类选择器例如： ul>li:not(:nth-of-type(2)){}9.a的伪类为超链接在鼠标移入，点击等方式设置样式:link 用来表示没访问过的链接（正常的链接）:visited 用来表示访问过的链接，由于隐私的原因，所以visited这个伪类只能修改链接的颜色:hover 用来表示鼠标移入的状态:active 用来表示鼠标点击10.伪元素伪元素，表示页面中一些特殊的并不真实的存在的元素（特殊的位置）伪元素使用 :: 开头::first-letter 表示第一个字母::first-line 表示第一行::selection 表示选中的内容（比如复制时给选中部分的样式）::before 元素的开始 ::after 元素的最后注意：before 和 after 必须结合content属性来使用。[/collapse][collapse status="false" title="3.样式的继承和选择器的权重"]样式的继承，为一个元素设置的样式会被其后代元素继承，这样是方便开发。注意：并不是所有的样式都会被继承，背景颜色，布局相关等的这些样式都不会被继承。选择器的权重，会影响样式的冲突--通过不同的选择器，选中相同的元素，并且为相同的样式设置不同的值此时就需要选择器的优先级来决定，选择器权重由高到低 内联样式 1000 id选择器 100 类和伪类选择器 10 元素选择器 1 通配选择器 0 继承的样式 没有比较优先级要将多个选择器权重进行相加再比较（注意：分组选择器是单独计算的不会相加）另外如果元素有多个类选择器，进行优先级累加时也不会超过其最大的数量级比如十个类累加的权重也不会超过id选择器的权重另外同级选择器则按照就近原则进行生效，（优先使用靠下的样式）可在某个样式的后边加上！important 使其样式优先级最高当然你写的选择器越详细权重越高[/collapse][collapse status="false" title="4.CSS中的单位"]长度单位：像素屏幕（显示器）实际上是由一个一个的小点点构成的不同屏幕的像素大小是不同的，像素越小的屏幕显示的效果越清晰所以同样的200px在不同的设备下显示效果不一样百分比也可以将属性值设置为相对于其父元素属性的百分比设置百分比可以使子元素跟随父元素的改变而改变emem是相对于元素的字体大小来计算的1em = 1font-sizeem会根据字体大小的改变而改变remrem是相对于根元素的字体大小来计算颜色单位：RGB值RGB通过三种颜色的不同浓度来调配出不同的颜色R red，G green ，B blue每一种颜色的范围在 0 - 255 (0% - 100%) 之间语法：RGB(红色,绿色,蓝色)RGBA就是在rgb的基础上增加了一个a表示不透明度需要四个值，前三个和rgb一样，第四个表示不透明度 ，1表示完全不透明 0表示完全透明 .5半透明十六进制的RGB值语法：#红色绿色蓝色颜色浓度通过 00-ff如果颜色两位两位重复可以进行简写 如：#aabbcc --> #abcHSL值 HSLA值H 色相(0 - 360)S 饱和度，颜色的浓度 0% - 100%L 亮度，颜色的亮度 0% - 100%[/collapse][collapse status="false" title="5.盒子模型"]每个盒子有以下部分构成：内容区（content）内边距（padding）边框（border）外边距（margin）边框（border），一般至少设置三个样式：宽度（border-width）border-width可以用来指定四个方向的值例如：border-width：10px 20px 30px 40px；是依次为上右下左边框设置宽度（顺时针）其他写法：四个值：上 右 下 左三个值：上 左右 下两个值：上下 左右一个值：上下左右除了border-width还有border-xxx-width，xxx为top，right，left，bottom就是特指某个方向边框的值颜色（border-color）规则与上述类似，另外若不设置border-color则边框颜色按照color的值来设置样式(border-style),规则同上有关样式：solid 实线dotted 点状虚线dashed 虚线double 双线none 默认值，表示没有边框border简写属性方式写法：border：solid 10px blue；当然还有border-xxx top，left，right，bottom内边距（padding），内容区于边框之间的距离就是内边距内边距也有四个方向padding-toppadding-leftpadding-rightpadding-bottom内边距会影响到盒子大小，内容区的背景颜色会延伸到内边距上盒子的可见框的大小，就是内容区，边框，内边距简写：规则和border一样外边距（margin）外边距不会影响盒子可见框的大小，但是外边距会影响盒子的位置，影响到盒子实际占用空间的大小外边距也有四个方向margin-topmargin-leftmargin-rightmargin-bottom默认情况下我们设置的左和上外边距元素会移动自己，设置下右外边距则是改变其他相邻元素的位置简写：margin：x x ... 写法同border这里说下外边距的折叠问题外边距的折叠，只有垂直方向才会发生相邻的的垂直方向外边距会发生重叠现象兄弟元素间相邻的垂直外边距会取两者之间较大值（两者都是正值）特殊情况：若相邻的外边距一正一负，则取两者之和若两个都是负数，则取绝对值较大的父子元素之间的相邻外边距，子元素会传递给父元素（上外边距），所以需要进行处理1.可通过加内边距减高度来实现2.或者通过某种方式使两个元素隔开，比如加上一个边框3.也是基于第二点的方式使用before伪类在父元素前面加上内容（但这个内容要不存在）注意：行内元素的盒模型比较特殊行内元素不支持设置宽高度行内元素可以设置padding，但垂直方向的padding不会影响布局行内元素可以设置border，垂直方向的border不会影响布局行内元素可以设置margin，垂直方向的margin不会影响布局但有时又需要给行内元素设置宽高，这里介绍两个属性display用来设置元素的显示类型属性值：inline 将元素转换为行内元素block 将元素转换成块元素inline-block 将元素设置为行内块元素，即可设置宽高又不独占一行(例如：可以看作一个字)table 将元素设置为表格none 元素不在页面显示，且释放占据位置visibility 用来设置元素的显示状态属性值：visible 默认值，元素在页面正常显示hidden 元素在页面中隐藏，但仍然占据位置 [/collapse][collapse status="false" title="6.盒子模型的布局"]一，元素的水平方向的布局：元素在其父元素中水平方向的位置由以下几个属性共同决定margin-leftborder-leftpadding-leftwidthpadding-rightborder-rightmargin-right一个元素在其父元素中，水平布局必须要满足以下的等式margin-left+border-left+padding-left+width+padding-right+border-right+margin-right = 其父元素内容区的宽度 （必须满足）比如：0 + 0 + 200 + 0 + 0 + 0 = 8000 + 0 + 200 + 0 + 0 + 600 = 8000 + 0 + 200 + 0 + 0 + 400 = 8000 + 0 + 200 + 0 + 0 + 500 = 800以上等式必须满足，如果相加结果使等式不成立，则称为过度约束，则等式会自动调整调整的情况：如果这七个值中没有为 auto 的情况，则浏览器会自动调整margin-right值以使等式满足这七个值中有三个值可设置为autowidthmargin-leftmaring-right如果某个值为auto，则会自动调整为auto的那个值以使等式成立0 + 0 + 0 + auto + 0 + 0 + 0 = 800 auto = 8000 + 0 + 0 + auto + 0 + 0 + 200 = 800 auto = 600200 + 0 + 0 + auto + 0 + 0 + 200 = 800 auto = 400auto + 0 + 0 + 200 + 0 + 0 + 200 = 800 auto = 400auto + 0 + 0 + 200 + 0 + 0 + auto = 800 auto = 300如果将一个宽度和一个外边距设置为auto，则宽度会调整到最大，设置为auto的外边距会自动为0如果将三个值都设置为auto，则外边距都是0，宽度最大如果将两个外边距设置为auto，宽度固定值，则会将外边距设置为相同的值，所以我们经常利用这个特点来使一个元素在其父元素中水平居中示例：width:xxxpx;margin:0 auto;二，元素的垂直方向布局若子元素超过父元素的大小，则会溢出，可使用overflow来处理溢出部分overflow属性值:hidden 裁剪掉溢出内容visible 默认值，子元素会显示在父元素外scroll 生成两个滚动条，通过滚动来查看完整内容auto 根据需要生成滚动条，比如一个方向溢出就生成一个方向的overflow-x 处理水平方向上的overflow-y 处理垂直方向的[/collapse][collapse status="false" title="7.盒子尺寸，轮廓，圆角和阴影"]默认情况下，盒子的可见框大小由内容区，内边距和边框决定 box-sizing 用来设置盒子尺寸的计算方式（设置width和height的作用）可选值：content-box 默认值，宽高用来设置内容区大小border-box 宽高设置整个盒子可见框的大小（这时width和height指的是内容区和内边距和边框的总大小）outline 用来设置元素的轮廓线，用法和border一样，不同的是轮廓不影响可见框的大小，就不会影响页面布局box-shadow 用来设置元素的阴影效果，阴影不会影响到页面布局用法：第一个值:左侧偏移量，正值向右，负值向左第二个值:垂直偏移量，正值向下，负值向上第三个值:阴影的模糊半径第四个值:阴影的颜色，一般用rgba来设置border-radius 用来设置元素的圆角可指定四个值分别是：左上 右上 右下 左下若为三个值 ：左上 右上左下 右下两个值 ：左上右下 右上左下一个值 :四个方向的另外在指定一个值时要把圆角设置成椭圆可以这样写，例如：border-radius : 20px / 40px;这样圆角就是一个椭圆将元素变为圆形 border-radius:50%;[/collapse][collapse status="false" title="8.浮动"]这里先认识一个概念1.对于元素有两种状态在文档流中，脱离文档流2.元素在文档流的特点 块元素块元素独占一行宽度默认为父元素的全部默认高度是被内容撑开行内元素不会独占一行，只占自身大小在页面中自左向右水平排列若一行中容不下就会换行元素的浮动通过浮动可以将一个元素向其父元素左侧或者右侧移动使用float 属性来设置元素的浮动可选值：none 默认值，元素不一动left 向左浮动right 向右浮动元素设置浮动后水平布局的等式就不必成立元素设置浮动后就会脱离文档流，不再占据文档流中位置浮动的元素向左或右移动时，不会超过其他浮动的元素如果浮动元素的上边是个没有浮动的块元素，则浮动元素无法上移浮动元素不会超过它上面的兄弟元素，最多就是一样高浮动元不会盖住文字，文字会环绕在图片周围，这样可设置文字环绕图片的效果浮动元素脱离文档流后元素特点：块元素不再独占一行块元素宽高就会被默认内容撑开行内元素会变为块元素，特点和块元素一样[/collapse][collapse status="false" title="9.高度塌陷和BFC"]BFC 块级格式化环境bfc是一个css中隐含的属性，可为一个元素开启bfc，开启bfc以后，元素会变成一个独立的布局区域开启特点：开启bfc的元素不会被浮动元素所覆盖开启bfc的元素子元素的外边距和父元素不会重叠，即不会传递给父元素开启bfc的元素可以包含浮动的子元素可通过特殊的方式开启bfc：设置元素的浮动（不推荐）将元素设置为行内块元素（不推荐）将元素的overflow属性值设置为一个非visible值，一般设置为hidden（副作用小）高度塌陷问题在浮动布局中，父元素的高度是默认被子元素撑开的，当子元素浮动后，其会完全脱离文档流，将会无法撑起父元素的高度，导致父元素高度丢失,父元素以下的元素会上移导致页面布局混乱clear属性当两个块元素垂直方向摆放，上面的块元素开启浮动会导致自身脱离文档流，然后下面的元素会移上来，这时候clear就可以解决这个问题可选值：left 清除左侧浮动元素对当前元素的影响right 清除右侧元素对当前元素的影响both 清除两侧浮动元素影响最大的对当前元素的影响原理：设置clear后浏览器会自动为元素加一个上外边距，使位置不受浮动元素影响解决高度塌陷的最终方案使用after伪类再受影响的元素最后面加一个空标签，但是该空标签是行内元素，所以还要改成块元素最后加上clear:both;就可完美解决高度塌陷问题所以这里就可总结一个样式 .clearfix::before, .clearfix::after{ content:''; display:table; clear:both; }该样式可完美解决高度塌陷和子元素与父元素外边距传递重叠问题[/collapse][collapse status="false" title="10.定位"]定位（position）使用position属性来设置定位可选值：static 默认值，元素未开启定位relative 开启元素的相对定位absolute 开启元素的绝对定位fixed 开启元素的固定定位sticky 开启元素的粘滞定位相对定位（relative）开启相对定位后，若不设置偏移量则 元素 不会发生任何的变化相对定位是参照元素在文档流位置所定位的，就是相对于元素最原来的位置相对定位会提高元素的层级相对定位不会使元素脱离文档流相对定位不会改变元素的性质，行内还是行内，块还是块，同时元素原来的位置还会保留偏移量（offset），通过偏移量来设置元素的位置，可通过以下四个属性来设置偏移量top--定位元素和定位位置上边的距离left--定位元素和定位位置左边的距离right--定位元素和定位位置右边的距离bottom--定位元素和定位位置下边的距离绝对定位（absolute）开启绝对定位，若不设置偏移量元素的位置不会发生变化开启绝对定位，元素会从文档流脱离绝对定位会改变元素性质，行内变成块，块的宽高被内容撑开绝对定位会提升元素的层级绝对定位是相对于其包含块进行定位的包含块（containing block）一般情况：包含块就是离当前元素最近的祖先块元素绝对定位的包含块：离它 最近 的开启了 定位 的祖先元素，若所有的祖先元素都没开启定位，则根元素就是它的包含如html（根元素，初始包含块） 固定定位（fixed）固定定位也是一种绝对定位，大部分特点和绝对定位一样唯一不同的是固定定位永远参照浏览器的视口定位粘滞定位（sticky）粘滞定位可以在元素达到某个值时才将其固定特点和相对定位基本一致绝对定位元素的位置这时水平布局等式又加了几个属性水平布局left + margin-left + border-left + padding-left + width + padding-right + border-right + margin-right + right = 包含块的内容区的宽度当我们开启了绝对定位后:水平方向的布局等式就需要添加left 和 right 两个值，此时规则和之前一样只是多添加了两个值当发生过度约束：如果9个值中没有 auto 则自动调整right值以使等式满足如果有auto，则自动调整auto的值以使等式满足可设置auto的值 ：margin width left right因为left 和 right的值默认是auto，所以如果不指定left和right，则等式不满足时，会自动调整这两个值另外，垂直方向布局的等式的也必须要满足等式top + margin-top/bottom + padding-top/bottom + border-top/bottom + height = 包含块的高度例如： Document 这样可实现中央居中元素的层级对于开启了定位元素，可以通过z-index属性来指定元素的层级z-index需要一个整数作为参数，值越大元素的层级越高元素的层级越高越优先显示如果元素的层级一样，则优先显示靠下的元素祖先的元素的层级再高也不会盖住后代元素[/collapse][collapse status="false" title="11.字体及其样式"]字体样式font-face可以将服务器中的字体直接提供给用户去使用 问题：加载速度版权字体格式 @font-face { /* 指定字体的名字 */ font-family:'myfont' ; /* 服务器中字体的路径 */ src: url('./font/ZCOOLKuaiLe-Regular.ttf') format("truetype"); }color 用来设置字体颜色font-size 字体的大小font-family 字体族（字体的格式）,指定字体的类别，浏览器会自动使用该类别下的字体可选值：serif 衬线字体sans-serif 非衬线字体monospace 等宽字体font-family 可以同时指定多个字体，多个字体间使用 , 隔开,字体生效时优先使用第一个，第一个无法使用则使用第二个 以此类推 写法：Microsoft YaHei,Heiti SC,tahoma,arial,Hiragino Sans GB,"\5B8B\4F53",sans-serif color: blue; font-size: 40px; /* font-family: 'Courier New', Courier, monospace; */ font-family: myfont;font-weight 字重 字体的加粗 可选值：normal 默认值 不加粗bold 加粗 ，100-900 九个级别（没什么用）font-style 字体的风格可选值：normal 正常的italic 斜体图标字体（iconfont）在网页中经常需要使用一些图标，可以通过图片来引入图标，但是图片大小本身比较大，并且非常的不灵活所以在使用图标时，我们还可以将图标直接设置为字体，然后通过font-face的形式来对字体进行引入，这样我们就可以通过使用字体的形式来使用图标fontawesome 使用步骤下载 传送门解压将css和webfonts移动到项目中将all.css引入到网页中一般写法：class="fas fa-bell"class="fab fa-accessible-icon"另外还可通过伪元素的方法，在content中设置字体的编码来使用字体的行高 line-height行高指的是文字占有的实际高度，可以通过line-height来设置行高，行高可以直接指定一个大小（px em），也可以直接为行高设置一个整数，如果是一个整数的话，行高将会是字体的指定的倍数，行高经常还用来设置文字的行间距，行间距 = 行高 - 字体大小。字体框字体框就是字体存在的格子，设置font-size实际上就是在设置字体框的高度，行高会在字体框的上下平均分配字体的简写样式font 可以设置字体相关的所有属性语法：font: 字体大小/行高 字体族行高 可以省略不写 如果不写使用默认值其他的字体样式text-decoration 设置文本修饰可选值：none 什么都没有underline 下划线line-through 删除线overline 上划线white-space 设置网页如何处理空白可选值：normal 正常nowrap 不换行pre 保留空白(就是保留文本在标签中的格式，标签里怎么显示的，网页就怎么显示)文字的布局text-align 文本的水平对齐可选值：left 左侧对齐right 右对齐center 居中对齐justify 两端对齐vertical-align 设置元素垂直对齐的方式可选值：baseline 默认值 基线对齐top 顶部对齐bottom 底部对齐middle 居中对齐图片若设置的是基线对齐则默认会与边框有个缝，可通过vertical来设置图片不基线对齐来消除这个缝[/collapse][collapse status="false" title="12.背景"]background-color 设置背景颜色background-image 设置背景图片 可以同时设置背景图片和背景颜色，这样背景颜色将会成为图片的背景色，如果背景的图片小于元素，则背景图片会自动在元素中平铺将元素铺满，如果背景的图片大于元素，将会一个部分背景无法完全显示，如果背景图片和元素一样大，则会直接正常显示background-repeat 用来设置背景的重复方式可选值：repeat 默认值 ， 背景会沿着x轴 y轴双方向重复repeat-x 沿着x轴方向重复repeat-y 沿着y轴方向重复no-repeat 背景图片不重复background-position 用来设置背景图片的位置设置方式：通过 top left right bottom center 几个表示方位的词来设置背景图片的位置，使用方位词时必须要同时指定两个值，如果只写一个则第二个默认就是center，通过偏移量来指定背景图片的位置：水平方向的偏移量 垂直方向变量background-clip 设置背景的范围 可选值：border-box 默认值，背景会出现在边框的下边padding-box 背景不会出现在边框，只出现在内容区和内边距content-box 背景只会出现在内容区background-origin 背景图片的偏移量计算的原点可选值：padding-box 默认值，background-position从内边距处开始计算content-box 背景图片的偏移量从内容区处计算border-box 背景图片的偏移量量从边框处开始计算background-size 设置背景图片的大小第一个值表示宽度 第二个值表示高度如果只写一个，则第二个值默认是 auto还可写值：cover 图片的比例不变，将元素铺满contain 图片比例不变，将图片在元素中完整显示background-attachment 背景图片是否跟随元素移动可选值：scroll 默认值 背景图片会跟随元素移动fixed 背景会固定在页面中，不会随元素移动backgound 背景相关的简写属性，所有背景相关的样式都可以通过该样式来设置，并且该样式没有顺序要求，也没有哪个属性是必须写的。但是注意：background-size必须写在background-position的后边，并且使用/隔开，background-position/background-size，background-origin background-clip 两个样式 ，orgin要在clip的前边[/collapse][collapse status="false" title="13.表格和表单"]在网页中我们也需要使用表格，我们通过table标签来创建一个表格写法： A1 B1 C1 D1 A2 B2 C2 D2 A3 B3 C3 A4 B4 C4 长表格：可以将一个表格分成三个部分：1.头部 thead2.主体 tbody3.底部 tfootth 表示头部的单元格 日期 收入 支出 合计 2000.1.1 500 200 300 2000.1.1 500 200 300 2000.1.1 500 200 300 2000.1.1 500 200 300 合计 300 表格的样式border-spacing: 指定边框之间的距离border-collapse: collapse; 设置边框的合并注意：默认情况下元素在td中是垂直居中的 可以通过 vertical-align 来修改，如果表格中没有使用tbody而是直接使用tr，那么浏览器会自动创建一个tbody，并且将tr全都放到tbody中，tr不是table的子元素将元素设置为单元格 td ,可通这个方式来让子元素居中 display: table-cell; vertical-align: middle;表单在现实生活中表单用于提交数据，在网页中也可以使用表单，网页中的表单用于将本地的数据提交给远程的服务器，使用form标签来创建一个表单，form的属性，action 表示要提交的服务器的地址文本框 要设置提示文字的话就在input标签里添加： placeholder="请输入用户名" 。注意：数据要提交到服务器中，必须要为元素指定一个name属性值密码框 单选按钮像这种选择框，必须要指定一个value属性，value属性最终会作为用户的填写的值传递给服务器，checked 可以将单选按钮设置为默认选中 多选框 下拉列表 选项一 选项二 选项三 提交按钮 其他的表单设置autocomplete="off" 关闭自动补全readonly 将表单项设置为只读，数据会提交disabled 将表单项设置为禁用，数据不会提交autofocus 设置表单项自动获取焦点 提交 重置 按钮 [/collapse][collapse status="false" title="14.过渡和动画"]过渡（transition）通过过渡可以指定一个属性发生变化时的切换方式通过过渡可以创建一些非常好的效果，提升用户的体验transition-property: 指定要执行过渡的属性 多个属性间使用,隔开 ，如果所有属性都需要过渡，则使用all关键字，大部分属性都支持过渡效果，注意过渡时必须是从一个有效数值向另外一个有效数值进行过渡。transition-duration: 指定过渡效果的持续时间时间单位：s 和 ms 1s = 1000mstransition-timing-function: 过渡的时序函数指定过渡的执行的方式 可选值：1.ease 默认值，慢速开始，先加速，再减速2.linear 匀速运动3.ease-in 加速运动4.ease-out 减速运动5.ease-in-out 先加速 后减速6.cubic-bezier() 来指定时序函数，获取函数网址传送门7.steps() 分步执行过渡效果第一个值表示步骤分几步执行可以设置一个第二个值：end ， 在时间结束时执行过渡(默认值)start ， 在时间开始时执行过渡（就是指的是比如1s开始执行，还是1s结束执行）transition-delay: 过渡效果的延迟，等待一段时间后在执行过渡transition 简写属性，可以同时设置过渡相关的所有属性，只有一个要求，如果要写延迟，则两个时间中第一个是持续时间，第二个是延迟transition:2s margin-left 1s cubic-bezier(.24,.95,.82,-0.88);动画动画和过渡类似，都是可以实现一些动态的效果，不同的是过渡需要在某个属性发生变化时才会触发，动画可以自动触发动态效果设置动画效果，必须先要设置一个关键帧，关键帧设置了动画执行每一个步骤基本写法：@keyframes test { /* from表示动画的开始位置 也可以使用 0% */ from{ margin-left: 0; background-color: orange; } /* to动画的结束位置 也可以使用100%*/ to{ background-color: red; margin-left: 700px; } }动画的相关样式animation-name: 要对当前元素生效的关键帧的名字比如：animation-name: test;animation-duration: 动画的执行时间animation-delay:动画的延时animation-timing-function:动画的执行方式animation-iteration-count 动画执行的次数 可选值：次数（一个整数）infinite 无限执行animation-direction 指定动画运行的方向可选值：normal 默认值 从 from 向 to运行 每次都是这样 reverse 从 to 向 from 运行 每次都是这样 alternate 从 from 向 to运行 重复执行动画时反向执行alternate-reverse 从 to 向 from运行 重复执行动画时反向执行animation-play-state: 设置动画的执行状态 可选值：running 默认值 动画执行paused 动画暂停animation-fill-mode: 动画的填充模式可选值：none 默认值 动画执行完毕元素回到原来位置forwards 动画执行完毕元素会停止在动画结束的位置backwards 动画延时等待时，元素就会处于开始位置both 结合了forwards 和 backwards[/collapse][collapse status="false" title="15.变形"]变形就是指通过CSS来改变元素的形状或位置变形不会影响到页面的布局transform 用来设置元素的变形效果平移：用以下方式来设置方向translateX() 沿着x轴方向平移translateY() 沿着y轴方向平移translateZ() 沿着z轴方向平移也可填写百分比，百分比是相对于自身计算的介绍一种居中方式： .box3{ background-color: orange; position: absolute; /* 这种居中方式，只适用于元素的大小确定，不然会把整个元素撑开 top: 0; left: 0; bottom: 0; right: 0; margin: auto; */ /*这样也可设置居中，且不需要固定元素的大小，只要有内容撑开就行了*/ left: 50%; top: 50%; transform: translateX(-50%) translateY(-50%); }Z轴平移z轴平移，调整元素在z轴的位置，正常情况就是调整元素和人眼之间的距离，距离越大，元素离人越近。z轴平移属于立体效果（近大远小），默认情况下网页是不支持透视，如果需要看见效果，就必须要设置网页的视距。可通过perspective来设置视距，例如：perspective：800px；表示设置当前网页的视距为800px，人眼距离网页的距离。旋转通过旋转可以使元素沿着x y 或 z旋转指定的角度rotateX()rotateY()rotateZ()示例写法： transform: rotateZ(.25turn); /*表示转1/4个圆*/ transform: rotateY(180deg) translateZ(400px); transform: translateZ(400px) rotateY(180deg) ; transform: rotateY(180deg);因为旋转就涉及到了元素的正反面这里再介绍一个属性backface-visibility: hidden; 表示是否显示元素的背面。缩放对元素进行缩放的函数：scaleX() 水平方向缩放scaleY() 垂直方向缩放scale() 双方向的缩放scaleZ()在轴方向的缩放要设置3d效果 ,设置3d效果:transform-style:preserve-3d; 最后再说一个属性，transform-origin，变形的原点想到旋转就好理解了，比如旋转式以什么为参考点旋转的呢这个属性默认值 center可以为其设置两个值，例如transform-origin：20px 20px；表示变形的原点相对于默认值的偏移量。[/collapse][collapse status="false" title="16.flex弹性盒子"]flex(弹性盒、伸缩盒)是CSS中的又一种布局手段，它主要用来代替浮动来完成页面的布局，flex可以使元素具有弹性，让元素可以跟随页面的大小的改变而改变。弹性容器要使用弹性盒，必须先将一个元素设置为弹性容器我们通过 display 来设置弹性容器display:flex 设置为块级弹性容器display:inline-flex 设置为行内的弹性容器弹性元素弹性容器的子元素是弹性元素（弹性项）弹性元素可以同时是弹性容器弹性容器相关属性：flex-direction 指定容器中弹性元素的排列方式 可选值：row 默认值，弹性元素在容器中水平排列（左向右）主轴方向 自左向右row-reverse 弹性元素在容器中反向水平排列（右向左）主轴方向 自右向左column 弹性元素纵向排列（自上向下）column-reverse 弹性元素方向反向纵向排列（自下向上）主轴：弹性元素的排列方向称为主轴侧轴：与主轴垂直方向的称为侧轴flex-wrap 设置弹性元素是否在弹性容器中自动换行可选值：nowrap 默认值，元素不会自动换行wrap 元素沿着辅轴方向自动换行wrap-reverse 元素沿着辅轴反方向换行另外：flex-flow: 是wrap 和 direction 的简写属性 ，例如：flex-flow: row wrap;就是设置弹性元素水平排列自动换行。justify-content 如何分配主轴上的空白空间（主轴上的元素如何排列）可选值：flex-start 元素沿着主轴起边排列flex-end 元素沿着主轴终边排列center 元素居中排列space-around 空白分布到元素两侧space-between 空白均匀分布到元素间space-evenly 空白分布到元素的单侧 (兼容性不好)与其对应的align-content: 就是辅轴空白空间的分布，用法一样align-items: 元素在辅轴方向上如何对齐，元素间的关系可选值：stretch 默认值，将元素的长度设置为相同的值flex-start 元素不会拉伸，沿着辅轴起边对齐flex-end 沿着辅轴的终边对齐center 居中对齐baseline 基线对齐介绍一个属性align-self: 用来覆盖当前弹性元素上的align-items，例如align-self:stretch;就是消除align-items:strecth; 的效果。弹性元素相关样式：flex-grow 指定弹性元素的伸展的系数当父元素有多余空间的时，子元素如何伸展，父元素的剩余空间，会按照比例进行分配。flex-shrink 指定弹性元素的收缩系数，当父元素中的空间不足以容纳所有的子元素时，可对子元素进行收缩，缩减多少是根据 缩减系数和元素大小来计算。元素基础长度flex-basis 指定的是元素在主轴上的基础长度如果主轴是 横向的 则 该值指定的就是元素的宽度如果主轴是 纵向的 则 该值指定的是就是元素的高度默认值是 auto，表示参考元素自身的高度或宽度如果传递了一个具体的数值，则以该值为准简写flex 可以设置弹性元素所有的三个样式（可设置一个值，也可分开详细设置三个值）flex :增长 缩减 基础;三个基本值：initial等于 "flex: 0 1 auto".auto 等于"flex: 1 1 auto"none 等于"flex: 0 0 auto" 弹性元素没有弹性order 决定弹性元素的排列顺序，属性值就是一个整数。[/collapse]