[摘录总结]CSS-基础

217 阅读5分钟

box-sizing

设置盒模型的属性
content-box:标准盒模型,宽高仅包括 content
border-box:IE 盒模型,宽高包括 content+padding+border

display

block 块级
inline 行内
inline-block 行内块
table	块级表格,不建议使用
list-item	列表块级,未使用过
flex	弹性盒,非常强大
none	从文档流消失
inherit	继承

inline-block 元素间会有空白

inline-block的元素间有空格、换行,制表符时,浏览器会渲染出一个空格。解决:
1.元素写在一行,但是不美观;
2.将元素的父元素 font-size 设为 0,再复原子元素的样式,但是 Safari 浏览器不行,且麻烦;
3.设置负的 margin 值,但边缘元素有影响;
4.letter-spacingletter-spacing 负值,较为完美

flex 布局

flex 布局是比浮动实现布局更好一些的方案,可以查看阮一峰老师的文章,讲解得很好,这里就试着简单描述下:
弹性盒,需要理解轴和容器:
  首先,轴为主轴和交叉轴,通过 flex-direction 修改。
  其次,容器也分父容器和子容器:
  	父容器
    	通过 justify-contentalign-items 控制主轴和交叉轴的对齐方式;
        通过 flex-wrap 控制换行
    子容器
    	通过 flex 定义主轴上的伸缩
        通过 align-self 设置交叉轴排列

position

static 默认值
relative 相对定位
absolute 绝对定位
fixed 固定定位
sticky 粘性定位
inherit 继承

定位原点

relative 相对于自身在文本流中位置 content box 定位;
absolute 相对于第一个 position 值不为 static 的祖先元素的 padding box 定位;
fixed 相对于浏览器窗口
sticky 基于用户滚动位置

选择器

ID选择器
类选择器
伪类选择器
元素选择器
伪元素选择器
标签选择器
属性选择器
后代选择器
子代选择器
兄弟选择器
相邻兄弟选择器
通配符选择器

优先级计算

首先查看权重 !important,优先级最高,出现重复权重,继续匹配;
接着行内样式,特殊值 1000
再接着 id 选择器,特殊值 0100
然后类选择器,伪类选择器和属性选择器,特殊值 0010
再然后元素选择器和伪类选择器,特殊值 0001
最后通配符最低,规则相加不进位,按高者算,相等则后来居上

伪类选择器和伪元素选择器的区别

相同:二者都是格式化文档树之外的信息
区别:伪类是修饰已有元素处于某个状态的样式,伪元素创建元素,并添加样式
	伪类通常使用单冒号,伪元素通常使用双冒号,但为了兼容老浏览器,也会使用单冒号表示为元素,如 :before

LVHA

a 标签的四种状态
	link:链接访问前
    visited:链接访问后
    hover:鼠标滑过
    active:激活
其中, link 可与 visited 交换位置

a 标签点击后hover事件失效

a 标签的 hover 和 actived 交换位置

新增伪类

e:nth-child(n)
e:first-child
e:nth-of-type(n)
e:empty
:not(e)
:enabled
:disabled
:checked

浏览器如何解析 css 选择器

从关键选择器开始,逐渐左移,查找选择器祖先元素,直到找完,或者不匹配
因此,避免层级过深,并设置好关键选择器

BFC

块级格式化上下文,这类元素的内部元素布局不会影响到外部元素,外部元素布局也不会影响内部元素。如同隔离区域。
形成条件:
	根元素
    浮动元素 floatleft|right或inherit(≠none)
    绝对定位元素 position=absolute或fixed
    有块级特性的元素 display=inline-block|flex|inline-flex|table-cell或table-caption
    溢出处理的元素 overflow=hidden|auto或scroll(≠visible)

浮动

产生原因是希望页面中的图片悬浮,文字围绕,后用于布局;
设置:float: left|right
特点是:
	浮动元素左右移动,直到遇见另一个浮动元素或其外边缘的包含框
    浮动元素脱离文档流
    会产生高度塌陷,影响后面页面的布局

清除浮动

使用 clear

原理
clear 官方解释为:元素盒子的边不能和前面的浮动元素相邻,所以 clear 是避免浮动元素对其他元素的影响,而不是消除浮动
方案
添加空元素:
	设置 clear:both,不建议使用,添加了冗余元素
伪元素:
  .clearfix:after{/*伪元素是行内元素 正常浏览器清除浮动方法*/
      content: "";
      display: block; // 伪元素为内联,需要设置为块级才能使 clear 生效
      height: 0;
      clear:both;
      visibility: hidden;
  }
  .clearfix{
      *zoom: 1;/*ie6清除浮动的方式 *号只有IE6-IE7执行,其他浏览器不执行*/
  }
双伪元素:
	.clearfix:after,.clearfix:before{
        content: "";
        display: table;
    }
    .clearfix:after{
        clear: both;
    }
    .clearfix{
        *zoom: 1;
    }
zoom:1 与 hasLayout
zoom:1,是针对 IE 低版本浏览器,解决 ie 下元素浮动父元素不会自动扩大的问题。
将其设置为 1,触发 IE 特殊属性 hasLayout,当元素的 hasLayout 设置为 true 时,该元素自己负责自己和子孙元素的尺寸计算和定位,虽然需要花费代价,但能够解决 IE 浏览器的浮动问题。 	  

设置 BFC

方案:设置父元素 overflow: hidden;
原理:形成 BFC 的元素,内部元素布局不会影响外部元素,也就避免了内部的浮动对外部的影响。
缺点:内容溢出会被剪裁

动画

transition:关注的是 css property 的变化
animation:作用于元素本身,采用关键帧

手写动画的最小事件间隔

显示默认频率 60Hz,所以最小间隔 1/60*1000ms=16.7ms

全屏滚动

类似于轮播,整体元素一直排列下去,展示整体一部分,overflow:hidden 溢出部分隐藏,响应鼠标事件,修改展示部分 tansition: all 1000ms ease

视觉滚动

多层背景以不同的速度移动,形成立体的运动效果

摘自 CavsZhouyou