前端-基础学习-01

176 阅读6分钟

1:水平垂直居中的实现方式

<div class="div1">
    <div class="div2">11</div>
<div>

// 不定宽

(1)flex 现在基本都是flex了

.div1{
    width: 100%;
    height: 100vh;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
}

(2)absolute + transfrom

.div1 {
  width: 100%;
  height: 100vh;
  position: relative;
}
.div2 {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%,-50%);
}

(3) table表格

.div1 {
  width: 100vw;
  height: 100vh;
  display: table-cell;
  vertical-align: middle;
  text-align: center;
}
.div2 {
  display: inline-block;
}

(4)grid布局

.div1 {
  width: 100vw;
  height: 100vh;
  display: grid;
}
.div2 {
  justify-self: center;
  align-self: center;
}

// 定宽

(1) absolute + margin auto

.div1 {
  width: 100%;
  height: 100vh;
  position: relative;
}
.div2 {
  width: 50px;
  height: 50px;
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  margin: auto;
}

(2) absolute + 负的margin

.div1 {
  width: 100vw;
  height: 100vh;
  position: relative;
}
.div2 {
  width: 200px;
  height: 200px;
  position: absolute;
  top: 50%;
  left: 50%;
  margin-top: -100px;
  margin-left: -100px;
}

(3) absolute + calc

.div1 {
  width: 100vw;
  height: 100vh;
  position: relative;
}
.div2 {
  width: 200px;
  height: 200px;
  position: absolute;
  top: calc(50% - 100px);
  left: calc(50% - 100px);
}

2:position有哪些属性,具体讲讲

inherit: 继承父元素的。

static:默认值,不设置就是这个,不定位,此时设置偏移值没用

relative: 相对正常位置定位,可以设偏移值了。

absolute: 相对非static的父级元素定位。

// 同一个dom下的多个absolute重叠的话,后面的在前面 // fixed在absulute上面

3: margin百分比设置是根据那个属性为基准的。

父级元素的宽度

4: float布局(左中右及其变体)

(1):文字环绕效果(float设计出来的主要作用)

<div class="div1">
    <img src="./test.PNG" alt="图片" class="div2"></img>
    <div class="div3">2222222222</div>
</div>
.div1 {
  width: 100vw;
  height: 100vh;
  position: relative;
}

.div2 {
  width: 200px;
  height: 200px;
  object-fit: cover;
  float: left;
}

.div3 {
  word-break: break-all;
  background-color: red;
}

(2)左右固定,中间自适应(圣杯)

<div class="content">
    <div class="div1">固定宽度</div>
    <div class="div2">自适应</div>
    <div class="div3">固定宽度</div>
</div>
.content {
    padding: 0 50px;
    height: 100px;
    overflow: hidden;
    height: 100vh;
}
.div1,.div2,.div3 {
    float: left;
    position: relative;
    padding-bottom: 1000px;
    margin-bottom: -1000px;
}
.div1 {
    width: 50px;
    margin-left: -50px;
    background: red;
}
.div2 {
    width: 100%;
    background: blue;
}
.div3 {
    width: 50px;
    /* 理解这里是相对于父元素的宽度,可以看看不加right的效果 */
    margin-left: -100%;
    right: -100%;
    background: green;
}

(3)左右固定,中间自适应(双飞翼)

<div class="content">
    <div class="div2">
        <div class="div4">双飞翼自适应</div>
    </div>
    <div class="div1">固定宽度</div>
    <div class="div3">固定宽度</div>
</div>
.content {
    height: 100px;
    position: relative;
    overflow: hidden;
}
.div1,.div2,.div3 {
    float: left;
    padding-bottom: 1000px;
    margin-bottom: -1000px;
}
.div1 {
    width: 50px;
    margin-left: -100%;
}
.div2 {
    width: 100%;
}
.div3 {
    width: 50px;
    margin-left: -50px;
}
.div4 {
    margin: 0 50px;
}

圣杯和双飞翼的异同点:都是通过浮动来实现左右固定中间自适应的布局。圣杯是直接在外面设置padding预留左右位置。而双飞翼是中间元素再去空出左右的位置。

(4)左右浮动,中间不浮动实现左中右

//利用浮动元素不占据位置,先把左右浮动的元素写好,再写入中间的元素,加上padding即可。一定要先写浮动的元素

<div class="content">
    <div class="div1">固定宽度</div>
    <div class="div3">固定宽度</div>
    <div class="div2">自适应</div>
</div>
.content {
    height: 100px;
    overflow: hidden;
}
.div1,.div2,.div3 {
    padding-bottom: 1000px;
    margin-bottom: -1000px;
}
.div1 {
    width: 50px;
    float: left;
}
.div2 {
    width: 100%;
    padding-left: 50px;
    padding-right: 50px;
}
.div3 {
    width: 50px;
    float: right;
}

(5)扩展,定位方式实现左中右

<div class="content">
    <div class="div1">固定宽度</div>
    <div class="div2">自适应</div>
    <div class="div3">固定宽度</div>
</div>
.content {
    height: 100px;
    position: relative;
    overflow: hidden;
}
.div1,.div2,.div3 {
    padding-bottom: 1000px;
    margin-bottom: -1000px;
}
.div1 {
    width: 50px;
    position: absolute;
    top: 0;
    left: 0;
}
.div2 {
    /* width: 100%; */
    padding-left: 50px;
    padding-right: 50px;
}
.div3 {
    width: 50px;
    position: absolute;
    right: 0;
    top: 0;
}

5:flex属性详解

flex容器的属性

1)flex-direction

决定主轴方向,值有

  • row 横向左边开始(默认)
  • row-reverse 横向从右边开始
  • column 纵向从上面开始
  • column-reverse纵向从下面开始 2)flex-wrap

决定主轴超出是否换行,值有

  • nowrap 超出不换行(默认)
  • wrap 换行
  • wrap-reverse 换行,但是第一行在下面,注意和row-reverse不一样。

3)flex-flow上面flex-direction和flex-warp的简写形式,默认值为row nowrap

  1. justify-content

定义主轴上的对其方式,常用值为center和space-between

  • flex-start 左对齐(默认)
  • center 居中
  • space-between 两边对齐,左右顶边不留空
  • space-around 每个项目左右间隔相等,结果是项目之间的间隔比边框的大一倍
  • flex-end 右对其

5)align-items假设交叉轴为从上到下

定义交叉轴的对其方式,常用值为center和space-between

  • flex-start 上对齐(默认)
  • flex-end 下对齐
  • center 居中对齐
  • baseline 第一行文字的基线对其。 // 第一个dom设置了padding,后面的会下移保证文字对其 1.jpg
  • stretch(默认)如果没有设置高度,高度将为容器高度

6)align-content 注意如果只有多行该属性才有用(以上下为交叉轴为例) // 个人觉得是为了提供和主轴一样的space-between和space-around样式

  • flex-start 和交叉轴的起点对齐
  • flex-end 和交叉轴的终点对齐
  • center 与交叉轴的中间对齐
  • space-between 与交叉轴两端对其,中间平均
  • space-around 每个项目上下间隔相等,结果是项目之间的间隔比边框的大一倍
  • stretch (默认)轴线占满交叉轴

flex子元素的属性

1)order 定义项目的排列顺序(这个属性之前还真不知道) 可以改变元素的排列顺序,一般我们结构都写好了,也不会用这个去改。属性值为数字类型,数值越小越靠前

2)flex-grow 项目的放大比例(默认为0)

属性为数值类型的,一般为0or1,0表示不放大,其他的表示放大,占据的大小和数值的大小成比例。

3)flex-shrink 项目的缩小比例,空间不足将缩小(默认为1)

属性值和flex-grow一样,0表示不缩小,1表示缩小。注意项目的内容不要被撑开,不然不会缩小。

4)flex-basis 定义为在分配多余空间之前,项目主轴占据的空间(默认为auto)

属性可以像宽高一样设置,例如100px,则项目初始占100px。设为auto则为默认大小。 取完这个属性值之后,在计算对应的放大缩小后大小。

5)flex 该值为flex-grow,flex-shrink,flex-basis的缩写。(默认为0,1,auto)

6)align-self 覆盖父级元素的align-items属性,默认为auto表示继承父级。属性值和align-items一样。