前言
对于css,一直没有系统的学习。加上近期对网站进行布局优化,所以到MDN上系统的学习了下。
这里把之前不太熟习的部分记录下来,后续参考。
https://developer.mozilla.org/zh-CN/docs/Learn/CSS
css详情
CSS 语法
css 语法 – 公告
选择器
- 简单选择器(Simple selectors):通过元素类型 class id 匹配一个或者多个元素。
- 属性选择器(Attribute selectors):通过 属性 / 属性值 匹配一个或者多个元素。
- 伪类(Pseudo-classes):匹配处于确定状态的一个或者多个元素,比方被鼠标指针悬停的元素,或者当前被选中或者未选中的复选框,或者元素是DOM树中一父节点的第一个子节点。
- 伪元素(Pseudo-elements):匹配处于相关确实定位置的一个或者多个元素,例如每个段落的第一个字,或者者某个元素之前生成的内容。
- 组合器(Combinators):这里不仅仅是选择器本身,还有以有效的方式组合两个或者更多的选择器用于非常特定的选择的方法。例如,你可以只选择divs的直系子节点的段落,或者者直接跟在headings后面的段落。
- 多重选择器(Multiple selectors):这些也不是单独的选择器;这个思路是将以逗号分隔开的多个选择器放在一个CSS规则下面, 以将一组公告应用于由这些选择器选择的所有元素。
多重选择器
| 名称 | 组合器 | 选择 |
|---|---|---|
| 选择器组 | A,B | 匹配满足A(和/或者)B的任意元素 |
| 后代选择器 | A B | 匹配B元素,满足条件:B是A的后代结点(B是A的子节点,或者者A的子节点的子节点) |
| 子选择器 | A > B | 匹配B元素,满足条件:B是A的直接子节点 |
| 相邻兄弟选择器 | A + B | 匹配B元素,满足条件:B是A的下一个兄弟节点(AB有相同的父结点,并且B紧跟在A的后面) |
| 通用兄弟选择器 | A ~ B | 匹配B元素,满足条件:B是A之后的任意一个兄弟节点(AB有相同的父节点,B在A之后,但不肯定是紧挨着A) |
CSS 数值与单位
数值: 长度值,用于指定例如元素宽度、边框(border)宽度或者字体大小;以及无单位整数。用于指定例如相对线宽或者运行动画的次数。
百分比: 可以用于指定尺寸或者长度——例如取决于父容器的长度或者高度,或者默认的字体大小。
颜色: 用于指定背景颜色,字体颜色等。
坐标位置: 例如,以屏幕的左上角为坐标原点定位元素的位置。
函数: 例如,用于指定背景图片或者背景图片渐变。
盒模型
image
默认情况下,块级元素的内容宽度是其父元素的宽度的100%,并且与其内容一样高。内联元素高宽与他们的内容高宽一样。您不能对内联元素设置宽度或者高度——它们只是位于块级元素的内容中。 假如要以这种方式控制内联元素的大小,则需要将其设置为相似块级元素 display: block;
正常的布局流(在布局详情文章中提到)是将元素放置在浏览器视口内的系统。默认情况下,块级元素在视口中垂直布局——每个都将显示在上一个元素下面的新行上,并且它们的外边距将分隔开它们。
内联元素体现不一样——它们不会出现在新行上;相反,它们互相之间以及任何相邻(或者被包裹)的文本内容位于同一行上,只需在父块级元素的宽度内有空间可以这样做。假如没有空间,那么溢流的文本或者元素将向下移动到新行。
假如两个相邻元素都在其上设置外边距,并且两个外边距接触,则两个外边距中的较大者保留,较小的一个消失——这叫外边距折叠
高级属性:
overflow
auto: 当内容过多,溢流的内容被隐藏,而后出现滚动条来让我们滚动查看所有的内容。
hidden: 当内容过多,溢流的内容被隐藏。
visible: 当内容过多,溢流的内容被显示在盒子的外边(这个是默认的行为)
css框类型: diaplay
块框( block box)是定义为堆放在其余框上的框(例如:其内容会独占一行),而且可以设置它的宽高,之前所有对于框模型的应用适用于块框 ( block box)
行内框( inline box)与块框是相反的,它随着文档的文字流动(例如:它将会和附近的文字和其余行内元素出现在同一行,而且它的内容会像一段中的文字一样随着文字部分的流动而打乱),对行内盒设置宽高无效,设置padding, margin 和 border都会升级附近文字的位置,但是对于附近的的块框( block box)不会有影响。
行内块状框(inline-block box) 像是上述两种的集合:它不会重新另起一行但会像行内框( inline box)一样随着附近文字而流动,而且他能够设置宽高,并且像块框一样保持了其块特性的完整性,它不会在段落行中断开。(在下面的示例中,行内块状框会放在第二行文本上,由于第一行没有足够的空间,并且不会突破两行。然而,假如没有足够的空间,行内框会在多条线上断裂,而它会失去一个框的形状。)
CSS 排版概述
定位 : position
静态定位(Static positioning)是每个元素默认的属性——它表示“将元素放在文档布局流的默认位置——没有什么特殊的地方”。
相对定位(Relative positioning)允许我们相对元素在正常的文档流中的位置移动它——包括将两个元素叠放在页面上。这对于微调和精准设计(design pinpointing)非常有用。
绝对定位(Absolute positioning)将元素完全从页面的正常布局流中移出,相似将它单独放在一个图层中. 我们可以将元素相对于页面的 <html> 元素边缘固定,或者者相对于离元素最近的被定位的祖先元素(ancestor element)。绝对定位在创立复杂布局效果时非常有用,例如通过标签显示和隐藏的内容面板或者者通过按钮控制滑动到屏幕中的信息面板.
固定定位(Fixed positioning)与绝对定位非常相似,除了它是将一个元素相对浏览器视口固定,而不是相对另外一个元素。 在创立相似页面滚动总是处于页面上方的导航菜单时非常有用。
绝对定位的元素不再存在于正常文档布局流中。相反,它坐在它自己的层独立于一切。
哪个元素是绝对定位元素的“包含元素“?这取决于绝对定位元素的父元素的position属性。
假如所有的父元素都没有显式地定义position属性,那么所有的父元素默认情况下position属性都是static。结果,绝对定位元素会被包含在初始块容器中。这个初始块容器有着和浏览器视口一样的尺寸,并且<html>元素也被包含在这个容器里面。简单来说,绝对定位元素会被放在<html>元素的外面,并且根据浏览器视口来定位。
绝对定位元素在HTML源代码中,是被放在<body>中的,但是在最终的布局里面,它离页面(而不是<body>)的左边界、上边界有30px的距离。我们可以改变定位上下文 —— 绝对定位的元素的相对位置元素。通过设置其中一个父元素的定位属性 —— 也就是包含绝对定位元素的那个元素(假如要设置绝对定位元素的相对元素,那么这个元素肯定要包含绝对定位元素)。position: relative; 这样body内所有的绝对定位组件都是相对于body而言,而不是页面。
弹性盒子 : flexbox
display: flex;告诉 元素 表示文档中的一个区域(或者节) 。元素的子元素作为flexible boxes——默认情况下,它们都将开展以填充父类的可用高度,不论它是什么,并将其列出来——有足够的宽度来包装他们的内容。
浮动 : float
浮动元素 会脱离正常的文档布局流,并吸附到其父容器的左边。在正常布局中位于该浮动元素之下的内容,此时会围绕着浮动元素,填满其右侧的空间。
现在你已经知道了关于 float 属性的少量有趣事实,不过你很快就能够碰到一个问题——所有在浮动下面的自身不浮动的内容都将围绕浮动元素进行包装,假如没有解决这些元素,就会变得很糟糕。
清理浮动
footer {
clear: both;
}
flex 模型说明
当元素体现为 flex 框时,它们沿着两个轴来布局:
flex_terms.png
- 主轴(main axis)是沿着 flex 元素放置的方向延伸的轴(比方页面上的横向的行、纵向的列)。该轴的开始和结束被称为** main start** 和** main end**。
- 交叉轴(cross axis)是垂直于 flex 元素放置方向的轴。该轴的开始和结束被称为 cross start 和** cross end**。
- 设置了
display: flex的父元素(在本例中是<section>)被称之为 flex 容器(flex container)。 - 在 flex 容器中体现为柔性的盒子的元素被称之为 flex 项(flex item)(本例中是
<article>元素。
弹性盒子提供了 flex-direction 这样一个属性,它可以指定主轴的方向(弹性盒子子类放置的地方)— 它默认值是 row,这使得它们在按你浏览器的默认语言方向排成一排(在英语/中文浏览器中是从左到右)。
实用技巧总结
<label> 标签有用的反作用使你能通过点击checkbox的label标签来选择这个checkbox,就如同点击了这个checkbox自己一样。这就会实现有名的 checkbox hack 技术,可以提供无 JavaScript 的方法来通过按钮来控制一个元素
div设置float属性时,通常需要设置width,否则div默认宽度填满父容器,无法实现float效果。
原文链接