前端探索 | CSS基础、文档流、盒模型

层叠样式表 (Cascading Style Sheets,缩写为 CSS)

一、CSS基础

CSS的发明

1994年提出CSS概念

CSS的优点

  • 样式层叠
    可以多次对同一选择器进行样式声明
  • 选择器层叠
    可以用不同选择器对同一元素进行样式声明
  • 文件层叠
    可以用多个文件进行层叠
    这些特性使得CSS极度灵活

如何确定浏览器支持哪些特性

  • 几十种浏览器进行实验
  • 使用caniuse.com

CSS的语法

  • 语法一
选择器 {
    属性名: 属性值;
    /*注释*/
}

注:

  • 所有的符号都是英文符号

  • 区分大小写

  • 没有//注释

  • 最后一个分号可以省略,但是不建议省略

  • 任何地方写错了都不会报错,浏览器会直接忽略

  • 语法二
    @charset "UTF-8";
    @import url(2.css);

@media (min-width: 100px) and (max-width: 200px) {
   语法一
}

注:

  • @charset必须要放在第一行
  • 前两个@语法必须以分号结尾
  • charset是字符集的意思,UTF-8是字符编码encoding,这是历史遗留问题

border调试法

border 1px solid red;
根据红框出现与否来判断
若出现了则上边没错,若没出现则上边有错

二、文档流

正常布局流
查看MDN介绍的normal flow
新H5中 display: inline就是内联元素,display: block就是块级元素

流动方向

  • display: inline从左到右流动
  • display: block从上到下流动
  • display: inline-block从左到右流动,但是元素不会跨行存在

宽度

  • inline的宽度就是内部inline元素的总和宽度,width不能定义inline的宽度(不要把block元素放进inline中)
  • block的宽度是自定计算的,可以用width指定(永远不要写width 100%)
  • inline-block结合两者特点,默认宽度类似inline,但是可以用width指定

高度

  • inline的高度是由inline-height间接决定的,不是由height决定的(间接决定情况发生在字体不一致 深入理解CSS:字体度量、line-height 和vertical-align
  • block的高度由内部文档流元素高度决定(有一些元素能够脱离文档流),可以设置height
  • inlet-block默认和block类似,可以设置height

overflow溢出

当内容大于容器

  • 等内容的宽度或高度大于容器,会溢出
div {
    border: 2px solid gray;
    height: 30px;
    /*overflow*/
    overflow: visible;/*超出部分可视*/
    overflow: hidden;/*超出部分隐藏*/
    overflow: scroll;/*超出部分以滚动方式看见*/
    overflow: auto;/*超出显示滚动条,不超出则无*/
}

脱离文档流

HTML

<body>
  <div class="div1">
      <div class="div2"><span>你好</span></div>
  </div>
</body>

CSS

.div1{
    border: 1px solid green;
}
.div2{
    border: 1px solid red;
}
span{
    position: absolute;/*或fixed、脱离文档流*/
    float: left;/*或者right*/

}
  • absolute
    元素会被移出正常文档流,并不为元素预留空间,通过指定元素相对于最近的非 static 定位祖先元素的偏移,来确定元素位置。绝对定位的元素可以设置外边距(margins),且不会与其他边距合并。
  • fixed
    元素会被移出正常文档流,并不为元素预留空间,而是通过指定元素相对于屏幕视口(viewport)的位置来指定元素位置。元素的位置在屏幕滚动时不会改变。打印时,元素会出现在的每页的固定位置。fixed 属性会创建新的层叠上下文。当元素祖先的 transform, perspective 或 filter 属性非 none 时,容器由视口改为该祖先。
  • float CSS属性指定一个元素应沿其容器的左侧或右侧放置,允许文本和内联元素环绕它。该元素从网页的正常流动(文档流)中移除,尽管仍然保持部分的流动性(与绝对定位相反)。

三、盒模型

当对一个文档进行布局(lay out)的时候,浏览器的渲染引擎会根据标准之一的 CSS 基础框盒模型(CSS basic box model),将所有元素表示为一个个矩形的盒子(box)。CSS 决定这些盒子的大小、位置以及属性(例如颜色、背景、边框尺寸…)。

盒模型图解

每个盒子由四个部分(或称区域)组成,其效用由它们各自的边界(Edge)所定义(原文:defined by their respective edges,可能意指容纳、包含、限制等)。如图,与盒子的四个组成区域相对应,每个盒子有四个边界:内容边界 Content edge、内边距边界 Padding Edge、边框边界 Border Edge、外边框边界 Margin Edge。

box-size

box-sizing 属性可以被用来调整这些表现:

  • content-box 是默认值。如果你设置一个元素的宽为100px,那么这个元素的内容区会有100px 宽,并且任何边框和内边距的宽度都会被增加到最后绘制出来的元素宽度中。
  • border-box 告诉浏览器:你想要设置的边框和内边距的值是包含在width内的。也就是说,如果你将一个元素的width设为100px,那么这100px会包含它的border和padding,内容区的实际宽度是width减去(border + padding)的值。大多数情况下,这使得我们更容易地设定一个元素的宽高。
    注: border-box不包含margin

margin合并

  • 哪些情况合并
    父子margin
    兄弟margin
  • 如何阻止合并
    父子合并用padding/border挡住
    父子合并用overflow: hidden挡住
    父子合并用display: flex挡住
    兄弟合并是符合预期的
    兄弟合并可以用inline-block消除

HTML

<body>
 <div class="parent">
     <div class="child">第一个孩子</div>
     <div class="child">第二个孩子</div>
     <div class="child">第三个孩子</div>
 </div>

CSS

.parent{
    margin: 30px 0;
    background: red;
    overflow: hidden;/*阻止父子合并*/
}
.child{
    border: 1px black;
    margin: 30px 0;
    display: inline-block;/*阻止兄弟合并*/
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352