【学习】CSS布局

CSS布局 笔记

CSS布局分类

  • 两种分类
    • 固定宽度布局,一般宽度为960/1000/1024px
    • 不固定宽度布局,主要靠文档流的原理来布局
      文档流本来就是自适应的,不需要加额外的样式
  • 响应式布局
    PC上固定宽度,手机上不固定宽度,是一种混合布局
  • 布局的两种思路
    • 从大到小
      先定下大局,再完善每个部分的小布局
    • 从小到大
      先完成小布局,再组合成大布局
  • CSS布局
    • 如果需要兼容IE 9,用float布局
    • 如果不需要兼容IE 9,只兼容最新浏览器,用grid布局
    • 如果不需要兼容IE 9,也不需要兼容最新浏览器,用flex布局

float布局

步骤

  • 子元素上加float:leftwidth 比如
        .logo {
            border: 1px solid red;
            height: 50px;
            width: 100px;
            float: left;
        }
        nav {
            border: 1px solid green;
            height: 60px;
            width: 200px;
            float: right;
        }
  • 在父元素上加 .clearfix 比如
    .clearfix::after {
        content: '';
        display: block;
        clear: both;
    }

.clearfix 部分的代码固定此写法


注意

  • 留一些空间或者最后一个部分不设置width
  • 不需要做响应式,因为手机上没有IE,而float部分是专门为IE准备的
  • IE 6/7存在双倍margin bug,解决方法如下:
    • 将错就错,针对IE 6/7把margin减半
    • 加一个display:inline-block;
  • 如果发现图片下的背景色多出一部分,在图片的设置里写上 vertical-align:top/middle;
  • 写代码时,由于设置的是border-box,border调试法会干扰实际的宽度,此时可以将border改为outlineoutline不占空间
  • 如果一个元素是块级的,width是固定的,想要居中显示,写上 margin-left:auto; margin-right:auto;
  • 如果用float布局做平均布局,可能会用到 负margin
  • float布局需要自己计算宽度,不灵活

flex布局

  • 容器 container
    在这里插入图片描述

flex container样式

  • 让一个元素变成flex容器
.container {
  display:flex;/* or display:inline-flex; */
}

flex类似于block,另起一行
inline-flex类似于inline-block,往后排

  • 改变items流动方向

在这里插入图片描述

.container {
  flex-direction: row | row-reverse | column | column-reverse;
}
  • 改变折行

在这里插入图片描述

.container {
  flex-wrap: nowrap | wrap | wrap-reverse;
}

nowrap 不折行,items的宽度会弹性改变
wrap 折行,items的宽度不改变
wrap-reverse 从最后一行往上折行

  • 主轴对齐方式

在这里插入图片描述

.container {
  justify-content: flex-start | flex-end |center | space-between | space-around | space-evenly;
}

默认主轴是横轴,除非改变了flex-direction方向

  • 次轴对齐

在这里插入图片描述

.container {
  align-items: stretch | flex-start | flex-end | center | baseline;
}
  • 多行内容(很少用到)

在这里插入图片描述

.container {
  align-items: stretch | flex-start | flex-end | center | space-between | space-around;
}

flex item属性

  • item上加order

在这里插入图片描述

item 设置 order ,在容器里会按照 order 的大小,从小到大排列

  • item 上加 flex-grow
    控制自己如何长胖
    在这里插入图片描述
.item {
  flex-grow: 1;
}
.item:first-child {
  flex-grow: 1;
}
.item:nth-child(2) {
  flex-grow: 2;
}
.item:last-child {
  flex-grow: 1;
}
  • item上加flex-shrink
    控制如何变瘦
    一般写flex-shrink:0; 防止变瘦,默认值为1
  • flex-basisi 控制基准宽度
    默认是auto
  • align-self定制align-items
    在这里插入图片描述
.item {
  align-items:flex-start;
}
.item:nth-child(3) {
  align-self:flex-end;
}

重点

  • 重点记住以下代码
    • display:flex;
    • flex-direction:row/column;
    • flex-wrap:wrap;
    • justify-content:center/space-between;
    • align-items:center;
  • 注意
    • 不要把 widthheight 写死,除非特殊说明,写死就是使用px,不写死就是使用%,vw等等,用 min-width / max-width / min-heigh / max-height
    • flex 可以基本满足所有的需求
    • flexmargin-xxx:auto; 配合有意外的效果

常用草图软件

  • Balsamiq
  • Figma
  • 墨刀
  • Adobe XD

grid布局

功能最强大的布局方案,尤其适合不规则布局
一维布局用flex,二维布局用grid

  • 成为container
.container {
  display:grid | inline-grid;
}

  • 行和列

在这里插入图片描述

.container {
  grid-template-columns:40px 50px auto 50px 40px;
  grid-template-rows:25% 100px auto;
}

可以为每条线取名字
在这里插入图片描述

.container {
  grid-templeta-columns:[first] 40px [line2] 50px [line3] auto [col3-start] 50px [five] 40px [end];
  grid-templeta-rows:[row1-start] 25% [row1-end] 100px [third-line] auto [last-line];
}

可以用名字设置item范围,比如

.item-a {
  grid-column-start:2;
  grid-column-end:five;
  grid-row-start:row1-start;
  grid-row-end:3;
}
  • fr — free space 份
    主要用来做平均布局
.container {
  grid-template-columns:1fr 1fr 1fr;
}
.container {
  grid-template-columns:1fr 50px 1fr 1fr;
}

  • 分区 grid-template-areas
.container {
  display:grid;
  grid-template-columns:50px 50px 50px 50px;
  grid-template-rows:auto;
  grid-template-areas:
  	"header header header header"
  	"main main . sidebar"
  	"footer footer footer footer";
}
.item-a {
  grid-area:header;
}
.item-b {
  grid-area:main;
}
.item-c {
  grid-area:sidebar;
}
.item-c {
  grid-area:footer;
}

  • gap 空隙

在这里插入图片描述

.container {
  grid-template-columns:100px 50px 100px;
  grid-template-rows:80px auto 80px;
  grid-column-gap:10px;
  grid-row-gap:15px;
}

文中图片来源 https://css-tricks.com/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值