前言

这篇想整理一下在网页开发中, Spacing (间距) 和 Layout 排版是如果被处理的.

Spacing 介绍

东西密密麻麻会给人一种很恐怖的感觉. 只要加上一点空间 (间距), 整体感觉立马就会变好很多.

在网页开发中, padding, margin, gap, line-height 是最常用来做间距的. 它们各有特点, 也有重叠的部分, 所以最好有一个 best practice 不要乱用一通.

Padding

padding 是内间距, 用来给 parent child 制造空间.

padding 可以替代 margin (Figma 就没用 margin), 但是 padding 不能被 margin, gap 替代. 所以一般不会用错.

例子1: botton padding

例子 2 : viewport padding, header padding, content padding

绿色的部分都是 padding

Padding + negetive margin

上面这几个 nav link 需要间距. 最合适是用 padding 来实现. 因为要点击嘛. padding 空间会比较大.

gap 和 margin 的区域不属于内容也就无法被点击. 这也是 padding 和 gap, margin 很大的区别.

但有些场景则相反, 比如需要 background-color 的情况下, 用 padding 就不行了, 因为它是内容的一部分也会有 background-color 这样就看不到间距了.

注意: 用 padding 做间距会有 first element 和 last element 额外空间的 feel. 因为 padding 是不会 collapse 的, 所以需要配上 negetive margin 来 "帮" 它 collapse.

这个在管理上会有小扣分.

Margin

padding 是 parent child, margin 是 sibling

margin 的出场率会比 padding 少, 大部分情况还会被 gap 替代, 所以对我来说 margin 是比较冷门的.

中间的 slash 就用了 margin inline.

橙色部分就是 margin-top

橙色部分就是 margin-bottom

margin-top vs margin-bottom

有时候会发现, margin-top, margin-bottom 是可以互换的, 毕竟都是让 2 个 sibling element 分开. 给其中任何一个都是可以达到同一效果的.

但是通常我会使用 margin-top 因为这个是赋予在第 2 个 element 的, 因为有了这第 2 个 element 才会需要空间, 所以职责给它是合理的.

我只会对 title 使用 margin-bottom, 因为 title 通常会配上内容, 而让每一个内容都设置 margin-top 我觉得让 title 设置 margin-bottom 会跟简单直观一些.

总之不要纠结太多, 大部分情况 margin-top 是对的, 如果你觉得有个地方 margin-bottom 更好, 那么就用呗.

margin collapse

当两个 element 的 margin-bottom 遇上 margin-top 时, 它会形成重叠, 比如:

element A 有 margin-bottom 30px

element B 有 margin-top 50px

最终它们的间距时 50px 而不是 80px. (因为 margin 的表达是 A element 要和下面的 element 保持 30px, 而 50px 间距已经达到目的了)

gap

  

紫色的都是 gap

gap 也是处理 sibling 间距的. 绝大多数的情况下, gap 可以取代 margin.

我也鼓励这样做, 因为它比较直观.

1. 如果是多个 element 要做间距, 而且间距刚好相同, 那么 gap 会很好, (对比 margin 需要搞 n + 2 margin-top)

2. 如果只有 2 个 element 要做间距,  尽可能用 gap, 哪怕需要额外加 Flex, Grid 属性 (如果要加 wrapper element 就不要了)

3. 如果有多个 element 间距不同, 用 margin-top, 也可能配上 gap 一起用.

line-height

line-height 是 paragraph 行的间距.

line-height 一般用的是 percentage. 不同字体默认是不一样的, 通常在 1.2 左右.

也就是说 16px 的字, 高度是 16 x 1.2 = 19.2

2 点要注意:

当 paragraph 有 multiple line 的时候, 1.5 的 line-height 通常会更好一些

当只有 single line heading 1-6 的时候, line-height 1.0 通常会好一些. 因为字越大 line-height 越大.

CSS – 实战 Spacing & Layout的更多相关文章

  1. 前端开发css实战:使用css制作网页中的多级菜单

    前端开发css实战:使用css制作网页中的多级菜单 在日常工作中,大家都会遇到一些显示隐藏类菜单,比如页头导航.二维码显示隐藏.文本提示等等......而这些效果都是可以使用纯css实现的(而且非常简 ...

  2. DIV+CSS实战(三)

    一.说明 在上篇博客<DIV+CSS实战(二)>中,实现了头部以及Tab标签卡,下面开始实现内容区域,要实现的效果如下: 二.内容最外层的设计(边框) 给最外层加边框,并且设置高度随着里面 ...

  3. DIV+CSS实战(二)

    一.说明 在DIV+CSS实战(一)中,已经把框架搭建起来了,现在就需要往框架里面添加内容了.需要实现的内容如下图: 二.头部的设计(全媒体订阅) 左侧是一张图片+标题 ,右侧是登录名 和上次登录的时 ...

  4. css之Grid Layout详解

    css之Grid Layout详解 CSS Grid Layout擅长将页面划分为主要区域,或者在从HTML基元构建的控件的各个部分之间定义大小,位置和图层之间的关系. 与表格一样,网格布局使作者能够 ...

  5. CSS flex waterfall layout

    CSS flex waterfall layout https://github.com/YoneChen/waterfall-flexbox https://css-tricks.com/snipp ...

  6. css——letter spacing

    letter spacing属性是用来设置字母的间距 实例: 设置h1和h2之间字母的间距 <html> <head> <style type="text/cs ...

  7. CSS实战中经常出现的问题。

    如果你把这些当做文章来看,那你始终是学不会,而是应该当做手册来看,这些也是自己在写网站遇到的问题.转载请出处. 追梦子前端博客. 1. logo添加内容给h1设置text-index:-9999px的 ...

  8. 第一天CSS实战培训及笔记及感想

    首先,我很激动...... 3点了,凌晨3点了,我居然还没睡.总共不到3个小时的视频消化了6个小时,今天是培训班第一天,一下子就来高强度的讲课,整个上过基础班的都听得东倒西歪,更别说我这个没上基础班滴 ...

  9. CSS 权威指南 CSS实战手册 第四版(阅读笔记)

    前言: 对于程序员,学习是无止境的,知识淘换非常快,能够快速稳固掌握一门新技术,是一个程序员应该具备的素质.这里将分析本人一点点不成熟的心得. 了解一门语言,了解它的概念非常重要,但是一些优秀的设计思 ...

  10. css实战——第一天

    1.  开发前的准备 1.1配置开发环境   sublime  webstorm  vscode  Hbuilder  atom 1.2建立项目文件夹 主页或是首页    index.html   d ...

随机推荐

  1. API网关实践-网易云轻舟微服务

    微服务最佳实践中,我们需要通过统一的 API 网关进行服务能力的共享,API 网关为用户提供发布.管理.保护和监控 API的能力,帮助用户在自己的多个系统之间,或者内部系统与合作伙伴以及第三方的系统之 ...

  2. 存储系列DAS,SAN,NAS常见网络架构

    随着主机.磁盘.网络等技术的发展,对于承载大量数据存储的服务器来说,服务器内置存储空间,或者说内置磁盘往往不足以满足存储需要.因此,在内置存储之外,服务器需要采用外置存储的方式扩展存储空间,今天在这里 ...

  3. [oeasy]python0106 七段数码管_显示字母_BP机

    七位数码管进化 回忆上次内容 上次回顾了 7-seg 七位数码管 可以显示数字 甚至是十六进制数字   ​   添加图片注释,不超过 140 字(可选)   能否让 七位数码管 将26个字母 全部都显 ...

  4. oeasy教您玩转linux 010216 随机诗词 fortunezh

    我们来回顾一下 上一部分我们都讲了什么? 下载fortune 输出重定向到cowsay 多重输出重定向 fortune的细节 有没有中️文的fortune呢 # 搜索一下fortune apt sea ...

  5. Docker 容器数据:持久化

    Docker 容器数据:持久化 每当从镜像创建容器时,它都会创建一个新容器,除了镜像数据之外没有任何数据 意味着如果在提交更改之前删除容器,我们将丢失数据 Docker 应该存在一种将数据的文件系统与 ...

  6. 一步一步分析HTTPS加密机制

    一步一步分析HTTPS加密机制 HTTPS(SSL/TLS)的加密机制虽然是大家都应了解的基本知识, 但是更多的时候我们只是在背诵一些概念, 比如: "对称加密", "非 ...

  7. Jmeter计数器

    计数器(Counter)配置起点.最大值和增量,计数器将从开始循环到最大值,然后从头开始,继续这样直到测试结束 1.计数器 是可以根据线程计数的.组件路径[线程组->配置元件->计数器] ...

  8. 【Java】在线文件预览服务 KkFileView

    原来有第三方在线预览服务接口: 需要收费使用: https://view.xdocin.com/ 但是经费不足,突然撤掉服务接口,只能把KkFileView架出来使用了 KkFileView官网地址: ...

  9. 【Java,IDEA】使用IDEA自动生成序列化ID

    一.设置序列化的原因: 详细见SE的IO流问题: https://www.cnblogs.com/mindzone/p/12752453.html 简单点理解就是对象的身份证号, 对于一些对象被序列之 ...

  10. 《Python数据可视化之matplotlib实践》 源码 第四篇 扩展 第十章

    图 10.1 import matplotlib.pyplot as plt import numpy as np plt.axes([0.1, 0.7, 0.3, 0.3], frameon=Tru ...