html+css知识点

265 阅读5分钟

html+css

1.行内元素,块元素,内行块元素的区别

  • 行内元素:span、em、a、i、p
    • 不能设置宽度
    • 设置上下margin无效
    • 与其他行内元素并排,默认从左到右依次排列,默认不折行
  • 块元素:div、ul、li、h1-h5、header、footer
    • 可以设置宽高
    • 默认独占一行
    • 默认从上到下排列
  • 内联块:设置display: inline-block;
    • 能够识别宽高
    • 不自动换行
    • 默认排列方式为从左到右

2.高度塌陷问题及解决方式

高度塌陷:父元素不定高,子元素设置浮动,则父元素高度为0

原因:父原色的高度由子元素的高度撑开,一但子元素设置浮动,会脱离文档流,父元素的高度为0

解决:

(1)设置父元素的高度(不推荐)

(2)设置BFC,例如给父元素添加overflow:hidden

3.BFC、IFC的理解及使用场景

BFC:块级格式化上下文

BFC的形成:

  • 跟元素html标签就是一个bfc;
  • float的值不为none
  • overflow的值不为visible
  • position的值为absolute或fixed
  • display的值为inline-block/flex/inline-flex/table-cell/table-caption

BFC的特性:

  • box垂直方向的上距离由margin决定,属于同一个BFC的相邻两个box的margin会发生重叠
  • 计算BFC的高度时浮动元素参与计算
  • BFC的区域不会与float box发生重叠
  • BFC内部box会在垂直方向顺序放置
  • BFC是一个页面上的独立容器,容器中的元素不会影响到外面的元素

使用场景

  • 解决box垂直距离margin发生重叠:可以为下面盒子添加父元素,为父元素添加overflow:hidden(bfc内部会有margin重叠,为下盒子添加bfc,形成新的bfc)
  • 父元素高度塌陷:设置父元素overflow:hidden(BFC中浮动元素参数高度计算)
  • 自适应两栏(左侧盒子浮动,右侧自适应盒子overflow:hidden)、自适应三栏布局

IFC:行内格式化上下文

IFC的形成:块级元素中仅包含内联级别元素

IFC的特性:

  • 子元素水平方向横向排列,并且垂直方向起点为元素顶部。
  • 子元素只会计算横向样式空间,垂直方向样式空间不会被计算(即设置上下margin不起作用)
  • 在垂直方向上,子元素会以不同形式来对齐(vertical-align)

应用场景:

  • 文字,图片垂直水平居中:水平居中(图片外部父元素text-align:center);垂直居中(图片外部父元素line-height和height相等)

参考文章:segmentfault.com/a/119000001…

4. flex布局

容器属性

  • flex-direction:(设置主轴方向)row | row-reverse | column | column-reverse
  • flex-wrap:(如何换行) nowrap | wrap | wrap-reverse
  • flex-flow:(以上两个简写,默认是row nowrap)
  • justify-content:(项目在主轴上的对齐方式) flex-start | flex-end | center | space-between | space-around;
  • align-items:(项目在交叉轴上的对齐方式)flex-start | flex-end | center | baseline | stretch;
  • align-content:(多根轴线的对齐方)flex-start | flex-end | center | space-between | space-around | stretch;

项目属性

  • flex-grow:(放大比例) 默认是0,有空间也不放大
  • flex-shrink:(缩小比例)默认是1,空间不足会缩小
  • flex-basis:(项目将占据固定空间)默认是auto,即项目的本来大小;可以设置具体值
  • flex:(以上3项的缩写) auto (1 1 auto) | none (0 0 auto)。

常用场景:

  • 三栏布局:(⚠️使用flex:1,即flex-grow:1是实现自适应的关键)
 <div class="wrap" style="display: flex">
    <div class="left" style="flex:0 0 300px;background:red"></div>
    <div class="content" style="flex:1;background:yellow">自适应内容区域</div>
    <div class="right" style="flex:0 0 300px;background:blue"></div>
</div>
  • 固定的底栏(内容不满一页,固定底栏)
 <div class="wrap" style="display: flex;flex-direction: column;height: 100vh;">
    <div class="header" style="height:100px;background:red"></div>
    <div class="content" style="flex:1;background:yellow">12345678</div>
    <div class="footer" style="height:100px;background:blue"></div>
</div>

参考文章:www.ruanyifeng.com/blog/2015/0…

5. 水平垂直局中实现

  • 图片、文字实现垂直居中(注意text-align设置的是父元素)
.parent{
    text-align:center;
    line-height:100px;
    height:100px;
}
  • 块级元素实现垂直居中
方法一:
.parent{
    position:relative;
}
.children{
    position:absolute;
    top:50%;
    left:50%;
    margin-left:-50px;(自身宽度的一半)
    margin-top:-50px;(自身宽度的一半)
}
方法二:
.parent{
    position:relative;
}
.children{
    position:absolute;
    top:50%;
    left:50%;
    transform:translate(-50%,-50%)
}
方法三:
.parent{
    position:relative;
}
.children{
    pisition:absolut;
    top:0;
    bottom:0;
    left:0;
    right:0;
    margin:auto;
}
方法四️:
.parent{
    position:flex;
    justify-content:center;
    align-items:center
}

6.em和rem区别

同:em和rem一样都是一个相对的长度单位

异:rem是相对与根元素html而言,em是相对于他的父元素的font-size大小

7.移动端的rem适配

  • vw+rem

    先设置meta标签,设置视口大小不可缩放,

    再设置html的font-size为13.333vw,原因如下:

    750px = 100vw

    1px = 0.133333vw

    100px =13.3333vw

    如果设置html的font-size为13.3333vw,即1rem = 13.3333vw = 100px,如果需要一个宽度200px的元素,那他的宽度为2rem

  • 通过js动态设置当前的html的font-size

参考文章 blog.csdn.net/weixin_3960…

参考文章 blog.csdn.net/lihefei_cod…

8. 1像素边框问题

viewport + rem + js 动态的修改页面的缩放比例,实现小于1像素的显示

参考文章 www.jianshu.com/p/31f890763…

9.css盒模型

  • 普通盒模型:box-sizing:content-box (width=内容宽度,height=内容高度)
  • 怪异盒模型(IE盒模型):box-sizing:border-box

width=内容width+左右padding+左右border+左右margin

height=内容height+上下padding+上下border+上下margin

10.Dom事件

  • dom事件模型:捕获--》目标事件--》冒泡
  • dom捕获的具体流程: window--document--html--body--父元素--目标元素

11.DOM的操作(增删改查)

  • createElement(创建元素)
  • insertBefore(插入前面)
  • removeChild(删除子元素)
  • replaceChild(替换)