圣杯布局(三栏布局)

CSS相关 - 图1

flex实现

  1. <div class="left"></div>
  2. <div class="main"></div>
  3. <div class="right"></div>
  1. .container {
  2. display: flex;
  3. }
  4. .left {
  5. width: 200px;
  6. }
  7. .middle {
  8. flex: 1;
  9. }
  10. .right {
  11. width: 220px;
  12. }

float实现

核心是重要的内容先加载。main在前,left和right在后。

  1. <div class="container">
  2. <div class="main"></div>
  3. <div class="left"></div>
  4. <div class="right"></div>
  5. </div>
  1. .container {
  2. padding:0 220px 0 200px;
  3. overflow: hidden;
  4. }
  5. .left, .middle, .right {
  6. position: relative;
  7. float: left;
  8. min-height: 130px;
  9. }
  10. .middle {
  11. width: 100%;
  12. }
  13. .left {
  14. margin-left: -100%;
  15. left: -200px;
  16. width: 200px;
  17. }
  18. .right {
  19. margin-left: -220px;
  20. right: -220px;
  21. width: 220px;
  22. }

BFC

什么是BFC:全称 Block Formatting Context 即块级格式化上下文。
BFC的一个最重要的效果是,让处于BFC内部的元素与外部的元素相互隔离,使内外元素的定位不会相互影响。这是利用BFC清除浮动所利用的特性。
其实BFC里面,就类似于HTML根部的文档流布局。HTML根部文档流就是一个BFC。

应用场景

  1. 清除浮动:内部有元素浮动,可以防止高度塌陷,在计算块元素高度时会包含浮动的元素。
  2. 避免某元素被浮动元素覆盖:BFC的区域不会与浮动元素的区域重叠
  3. 阻止外边距重叠:属于同一个BFC的两个相邻Box的margin会发生折叠,不同BFC不会发生折叠

CSS相关 - 图2

BFC的创建方法

  • float: left / right
  • display: inline-block / table-cell / table-caption
  • position: absolute / fixed
  • overflow: hidden / auto / scroll

image.pngimage.png

清除浮动(子父)

发生在子父元素中,由于子元素浮动所导致的父元素高度塌陷,若要阻止父元素塌陷,则需清除浮动。

  1. BFC的相关方法
  2. 添加额外标签,应用clear: both
  3. 添加伪元素,应用clear: both

    水平垂直居中(子绝父相,flex)

    涉及到父子定位,记住口诀:子绝父相

    父子宽高固定值

    计算距离margin-top和margin-left让子元素在中间。
    父元素:
    1. {
    2. width:500px;
    3. height:500px;
    4. position:relative;
    5. }
    子元素:
    1. {
    2. width:200px;
    3. height:200px;
    4. position:absolute;
    5. margin-top:150px;
    6. margin-left:150px
    7. }

    父宽高不固定,子宽高固定

    父元素:
    1. {
    2. position:relative;
    3. }
    子元素:
    1. {
    2. width:200px;
    3. height:200px;
    4. position:absolute;
    5. top:50%;
    6. left:50%;
    7. margin-top:-100px;
    8. margin-left:-100px;
    9. }

    父宽高不固定,子宽高不固定

    方法1:

    父元素:
    1. {
    2. width:50vw;
    3. height:50vh;
    4. position:relative;
    5. }
    子元素:
    1. {
    2. width:50%;
    3. height:50%;
    4. position:absolute;
    5. top:50%;
    6. left:50%;
    7. transform: translate(-50%,-50%);
    8. }

    方法2:flex布局

    父元素:
    1. {
    2. width:50vw;
    3. height:50vh;
    4. display:flex;
    5. align-items:center;
    6. justify-content:center;
    7. }
    子元素:
    1. {
    2. width:20vw;
    3. height:30vh;
    4. }

    方法3:flex + 子元素margin: auto

    父元素:
    1. {
    2. width:50vw;
    3. height:50vh;
    4. display:flex;
    5. }
    子元素:
    1. {
    2. width:20vw;
    3. height:30vh;
    4. margin:auto;
    5. }

方法4:相对定位绝对定位

父元素:

  1. {
  2. width:50vw;
  3. height:50vh;
  4. position:relative;
  5. }

子元素:

  1. {
  2. width:20vw;
  3. height:30vh;
  4. position:absolute;
  5. top, left, right, bottom:0;
  6. margin:auto;
  7. }

设置文字居中

块状元素(display:block)

  • margin: 0 auto
  • 利用绝对定位,让元素向右偏移50%,然后再向左偏移自身的50%(其实就是垂直居中的分解):

    1. {
    2. position:absolute;
    3. left:50%;
    4. transform:translateX(-50%);
    5. }
  • 利用flex:

    • 方法1:父元素:

      1. {
      2. display:flex;
      3. justify-content:center;
      4. }
    • 方法2:父元素:

      1. {
      2. display:flex;
      3. }
    • 子元素:

      1. {
      2. margin:0 auto;
      3. }

行内元素(display:inline)水平居中

  1. {
  2. text-align:center
  3. }

文字水平、垂直居中

块级元素中的文字初始都在左上角。

  1. .div{
  2. height:60rpx; // 规定了块级元素的高
  3. line-height: 60rpx; // 设置垂直居中 (纵轴居中)
  4. text-align: center; // 设置水平居中 (横轴居中)
  5. }

三角形

  1. <style>
  2. .triangle-top {
  3. width: 0;
  4. height: 0;
  5. border-style: solid;
  6. border-width: 0 40px 40px 40px;
  7. border-color: transparent transparent red;
  8. }
  9. .triangle-bottom {
  10. width: 0;
  11. height: 0;
  12. border-style: solid;
  13. border-width: 40px 40px 0 40px;
  14. border-color: blueviolet transparent transparent transparent;
  15. }
  16. .triangle-left {
  17. width: 0;
  18. height: 0;
  19. border-style: solid;
  20. border-width: 40px 0 40px 40px;
  21. border-color: transparent transparent transparent #89ff56;
  22. }
  23. .triangle-right {
  24. width: 0;
  25. height: 0;
  26. border-style: solid;
  27. border-width: 40px 40px 40px 0;
  28. border-color: transparent yellowgreen transparent;
  29. }
  30. </style>

CSS动画

参看资料:2019年了,你还不会CSS动画? CSS动画思维导图:在百度脑图中

如何实现一个轮播图

  1. 设置所有的图片为display:none
  2. 设置一个index用来标记获取到的图片
  3. 设置一个定时器,每个一段时间令index自增并将对应的图片的display属性改为block
    1. var index = 0;
    2. //改变图片
    3. function ChangeImg() {
    4. index++;
    5. var a = document.getElementsByClassName("img-slide");
    6. if (index >= a.length) index = 0;
    7. for (var i = 0; i < a.length; i++) {
    8. a[i].style.display = 'none';
    9. }
    10. a[index].style.display = 'block';
    11. }
    12. //设置定时器,每隔两秒切换一张图片
    13. setInterval(ChangeImg, 2000);

    perspective 属性

    W3C

设置元素被查看位置的视图;目前浏览器都不支持;chrome用-wekit-perspective来代替。定义 3D 元素距视图的距离,以像素计。当为元素定义 perspective 属性时,其子元素会获得透视效果,而不是元素本身。

文字、内容限制为指定的行数 | 截断

MDN文档

  1. .box{
  2. display: -webkit-box;
  3. -webkit-box-orient: vertical;
  4. overflow: hidden;
  5. -webkit-line-clamp: 3; //指定行数
  6. width: 200px; // 指定宽度
  7. }
  1. 利用text-overflow属性
    1. // 1.需满足文字在块级元素内、2.且不会在块级元素下面溢出、3.单词太长
    2. div .btn{
    3. text-overflow: ellipsis; /* 溢出显示... */
    4. white-space: nowrap /* 溢出不换行,让其满足第2点 */
    5. overflow: hidden /* 防止单词太长而无法'安置', 满足第三点 */
    6. }

    设置背景图

    通常需要为某些文字设置一些图片,如:
    image.png
    CSS通常这样设置:
    1. .box{
    2. background: url(https://img12.360buyimg.com/img/s63x22_jfs/t1/157202/32/682/483/5febf8a3Eb0428ea9/e59b5027f1599c67.png) no-repeat; // 设置盒子的背景,背景不重复
    3. background-size: 100% auto; // 设置背景图的大小,第1个值为宽度,第2个为高度,这里设置宽度100%,高度自适应
    4. width: 50rpx; // 盒子的宽度
    5. height: 32rpx; // 盒子的高度
    6. line-height: 32rpx; // 设置文字垂直居中
    7. text-align: center; // 设置文字水平居中
    8. font-size: 20rpx; // 文字大小
    9. color: red; // 文字颜色
    10. font-family: JDZH-Regular; // 字体
    11. }

    设置图片

    图像和视频被描述为替换元素。 这意味着CSS不能影响这些元素的内部布局-仅影响它们在页面上于其他元素中的位置。默认情况下将使用文件的固有尺寸进行显示。
    当盒子的大小小于图片大小,图片就会溢出,如何处理溢出的问题?
    image.png
    法一:设置img的样式为max-width: 100%,这样溢出的图片能放盒子里,而小图片则不变;
    image.png(底下会留空)
    法二:img的样式设置object-fit属性。
    object-fit: cover;
    height: 100%;
    width: 100%;
    (1)这样设置,图片缩小大小但比例不变,且充满盒子,但会裁切一部分;(若只设置图片height和width为100%,图片会变形)
    object-fit: contain;
    height: 100%;
    width: 100%;
    (2)这样设置,图片不会被裁切,但会有“开天窗”。
    image.png
    在父元素为flex、grid布局中,图片不会被拉伸,而是保持原有比例(除非你设置了height…),若想元素拉伸到等宽,可以这样设置,但可能不是理想的效果:
    1. img {
    2. width: 100%;
    3. height: 100%;
    4. }

伪类和伪元素例子
pseudo-selectors.html

CSS-cheat-sheet
css-cheat-sheet.pdf