css复习知识点

232 阅读10分钟

1. 清除浮动方法

首先明确:清除浮动是指清除由于子元素浮动带来父元素高度塌陷的影响。

  1. 添加一个空div,利用css提高的clear:both清除浮动,让父级div能自动获取到高度
  2. 原理同1。利用:after伪类达到加入一个空标签 清除浮动的原理
  3. 父级div手动定义height,就解决了父级div无法自动获取到高度的问题
  4. 父级div定义overflow:hidden/auto。原理:在使用overflow:hidden/auto时,浏览器会自动检查浮动区域的高度
  5. 父级div也一起浮动。
  6. 父级div定义display:table
```
//以下就是一个由于浮动引起的高度塌陷。
<style type="text/css"> 
.div1{background:#fff;border:1px solid yellow;/*清除浮动代码 width:98%;overflow:hidden;*/}
.div2{background:#800080;border:1px solid red;height:100px;margin-top:30px}

.left{float:left;width:20%;height:200px;background:#DDD}
.right{float:right;width:30%;height:80px;background:#DDD}

/*清除浮动代码1*/
/* .clearfloat{clear:both;} */
/*清除浮动代码2*/
    /*.div1:after{
        content: "";
        display: block;
        height: 0;
        clear:both;
        visibility: hidden;
    }
    div1{//兼容低版本IEzoom:1}
    */
    /*清除浮动代码3*/
    .div1:after,.div1:before{
        content:'';
        display:block;
        clear:both;
        visibility: hidden;
    }
    .div1{
        zoom:1;//兼容低版本IE
    }
</style> 
<div class="div1"> 
    <div class="left">Left</div> 
    <div class="right">Right</div>
    <div class="clearfloat"></div>
</div>
<div class="div2">
div2
</div>
```

2. position 定位问题

  • 默认(static)正常文档流。设置left,right,bottom,top,z-index这些属性都是没有效果的

  • 相对定位(relative)正常文档流

    1. 相对于它在文档流中的位置的起始点进行移动。
    2. 就算元素被偏移了,但是他仍然占据着它没偏移前的空间
    3. 通过z-index去区分层级。
  • 绝对定位(absolute) 脱离文档流

    1. 相对于设置了除static定位之外的定位属性的第一个祖先元素,如果所有的祖先元素都没有以上三种定位中的其中一种定位,那么它就会相对于文档body来定位 <可以说是一直找父级元素>
    2. 通过z-index去区分层级。
    3. 不在文档流中占据空间
    4. 行内元素绝对定位之后将具有行内块元素的特征。
    5. 绝对定位的优先级别大于浮动。!!!
  • 固定定位(fixed)脱离文档流

    1. 相对于浏览器窗口定位,并且不会随着滚动条进行滚动。
    2. 通过z-index去区分层级。
    3. 不在文档流中占据空间

    在设置了相对定位时也会让元素浮起来,但它们的不同点在于,相对定位不会删除它本身在文档流中占据的空间,其他元素不可以占据该空间,而绝对定位则会删除掉该元素在文档流中的位置,使其完全从文档流中抽了出来,其他元素可以占据其空间。

3. CSS行内元素、行内块元素和块级元素

  • 行内元素:span,a,br,img(可以设置宽高),
    1. 由内容撑开宽高
    2. 可以和其他元素保持一行
    3. 不能设置宽/高/上下外边距,可设置margin-left和right.高度等于行高
  • 块级元素:div
    1. 默认元素宽度和父元素保持一致,独占一行
    2. 可以设置所有属性(宽、高、外边距)
  • 行内块元素:display: inline-block; input
    1. 不设置宽带时,元素宽度和元素内容宽度保持一致
    2. 可以和其他元素保持一行
    3. 可以设置所有属性(宽、高、外边距)
  • 可变元素: 根据上下文语境决定该元素为块元素或者内联元素。例如:button,map
    1. 不自动换行
    2. 能够识别宽高
    3. 默认排列方式为从左到右1

    《CSS权威指南》中文字显示:任何不是块级元素的可见元素都是内联元素。其表现的特性是“行布局”形式,这里的“行布局”的意思就是说其表现形式始终以行进行显示。比如,我们设定一个内联元素border-bottom:1px solid #000;时其表现是以每行进行重复,每一行下方都会有一条黑色的细线。如果是块级元素那么所显示的的黑线只会在块的下方出现。

4. 边框 border

  • border-radius: 50px 50px 50px 50px / 50px 50px 50px 50px; “/”前的四个数值表示圆角的水平半径,后面四个值表示圆角的垂直半径

  • box-shadow 对象选择器 {box-shadow:投影方式 X轴偏移量 Y轴偏移量 阴影模糊半径 阴影扩展半径 阴影颜色}

    标签 意义
    阴影类型 此参数是一个可选值,如果不设值,其默认的投影方式是外阴影;如果取其唯一值“inset”,就是将外阴影变成内阴影,也就是说设置阴影类型为“inset”时,其投影就是内阴影;
    X-offset 是指阴影水平偏移量其值可以是正负值可以取正负值,如果值为正值,则阴影在对象的右边,反之其值为负值时,阴影在对象的左边;
    Y-offset 是指阴影的垂直偏移量,其值也可以是正负值,如果为正值,阴影在对象的底部,反之其值为负值时,阴影在对象的顶部;
    阴影模糊半径 此参数是可选,,但其值只能是为正值,如果其值为0时,表示阴影不具有模糊效果,其值越大阴影的边缘就越模糊;
    阴影扩展半径 此参数可选,其值可以是正负值,如果值为正,则整个阴影都延展扩大,反之值为负值是,则缩小
    阴影颜色 此参数可选,如果不设定任何颜色时,浏览器会取默认色,但各浏览器默认色不一样,特别是在webkit内核下的safari和chrome浏览器将无色,也就是透明,建议不要省略此参数。

5. 文本换行

  1. CJK: 中日韩统一表意文字。他们是单独的换行规则。和英文数字不同。以下统一用中文代替。
  2. overflow-wrap(W3C版本的)和 word-wrap(牛逼的微软造的) 是一个东西,最好使用word-wrap

word-break属性|意义
-|-
normal    | 默认规则
break-all | 非中文则在任意字符处折行
keep-all  | 中文不断行,英文数字保持原本
word-wrap属性 意义
normal 默认规则
break-word 单词断开
white-space属性 意义
normal 默认。空白会被浏览器忽略。
nowrap 文本不会换行,文本会在在同一行上继续,直到遇到 br 标签为止。
... 还有一些属性 不做记录了。。。

不换行超出部分打点:

white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;

6. 水平垂直居中的三种比较好的方法

  1. 绝对定位 50% 然后再向左 上调整自身宽高一半
div{
    background:red;
    position: absolute;
    left:50%;
    top:50%;
    transform: translate(-50%, -50%);
    //或者是偏移自身宽高的一半
    margin-left:-300px;
    margin-top:-300px;
}
  1. 绝对定位下top left right bottom 都设置0 margin为auto 原理:绝对定位的布局取决于三个因素,一个是元素的位置,一个是元素的尺寸,一个是元素的margin值。而没有设置尺寸和 margin 的元素会自适应剩余空间,位置固定则分配尺寸,尺寸固定边会分配 margin,都是自适应的。
.centerBox{
    width: 200px;
    height: 200px;
    background:red;
    position: absolute;
    left:0;
    top:0;
    right: 0;
    bottom: 0;
    margin: auto;
}
  1. flex 水平垂直都居中
.box{
   height:800px;
   display:flex;
   align-items:center;
   justify-content:center;
   border:1px solid #ccc;
}

7. flex布局详细解析

  1. Flex是Flexible Box的缩写,就是“弹性布局”,用来为盒装模型提供最大的灵活性。
  2. flex适用于任何容器。需要注意的是,设为flex布局以后,子元素的float、clear和vertical-align属性将失效!!!
// display:inline-flex;
// display:flex;
  1. 用Flex布局的元素,称为Flex容器(flex container),简称“容器”。它的所有子元素自动成为容器成员,成为flex项目(flex item),简称“项目”。 容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)
  2. 容器属性:

.box{
    // 主轴方向  → | ← | ↓ | ↑ 
    flex-direction:row | row-reverse |  column | column-reverse; 

    // 主轴线排列不下: 不换行 |  正常换行 | 往上面换行(第一行在下,第二行在上)
    flex-wrap: nowrap | wrap | wrap-reverse;

    // flex-direction属性和flex-wrap属性的简写形式 上面俩玩意的简写。
    flex-flow: <flex-direction> || <flex-wrap>;

    //主轴对齐方式:左对齐 | 右对齐 | 向中心对齐 | 两侧对齐 | 每个项目两侧的间隔相等,所以,项目之间的间隔比项目与边框的间隔大一倍。
    justify-content:flex-start | flex-end | center | space-between |space-around;

    //交叉轴对齐方式:上对齐 | 下对其 | 中间对齐 | 项目的第一行文字的基线(小写字母x的下沿)对齐 | 项目未设置高度或设为auto,将占满整个容器的高度
    align-items:flex-start | flex-end | center |baseline | stretch;
}
  1. 项目item属性
.item{

    //自定义该项目位置。默认为0,数字越小越靠前排列。
    order: <number>;/* default 1 */

    //自定义该项目放大比例,默认值为0,即如果存在剩余空间,也不放大。
    // 如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目为1,则牵着占据的剩余空间将比其他项多一倍
    flex-grow: <number>;/* default 1 */

    //自定义了项目的缩小比例,默认为1,即如果空间不足,改项目将缩小。
    如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。 负值无效!!!
     flex-shrink:<number>;/* default 1 */

    // 定义了在分配多余空间之前,item占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即item本来宽度。
    flex-basis:<length> | auto ; /*default auto*/

    //flex属性是flex-grow,flex-shrink和flex-basis的简写,默认值为0 1 auto。后面两个属性可选
    flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
    快捷方式: auto(1 1 auto)和 none(0 0 auto)

    //align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,等同于stretch。
    //自定义某个item的对齐方式
    align-self: auto | flex-start | flex-end | center | baseline | stretch;
}
  1. transform变形
// 旋转 | 缩放 | 扭曲 | 移动 | 矩阵变形 
ransform: rotate(30deg) | scale(x,y) | skew(30deg,10deg) | translate |matrix;
rotate 正数顺时针
scale x,y分别为水平垂直方向缩放的倍数。1是不变。
skew  水平/垂直方向扭曲角度
matrix 含六值的(a,b,c,d,e,f)变换矩阵


transform-origin 设置元素的运动的基点(参照点)。默认是元素的中心点。

8. 盒模型

标准盒子模型:width/height是指内容宽高

占用宽高 = width/content + padding*2 + border*2

IE盒子模型:width/height是指实际占用的宽高

占用宽高 = width = content + padding*2 + border*2