CSS总结

复习完CSS后总结一下,首先看一下CSS的一个体系结构图:


CSS体系结构图.png

大体上分为这八个部分,参考一下vivijind的css博客和自己的笔记

CSS简介

CSS概述

CSS,cascading style sheet,层叠样式表 ,HTML主要对应页面的内容,CSS主要对应页面的呈现。CSS 描述了在屏幕、纸质、音频等其它媒体上的元素应该如何被渲染的问题。

引入方法

外部样式表:<link rel=”stylesheet” href =”base.css”>,herf里引入外部的css文件
内部样式表:<style></style> (将页面各种元素的设置集中写在<head></head>标签里)
内嵌样式表:<p style=””> 在标签内嵌入,该方法将html和css杂糅在一起, 不利于后期维护

语法

CSS 语法由两个主要的部分构成:选择器,以及一条或多条声明。

image.png

书写建议:

在每条声明的末尾都加上分号;
多重声明时,在每行只描述一个属性,这样可以增强样式定义的可读性
CSS注释方法: /* … */

浏览器私有属性

CSS标准包括w3c的标准,也包括各浏览器厂商的不同标准。标准中各个属性也要经历从草案(WD)到推荐(REC)的过程,css3中的属性进展都不一样。浏览器厂商在标准尚未明确情况下提前支持会有风险,同时也会出现有的浏览器厂商支持的好,有的支持的不好,所以就用厂商前缀加以区分。

chrome,safari

  • -webkit-

firefox

  • -moz-

IE

  • -ms-

opera

  • -o-
.pic{
    -webkit-transform:rotate(-3deg);
    -moz-transform:rotate(-3deg);
    -ms-transform:rotate(-3deg);
    -o-transform:rotate(-3deg);
    transform:rotate(-3deg);
}

属性值语法

基本元素(关键字,类型、符号、inherit,initial(隐藏))

取值方法:

  • CSS关键词(例如auto,red,disc等)
  • CSS基本数据类型,基本类型使用包含在尖括号中的类型名表示(例如<length>、<number>等)
  • 取值与其属性取值范围一致的类型,使用包含在尖括号中的带有引号的属性名表示(例如<’border-top-color’>等)
  • 取值不同于其属性的类型,使用包含在尖括号中的属性名表示(例如<margin-width>、<border-width>等)

组合符号

  • 空格 :<’font-size’> <’font-family’> 必须出现且顺序不能变
  • && : <length>&&<color> 必须出现,顺序可变
  • || : underline || overline || line-through || blink 至少出现一个,顺序可变
  • | : <color> | transparent 仅能出现一个
  • [] :bold [thin ||<length>] 分组作用,大括号内可以看成一个

数量符号

  • <length> 出现一次
  • +出现一次或者多次
  • ?可以出现也可以不出现
  • {} <length>{2,4} {}内两个数字分别表示最少和最多出现次数,空格隔开
  • *可以出现0,1…n次
  • #需要出现一次或者多次,中间用逗号隔开

@规则语法

@规则以一个关键词@开始,紧跟在后的是一个标识符。
格式:@ 标识符 xxx; @ 标识符 xxx {}
常用标识符:

常用标识符.png

CSS选择器

在CSS中,选择器是一种模式,用于选择需要添加样式的元素。具体见:CSS选择器同时,需要注意的是,不同浏览器对选择器的支持不一样。
选择器兼容性说明:本节中所讲的选择器,主流的浏览器基本都支持,IE低版本有较多的兼容问题,具体可查看该页面

简单选择器

  • 标签选择器 标签{}

  • 类选择器(class 属性) .class{}

    • .
    • 字母、数字,-,_
    • className必须以字母开头
    • 区分大小写
    • 出现多次
  • id选择器 #id{}

    • #
    • 字母、数字,-,_
    • id必须以字母开头
    • 区分大小写
    • 相同ID仅出现一次
  • 通配符选择器 *{}

  • 属性选择器(选择具有某个属性的元素) [属性]{}

    • [att=val]{} 属性等于某个值的选择器 #nav{} == [id = nav]{} ID选择器为其特例
    • [att~=val]{} 表示属性中包含xx值,使用空格分割 .sports{} == [class~=sports]{} 类选择器为其特例
    • [att|=val]{} 分隔符等号 选择值为val或者val-开头的元素 (不常用)
    • [att^=val]{} 以某个值开头的属性选择器
    • [att$=val]{} 以什么结尾的元素
    • [att*=val]{} 包含什么的元素
  • 伪类选择器

    • a:link{color:gray;} 伪类选中所有a标签且href有值的
    • a:visited{} 访问过的
    • a:hover{} hover上去的效果
    • a:active{} 鼠标点击上去的样式
    • :enabled 可用状态
    • :disabled 不可用状态
    • :checked 单选复选框状态,选中状态
    • :first-child 选中第一项
    • :last-child 选中最后一项
      +:nth=child(even) 选中哪项(正着) old even 3n+1之类的
    • :nth-last-child(even) 倒着选中哪项
    • :only-child 选中只有一项的
    • :fist-of-type 选中第一个类型的元素
    • :last-of-type 选中最后一个
    • :nth-of-type(2n)
    • :nth-last-of-type(2n)
    • :only-of-type
  • 不常用的伪类选择器

    • :empty 没有子元素的元素
    • :root html根标签
    • :not() 不包含某个选择器的元素
    • :target 目标元素
    • :lang() 选中一些language值是某些特殊值的元素
  • 伪元素选择器
    伪元素是对元素中的特定内容进行操作,它所操作的层次比伪类更深了一层,也因此它的动态性比伪类要低得多。实际上,设计伪元素的目的就是去选取诸如元素内容第一个字(母)、第一行,选取某些内容前面或后面这种普通的选择器无法完成的工作。它控制的内容实际上和元素是相同的,但是它本身只是基于元素的抽象,并不存在于文档中,所以叫伪元素。


    伪元素选择器.png
  • 组合选择器


    组合选择器.png

继承

子元素会继承父元素的样式,但是我们显示运用inherited可以把非继承变成继承

  • 继承属性(自动继承)
    • color
    • font
    • text-align
    • list-style
  • 非继承属性
    • background
    • border
    • position

CSS优先级

计算方法

  • 计算方法(从上往下权重降低)
    • a=行内样式
    • b=ID选择器数量
    • c=类、伪类的属性选择器的数量
    • d=标签选择器和伪元素选择器的数量
    • 优先级高的样式覆盖优先级低的样式


      CSS优先级.png

CSS层叠

  • 相同的属性会覆盖
    • 优先级
    • 后面覆盖前面
  • 不同的属性合并

CSS改变优先级

  • 改变先后顺序
  • 提升选择器的优先级
  • !important 增加!important关键字(当前面两种方法都不可以用时,才采取important的方式)

盒模型

CSS盒模型简介(W3C标准)

CSS盒模型.png

Content

  • width:<length> | <percentage> | auto | inherit
    • 百分比参照物为其父元素(大部分情况)
    • 引申: max-width、min-width
  • height:<length> | <percentage> | auto | inherit
    • 引申: max-width、min-width

Padding

padding: [<length> | <percentage>] {1,4} | inherit

  • 对面相等,后者省略,4面相等,只设一个
  • 四个值:上右下左 TRBL
  • 三个值:上右下,然后左复制右
  • 二个值:上右,上复制下,左复制右
  • 一个值:四边都是这个值
  • 也可以单个设置:padding-top、padding-right、padding-bottom、padding-left
  • 引申:margin、border 类似

Margin

margin: [<length> | <percentage> | auto] {1,4} | inherit

  • margin合并:毗邻元素margin会合并,父元素与第一个/最后一个元素考虑合并
  • 利用auto妙用 margin: 0 auto——水平居中

在CSS中margin是指从自身边框到另一个容器边框之间的距离,就是容器外距离。在CSS中padding是指自身边框到自身内部另一个容器边框之间的距离,就是容器内距离。

margin.png

margin合并问题,详见 MDN 外边距合并

Border

边框 border: [<border-width> || <border-style> || <border-color>] | inherit

  • border-width: [<length> | thin | medium | thick] {1,4} | inherit 默认边框值
  • border-style: [solid | dashed | dotted |…] {1,4} | inherit
  • border-color: [<color>|transparent]{1,4} | inherit
  • 默认字体颜色,颜色可以有一个或者四个值,分别表示边框中上右下左四个颜色
  • border:2px solid;border-color:#333 #333 transparent;border-radius:50%;

border-radius

圆角 border-radius: [<length>|<percentage>]{1,4}[/[<length>|percentage>]{1,4}]?

  • border-radius:10px; 表示四个角水平和垂直半径都是10px


    border-radius.png

overflow

防止盒子内容超出 overflow: visible | hidden | scroll | auto


overflow.png
  • 引申: overflow-x, overflow-y
    • Overflow-x 是否对内容的左/右边缘进行裁剪。
    • Overflow-y 是否对内容的上/下边缘进行裁剪。

box-sizing

盒子大小box-sizing: content-box | border-box | inherit
指定当前属性是哪个区域的宽高(设置width、height指定的区域)

  • content-box:padding和border不被包含在定义的width和height之内。对象的实际宽度等于设置的width值和border、padding之和,即 ( Element width = width + border + padding ) 此属性表现为标准模式下的盒模型。
  • border-box:padding和border被包含在定义的width和height之内。对象的实际宽度就等于设置的width值,即使定义有border和padding也不会改变对象的实际宽度,即 ( Element width = width ) 此属性表现为IE怪异模式下的盒模型。

个人感觉IE盒模型比W3C的标准盒模型好用也方便...

box-shadow

盒阴影box-shadow: none | <shadow>[,<shadow>]*


box-shadow.png
  • 阴影不占空间,仅修饰性的效果

outline

轮廓 outline: [<outline-width> || <outline-style> || <outline-color>] | inherit

  • outline-width: <length> | thin | medium | thick | inherit 默认边框值
  • outline-style: solid | dashed | dotted |…| inherit
  • outline-color: <color>|invert | inherit invert表示和当前背景色相反的颜色
  • outline不占用空间,在border外
  • 可以利用outline模仿border边框

文本

字体

字体大小

  • font-size: <length>|<percentage>|<absolute-size>|<relative-size>
  • 例如12px 2em 200%
  • 2em(2倍字体,建议使用相对值) 12px(绝对值) 字体大小
  • 长度单位:
    • em表示当前字体的倍数,相对大小值
    • 百分比表示整个页面的宽度
    • mm、cm、dm等表示毫米,厘米,分米
    • px表示多少个像素点
    • pt表示印刷上的磅,七十二分之一英寸
    • 1rem = 16px

字体类型

font-family: [<family-name>|<generic-family>]#

  • <generic-family> = serif | sans-serif | cursive | fantasy | monospace
  • 五大类字体 serif(英文,矢量字体) sans-serif modospace(宽字体) cursive(手写字体) fatasy(无法归类的字体,特殊字符之类)
  • 可制定大类也可制定具体字体名字,用”,”来加入多个字体,表示备选字体(当浏览器找不到字体时,会采用默认字体,提供备用字体可以提供多个选择)

粗体

  • font-weight: normal | bold | bolder | lighter
  • bold(加粗) or 900-100(数字表示粗,不同浏览器支持数字不同)

斜体(字体风格)

  • font-style: normal | italic(字体本身的斜体) | oblique(字体没有斜体时,强制倾斜,浏览器计算得到)
  • normal(正常) italic(斜体,厂家设计的斜体) obique(浏览器计算产生的斜体)

行高

line-height : normal | <number> | <length> | <percentage> 行的高度(行间距)

  • 例如12px 3em(em表示当前字体的大小) 300% 3(等价于300%,略微有差别,见下)
  • 300%设置时,如果把里面某段字设置为小的大小,行高不变,为先计算,后继承
  • 3设置时,如果把里面字段设置为小的大小,行高根据改后的大小*3,为不计算,直接继承
  • 和height的区别:line-height只针对行元素,height针对其他所有元素
    • line-height:行高 设置文字间上下距离还有可以让层里面的东西可以垂直居中
    • height:高度 就是定义一个层 或某样东西的高度

小型大写字母的字体

font-variant: small-caps (小的大写字母)

  • font-variant 属性设置小型大写字母的字体显示文本,这意味着所有的小写字母均会被转换为大写,但是所有使用小型大写字体的字母与其余文本相比,其字体尺寸更小。

font缩写

font:[[<font-style>||<font-variant>||<font-weight>||<font-stretch>]? <font-size> [/<line-height>]? <font-family> ] | caption | icon | menu | message-box | small-caption | status-bar

  • 示例:缩写:font: 30px/2 “Consolas”, monospace;

颜色

  • color: red/#ff0000/reg(255,0,0)/rgba(255,0,0,1)/transparent
  • 英文单词说明颜色,例如gray,red,yellow
  • rgb颜色 #ff00ff 16进制数字分别表示rgb
  • rgb颜色 rgb(255,255,0) rgba(255,255,0,0.5) 透明度 1,表示不带a通道,不透明
  • 颜色值#ff0000也可以使用#f00缩写来表示

对齐

水平对齐

text-align: left | right | center | justify(两端对齐)

垂直对齐

vertical-align: baseline(默认值,基线) | sub(下标) | super(上标) | top(当前这一行的最高点) | text-top(文本的最高点) | middle(居中) | bottom(当前这一行的最低点) | text-bottom(文字的最低点) | <percentage>(相对于行高) | <length>(以baseline为起点,走..px)

缩进

text-indent: <length>|<percentage>(参照物为容器的宽度)

  • 如果text-indent设置一个负的极大值,则里面的文字将跑出容器,达到隐藏文字的目的,该手段也经常用,往往运用场景为:代码中需要,但是界面中不显示
  • 首行缩进2个字可以使用 text-indent:2

空格、换行

white-space: normal | nowrap | pre | pre-wrap | pre-line

  • 单词自动换行 word-wrap: normal | break-word
  • 任意两个字母间自动换行 word-break: normal | keep-all | break-all


    white-space.png

间距

  • word-spacing:30px 英文单词之间的间距
  • letter-spacing:10px 字符和字符之间的间距

变形

text-transfrom:uppercase(大写)\lowercase(小写)\capitalize(首字母大写) 变形

标注

  • text-decoration: none | [ underline || overline || line-through ]
  • underline(下划线) overline(上划线) line-through(中间划线,删除线) blink(闪烁,不是所有浏览器支持) 文字装饰(可组合)

效果

阴影

text-shadow: none | [<length>{2,3} && <color>?] #

  • 1px 2px 表示x、y轴上的偏移
  • 第三个length表示模糊半径
  • 如果文字阴影中的颜色没有设置,那么阴影颜色就是文字颜色
  • 3px 5px 5px rgba(0,255,0,0.5) 给定四个值(可以为为负数),第一个:x方向上距离本体字延伸长度,第二个:y方向上延伸长度 第三个:模糊的范围 第四个:颜色 阴影,可以给定多个阴影实现霓虹灯的效果

文本溢出

文字省略… 样式: text-overflow: clip | ellipsis

  • 示例:三个属性同时使用,第二个表示溢出的时候截断,然后nowrap进行不自动换行
  • text-overflow:ellipsis; overflow: hidden; white-space: nowarp
  • 注意使用overflow时,元素需要为块级元素才能设置宽度,满足溢出效果

光标

cursor : [<uri>,]*(可以自定义图片) [auto | default(普通光标,普通鼠标形状) | none(消失) | help(问号) | pointer(手型) | zoom-in(放大镜) | zoom-out(缩小镜) | move(两边上下的箭头) ]

轮廓

  • outline-color: red 轮廓效果
  • outline-style: solid\doted\dashed\double\groove(三维凹槽)\ridge(三维凸槽)\inset(凹的边)-
    \outset(凸的边) 线型
  • outline-width: thin\10 粗细

强制继承的属性

inherit.png

CSS布局

常见的CSS布局有:水平垂直居中、多列、全屏、响应式等等。这么多布局,我们是不是要一个一个记下来呢?其实万变不离其中,需要搞清楚的是在布局中起作用的css属性的每个特性,然后按照特性来对布局进行分配就能解决一大部分情况了。
在对CSS进行布局时,首先将问题分解,然后考虑每一个特性怎么实现,最后结合整理形成最终的布局。
下面我们对布局中一些常见的问题来进行具体的分析。

基本布局元素

display

块级元素 display:block
常用的块级元素有: div、p、form、header、footer、section、h1~h6、ul等
块级元素的特性:

  • 默认宽度为父元素的宽度(影响元素大小)
  • 可以设置宽高(影响元素大小)
  • 换行显示(影响元素位置)

行内元素display: inline

常用的行内元素有:span、a、label、cite、em等行内元素的特性:

  • 默认宽高为内容宽高(影响元素大小)
  • 不可设置宽高(影响元素大小)
  • 同行显示,可以在行内换行(影响元素位置)

结合块级和行内元素 display:inline-block

常用的inline-block元素有:input、textarea、select、button等
inline-block元素特性:

  • 默认宽高为内容宽高(影响元素大小)
  • 可以设置宽高(影响元素大小)
  • 同行显示(影响元素位置)
  • 整块换行(范围超过边界时,会整个一起换行,不会在行内换行)(影响元素位置)

display:table

指定对象作为块元素级的表格,类同于html标签table

display: table-cell

指定对象作为表格单元格。类同于html标签td

display: none vs visibility:hidden

display: none不删除元素的情况下隐藏或显示元素,不会保留元素本该显示的空间
visibility:hidden: 保留元素本来该显示的空间

position定位

优点:绝对定位脱离文档流,子元素不会对其他元素产生影响
缺点:

  • 需要设置宽度,并进行具体的left设定来水平排列
  • 兼容性问题,有些浏览器需要加私有前缀

static

static 是默认值。任意 position: static; 的元素不会被特殊的定位。一个 static 元素表示它不会被“positioned”,一个 position 属性被设置为其他值的元素表示它会被“positioned”。

relative

  • 元素仍在文档流中
  • 参照物为元素本身,原来的位置还在,别的元素就不能替代这个位置
  • 常用场景:改变z轴上的层级、绝对定位元素的参照物

absolute

  • 默认宽度为内容宽度
  • 脱离文档流
  • 参照物为第一个定位祖先(祖先上需要有定位元素)/根元素

fixed

  • 默认宽度为内容宽度
  • 脱离文档流
  • 参照物为视窗

float浮动

  • 默认宽度为内容宽度
  • 脱离文档流(和position不同,会被边界挡住,不是完全脱离)
  • 向指定的方向一直移动
  • 问题:需要清除浮动

flex

弹性布局,设置或检索弹性盒模型对象的子元素如何分配空间。
这个属性很好用,就是存在兼容性问题。

水平垂直排列

水平排列

实现有三种方式,一种是元素为行内元素,一种是定位布局,另一种是弹性布局。

未完待续~~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容

  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    wzhiq896阅读 1,731评论 0 2
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 2,303评论 0 11
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,728评论 1 92
  • 学习CSS的最佳网站没有之一 http://www.w3school.com.cn/tags/index.asp ...
    Amyyy_阅读 1,029评论 0 1
  • 1. 有一位老教师,她的学生向她借钱,只要他们开口,说出理由,通常她就会选择相信,借给他们。为什么她会随便把钱借给...
    欣公子阅读 900评论 5 12