细读CSS

关于盒模型

  • 背景应用于由content和padding, border组成的区域。

  • width 和 height 指的是content的宽度和高度

  • padding, margin百分数值是相对于其父元素的 width 计算的

  • 外边距合并: 两个垂直外边距直接接触时,形成一个外边距
    -- 高度合并为最大的那个

    image.png

    -- 内部嵌套的时候也会合并,除非有padding分割
    image.png

    -- 普通文档流中块框才会发生margin合并。行内框、浮动框或绝对定位之间的外边距不会合并。

  • 定位
    -- z-index只能用于定位情况,flex absolute relative
    -- 存在卡住的情况


    image.png
  • 行内元素、块级元素
    -- 行内元素:
    span, a, img, label, input, select, textarea, br, i, em, strong, small, button, sub, sup, code
    -- 块级元素
    div, form, table, header, aside, section, article, figure, figcaption, h1~h6, nav, p, pre, blockqoute, canvas, ol, ul, dl

  • clear 清除浮动
    不允许某一侧出现浮动元素

几大布局

flex布局,参阅阮一峰老师的文章

  • 子元素的float、clear和vertical-align属性失效
  • main-axis 是x轴,cross-axis是y轴
  • 容器属性-父组件
    flex-direction:主轴方向,row | row-reverse | column | column-reverse
    flex-wrap:一行排不下怎么换行,nowrap | wrap | wrap-reverse
    (reverse从最后往前)
    flex-flow:缩写上面两个属性 <flex-direction> <flex-wrap>;
    justify-content:项目在主轴上的排列方式,flex-start | flex-end | center | space-between | space-around;
    align-items:cross-aixs上排列方式,flex-start | flex-end | center | baseline | stretch
    align-content:多根轴线的对齐方式,flex-start | flex-end | center | space-between | space-around | stretch;
  • 每个item子组件属性
    order:数值越小,排列越靠前,默认为0
    flex-grow:默认为0,即使有剩余空间也不放大。根据比例划分剩余空间
    flex-shrink:默认为1,若没有剩余空间则缩小。 按照比例缩小,当然0的时候不变
    flex-basis:默认auto,分配之前占据的空间,从而计算出上述的剩余空间
    flex:none | <'flex-grow'> <'flex-shrink'> <'flex-basis'>
    align-self:单独指定某个item的在cross-axis上样式,参考上面的align-items;

Grid布局

display:grid | inline-grid

  1. 定义在container父容器上面
  • grid-template-columns:每一列的列宽,grid-template-rows:每一行的行高
.container {
  display: grid;
  grid-template-columns: 100px 100px 100px;
  grid-template-rows: 100px 100px 100px;
  grid-template-columns: repeat(3, 33.33%);   // repeat(n | auto-fill,value),auto-fill尽可能容纳多的单元格
  grid-template-rows: repeat(3, 33.33%);
  grid-template-columns: 1fr 2fr;  // fr(nfr, nfr),n根据倍数分布
  grid-template-columns: 1fr 1fr minmax(100px, 1fr);   // minmax(100px,1fr) 宽度范围
  grid-template-columns: 100px auto 100px;   // auto 自己决定
  grid-template-columns: [c1] 100px [c2] 100px [c3] auto [c4, c5];  // 指定网格线的名称,一根可以有多个名字
  grid-template-rows: [r1] 100px [r2] 100px [r3] auto [r4];
}
  • grid-row-gap ,grid-column-gap ,grid-gap 设置行间距、列间距、合并
  • grid-template-areas 一个区域由单个或多个单元格组成
.container {
  display: grid;
  grid-template-columns: 100px 100px 100px;
  grid-template-rows: 100px 100px 100px;
  grid-template-areas: 'a b c'
                       'd . f'
                       'g . i';      //  使用"点"(.)表示不需要用的。a-i命名了区域,每个区域的起始网格线,会自动命名为区域名-start,终止网格线自动命名为区域名-end
}
  • grid-auto-flow 排放顺序
    grid-auto-flow:row | column, dense 默认row按行排列,dense则是尽可能紧密排放
  • 对齐:container的每个item
.container {
  justify-items: start | end | center | stretch;   // 水平
  align-items: start | end | center | stretch;   //垂直
  place-items: <align-items> <justify-items>;   // 合并写法
}
  • 对齐:当前设置容器的本身
.container {
  justify-content: start | end | center | stretch | space-around | space-between | space-evenly;   // 水平
  align-content: start | end | center | stretch | space-around | space-between | space-evenly;    //垂直
   place-content: <align-content> <justify-content>   // 合并
}
  • 不赞同:grid-template 合并、grid合并
  1. 定义在每个item上
  • 指定每个item靠在哪条网格线上,除了设置数字(第几条),还可以使用名称。
    grid-column-start属性:左边框所在的垂直网格线
    grid-column-end属性:右边框所在的垂直网格线
    grid-row-start属性:上边框所在的水平网格线
    grid-row-end属性:下边框所在的水平网格线
.item-1 {
  grid-column-start: 1;
  grid-column-end: 3;
  grid-column: 1 / 3;   //合并
  grid-row-start: 2;
  grid-row-end: 4;
  grid-row: 2 / 4;   //合并
  grid-column-start: header-start;
  grid-column-end: header-end;
  grid-column-start: span 2; // item-1的左距离右跨越2个网格
  grid-column-end: span 2;  // 等同于上面
}
  • grid-area
    指定项目放在哪一个区域,对应grid-template-areas,可以合并grid-area: <row-start> / <column-start> / <row-end> / <column-end>;
  • item的对齐
    justify-self:水平,类比justify-items,只作用于单个项目。
    align-self:垂直,类比align-items,只作用于单个项目。
    place-self: <align-self> <justify-self>; 合并
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容