CSS基础?轻松搞定!第二弹~

234 阅读5分钟

话不多说,继续开搞

一、实现两栏,三栏布局

  1. 两栏布局
  • flex:直接display:flex
  • float+BFC
.left{
            width: 100px;
            height: 100px;
            background-color: #000;
            float: left;
        }
        .right{
            height: 100px;
            background-color: aqua;
            overflow: hidden;
        }

image.png

  1. 三栏布局
  • float left+right+margin:content容器放最后面,然后另外两个各自左右浮动
  .left{
            width: 100px;
            height: 100px;
            background-color: gray;
            float: left;
        }
        .right{
            height: 100px;
            width: 100px;
            background-color: aqua;
            float: right;
        }
        .content{
            background-color: red;
            height: 100px;
            margin: 0 100px;
        }

image.png

  • 全部float left + mrgin-left 负值:经典双飞翼布局,可以吧content放前面,优先加载,给content容器套一层main容器,然后全部左浮动,通过margin-left给负值来调整位置
   .left{
            width: 100px;
            height: 100px;
            background-color: #000;
            float: left;
            margin-left: -100%;
        }
        .right{
            height: 100px;
            width: 100px;
            background-color: aqua;
            float: left;
            margin-left: -100px;
        }
        .content{
            background-color: red;
            margin: 0 100px;
        }
        .main{
            width: 100%;
            float: left;
        }

image.png

  • flex 1:左右容器给固定宽,中间容器给flex:1,父容器display:flex
  • 用table + table-cell:不给宽度的table-cell会自动继承父容器宽度
 .box{
      background: #eee;
      height: 200px;
      display: table;
      width: 100%;
    }
    .left, .right, .content{
      display: table-cell;
    }
    .left, .right{
      width: 100px;
      background: rgb(91, 225, 43);
    }

    .content{
      background: rgb(226, 97, 97);
    }

image.png

  1. grid 网格 grid-template-columns: 100px auto 100px; 网格三列

二、flex弹性布局

当我们把一个盒子设置为display:flex时,我们称这个盒子为弹性布局,它内部所有的子元素会成为弹性对象,默认成为它的成员,并默认沿弹性布局主轴排列

  • flex-direction:column/clumn-reverse 修改主轴方向
  • flex-wrap:nowrap 主轴方向排不下了,是否允许换行,以哪种方式换行
  • flex-flow:row nowrap 上面两个属性的简写
  • justify-content:center 主轴居中,主轴左对齐,右对齐,两端对齐(space-between),均等对齐(space-around)
  • align-items:stretch(如果父容器不设高度,则占满) flex-start(开始)flex-end(末尾)center(居中)baseline(基准线)
  • alight-content: 控制多根主轴之间的对齐方式
  • 子元素属性
  • order:0 给子元素加排名,排民越靠前,排列越前
  • flex-grow:; 定义当前子容器的放大比例 (父容器宽度大于子元素宽度之和生效)
  • flex-shrink 缩小已缩放值的多少倍,比如原来缩小了10px,给个2,则缩小20px,值为0则不缩放(父容器宽度小于子元素宽度之和生效)
  • flex:flex-grow + flex-shrink + flex-basis(固定宽度) 前两个参数,只生效一个
  • align-self:center 允许单个项目以自己的方式对齐

三、grid网格布局

定义:一种二维布局方式,能同时处理行与列,用横纵相交的网格线将一个页面划分成多个区域,并定义各区域的大小位置,层次

  1. 容器属性
  • grid-template-columns:x x x 分多少列,每列多宽 repeat(5,200px) repeat(auto-fill,200px) repeat(auto-fill,200px) 按比例 1fr
  • grid-template-rows: y y 分多少行,每行多高
  • grid-template-areas:'a b c d e f h i j'给单元格取名
  • grid-auto-flow:column/row 先排满column,再排row
  • align-items: 垂直对齐
  • justify-item: 主轴对齐
  • justify-content content居中
  • align-centent:
  • grid-row-gap 行间距
  • grid-colums-gap 列间距
  • grid-gap:x y 行列间距
  1. 项目属性
  • grid-colunm-start 开始
  • grid-colunm-end 结束
  • justify-self 以自身为基准对齐

三、CSS新增新特性

  1. 选择器
  • 属性选择器
  • 伪类选择器
  • :first-of-type(父级第一个元素)
  • :nth-child()
  1. 样式
  • border-radius
  • box-shadow
  • border-image
  • background-size
  • background-clip 确定背景画图的区域
  • word-wrap
  • text-shadow
  1. 动画
  • transition
  • transform
  • animation
  • 渐变

四、CSS3中的动画

  1. 平移,旋转,缩放,渐变
  • transition:属性名 过渡时间 速度曲线 延迟触发时间 给属性的变化施加一个过渡时间,从而形成了动画
  • transform: 转变动画,平移,旋转,缩放,倾斜时的变化所形成的一个动画
  • animation 播放一个已经写好了的动画。并设置其播放时长,变化率等

五、回流和重绘

  1. 定义
  • 回流:当页面文档流的布局发送变化时,浏览器需要重新计算页面布局并重新排列
  • 重绘:浏览器需要重新绘制页面容器的非几何属性
  1. 触发
  • 回流:首次刷新,增删DOM元素,DOM的几何属性发生变化,浏览器窗口发生变化、offset...、scroll...、client
  • 重绘:颜色修改,文本方向修改,阴影变化
  • 浏览器的优化机制
  • 浏览器中维护了一个优化队列,每当有回流操作,则加入队列,队列满则进行一次重排
  1. 如何减少
  • 对一个DOM结构做多次操作时,先将该dom结构脱离文档流,修改完成后再放回文档流
  • 尽量少用table布局,table中每个元素的修改都会导致整个table的重新计算
  • 用js向文档流中插入节点,可以使用DocumentFragment(虚拟文档片段)

六、响应式布局

定义:网站的布局随着设备屏幕的变化而自适应

实现:

  • 百分比单位
  • 使用相对单位 rem
  • 媒体查询 @media screen and (min-width:800px) and (max-width:1000px){}
  • vw/vh

七、如果要做优化,css中可以有哪些优化手段?

  1. 异步加载css代码
  2. 资源压缩
  3. 合理使用选择器
  4. 减少@import url()的使用

八、实现单行/多行文本溢出省略号

  1. 单行:
      white-space:nowrap
      overflow:hidden
      text-overflow:ellipsis
  1. 多行:
      overflow:hidden
     -webkit-line-clamp:行数
     -webkit-box-orient:vertical

九、零零碎碎

  1. css实现视差滚动
  • 使用background-attachment:fixed属性
  1. 画三角形
  • 用border去画
  1. 实现小于12px的字体
  • 使用transform缩小
  • zoom:0.5焦点放大
  1. css的预编语言
  • 有哪些 less,styles,sass
  • 优点
  • 定义公共变量
  • 有作用域
  • 代码混合、嵌套、模块化