CSS慢学

CSS基础

CSS太难了,而且好长好难学,慢慢学吧。

学习链接:https://www.w3school.com.cn/css/index.asp

CSS 是一种描述 HTML 文档样式的语言。CSS 描述应该如何显示 HTML 元素。

**注意:**请勿在属性值和单位之间添加空格

简介

  • CSS 指的是层叠样式表* (Cascading Style Sheets)
  • CSS 描述了如何在屏幕、纸张或其他媒体上显示 HTML元素
  • CSS 节省了大量工作。它可以同时控制多张网页的布局
  • 外部样式表存储在 CSS 文件

语法

CSS 规则集(rule-set)由选择器和声明块组成:

声明块包含一条或多条用分号分隔的声明。

每条声明都包含一个 CSS 属性名称和一个值,以冒号分隔。

多条 CSS 声明用分号分隔,声明块用花括号括起来。

p {
  color: red;
  text-align: center;
}

选择器

我们可以将 CSS 选择器分为五类:

元素选择器

元素选择器根据元素名称来选择 HTML 元素。比如p

id选择器

元素的 id 在页面中是唯一的,因此 id 选择器用于选择一个唯一的元素!

要选择具有特定 id 的元素,请写一个井号(#),后跟该元素的 id。

attention:

不同于类选择器,ID 选择器不能结合使用,因为 ID 属性不允许有以空格分隔的词列表。

类选择器

类选择器选择有特定 class 属性的 HTML 元素。

如需选择拥有特定 class 的元素,请写一个句点(.)字符,后面跟类名。

您还可以指定只有特定的 HTML 元素会受类的影响。

p.center {
  text-align: center;
  color: red;
}

通用选择器

通用选择器(*)选择页面上的所有的 HTML 元素。

分组选择器

分组选择器选取所有具有相同样式定义的 HTML 元素。

h1, h2, p {
  text-align: center;
  color: red;
}

声明分组

我们既可以对选择器进行分组,也可以对声明分组。

h1 {font: 28px Verdana;}
h1 {color: blue;}
h1 {background: red;}

注意:在规则的最后一个声明后也加上分号是一个好习惯

属性选择器

属性选择器可以根据元素的属性及属性值来选择元素。

如果您希望把包含标题(title)的所有元素变为红色,可以写作:

*[title] {color:red;}

与上面类似,可以只对有 href 属性的锚(a 元素)应用样式:

a[href] {color:red;}

还可以根据多个属性进行选择,只需将属性选择器链接在一起即可。

例如,为了将同时有 href 和 title 属性的 HTML 超链接的文本设置为红色,可以这样写:

a[href][title] {color:red;}

例如,可以对所有带有 alt 属性的图像应用样式,从而突出显示这些有效的图像:

img[alt] {border: 5px solid red;}

还能具体属性值

a[href="http://www.w3school.com.cn/about_us.asp"] {color: red;}
a[href="http://www.w3school.com.cn/"][title="W3School"] {color: red;}

属性值必须完全匹配,差一点都不行

<p class="important warning">This paragraph is a very important warning.</p>

这样子就达咩

p[class="important warning"] {color: red;}

部分匹配的方法,使用则需要使用波浪号(~)

p[class~="important"] {color: red;}

子串匹配属性选择器

类型 描述
[abc^=”def”] 选择 abc 属性值以 “def” 开头的所有元素
[abc$=”def”] 选择 abc 属性值以 “def” 结尾的所有元素
[abc*=”def”] 选择 abc 属性值中包含子串 “def” 的所有元素

特定的属性选择类型

上面这个规则会选择 lang 属性等于 en 或以 en- 开头的所有元素。

*[lang|="en"] {color: red;}

后代选择器

后代选择器可以选择作为某元素后代的元素。又称为包含选择器。用空格间隔开来

举例来说,如果您希望只对 h1 元素中的 em 元素应用样式,

h1 em {color:red;}

有关后代选择器有一个易被忽视的方面,即两个元素之间的层次间隔可以是无限的。

子元素选择器

如果您不希望选择任意的后代元素,而是希望缩小范围,只选择某个元素的子元素,请使用子元素选择器(Child selector)。使用大于号

例如,如果您希望选择只作为 h1 元素子元素的 strong 元素,可以这样写:

h1 > strong {color:red;}

结合后代选择器

table.company td > p

上面的选择器会选择作为 td 元素子元素的所有 p 元素,这个 td 元素本身从 table 元素继承,该 table 元素有一个包含 company 的 class 属性。

相邻兄弟选择器

如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使用相邻兄弟选择器(+号)

例如,如果要增加紧接在 h1 元素后出现的段落的上边距,可以这样写

h1 + p {margin-top:50px;}

这个选择器读作:“选择紧接在 h1 元素后出现的段落,h1 和 p 元素拥有共同的父元素”。(这个有点意思)

这个有意思了

<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
li + li {font-weight:bold;}
</style>
</head>

<body>
<div>
  <ul>
    <li>List item 1</li>
    <li>List item 2</li>
    <li>List item 3</li>
  </ul>
  <ol>
    <li>List item 1</li>
    <li>List item 2</li>
    <li>List item 3</li>
  </ol>
</div>
</body>
</html>

输出结果是下面这样子的

  • List item 1
  • List item 2
  • List item 3
  1. List item 1
  2. List item 2
  3. List item 3

使用

三种方式:

  • 外部 CSS
  • 内部 CSS
  • 行内 CSS

外部CSS在head里面引用

<link rel="stylesheet" type="text/css" href="mystyle.css">

内部css

在head里面<style>直接定义。

行内CSS

如需使用行内样式,请将 style 属性添加到相关元素。style 属性可包含任何 CSS 属性。

<h1 style="color:blue;text-align:center;">This is a heading</h1>

就近原则,页面中的所有样式将按照以下规则“层叠”为新的“虚拟”样式表,其中第一优先级最高:

  1. 行内样式(在 HTML 元素中)
  2. 外部和内部样式表(在 head 部分)
  3. 浏览器默认样式

注释

使用 /*...*/,能够横跨多行

/* 这是一条单行注释 */

颜色

背景色

<h1 style="background-color:DodgerBlue;">China</h1>

文本颜色

<p style="color:DodgerBlue;">China is a great country!</p>

边框颜色

<h1 style="border:2px solid Tomato;">Hello World</h1>

颜色值

<h1 style="background-color:rgb(255, 99, 71);">...</h1>
<h1 style="background-color:#ff6347;">...</h1>
<h1 style="background-color:hsl(9, 100%, 64%);">...</h1>

<h1 style="background-color:rgba(255, 99, 71, 0.5);">...</h1>
<h1 style="background-color:hsla(9, 100%, 64%, 0.5);">...</h1>

背景

颜色

background-color 背景颜色

opacity 不透明度

**注意:**使用 opacity 属性为元素的背景添加透明度时,其所有子元素都继承相同的透明度。这可能会使完全透明的元素内的文本难以阅读。可以使用rgba

图片

background-image 属性指定用作元素背景的图像。

默认情况下,图像会重复,以覆盖整个元素。

body {
  background-image: url("paper.gif");
}

背景重复

repeat-x是水平重复,repeat-y是垂直重复

body {
  background-image: url("gradient_bg.png");
  background-repeat: repeat-x;
}

no-repeat 没有重复,只显示一次

background-position指定图像位置,放到右上角

body {
  background-image: url("tree.png");
  background-repeat: no-repeat;
  background-position: right top;
}

附着

background-attachment 属性指定背景图像是应该滚动还是固定的(不会随页面的其余部分一起滚动):fixed是在显示器上固定,scroll是随浏览器滚动

body {
  background-image: url("tree.png");
  background-repeat: no-repeat;
  background-position: right top;
  background-attachment: fixed;
}

简写

在使用简写属性时,属性值的顺序为:

  • background-color
  • background-image
  • background-repeat
  • background-attachment
  • background-position
body {
  background: #ffffff url("tree.png") no-repeat right top;
}

属性值之一缺失并不要紧,只要按照此顺序设置其他值即可。请注意,在上面的例子中,我们没有使用 background-attachment 属性,因为它没有值。

background-size:80px 60px;规定图像的背景图像尺寸

边框

样式

border-style 属性指定要显示的边框类型。

允许以下值:

  • dotted – 定义点线边框
  • dashed – 定义虚线边框
  • solid – 定义实线边框
  • double – 定义双边框
  • groove – 定义 3D 坡口边框。效果取决于 border-color 值
  • ridge – 定义 3D 脊线边框。效果取决于 border-color 值
  • inset – 定义 3D inset 边框。效果取决于 border-color 值
  • outset – 定义 3D outset 边框。效果取决于 border-color 值
  • none – 定义无边框
  • hidden – 定义隐藏边框

宽度

border-width 属性指定四个边框的宽度。

可以将宽度设置为特定大小(以 px、pt、cm、em 计),也可以使用以下三个预定义值之一:thin、medium 或 thick:

特定边的宽度

border-width 属性可以设置一到四个值(用于上边框、右边框、下边框和左边框):

p.one {
  border-style: solid;
  border-width: 5px 20px; /* 上边框和下边框为 5px,其他边为 20px */
}

颜色

border-color 属性用于设置四个边框的颜色。

可以通过以下方式设置颜色:

  • name – 指定颜色名,比如 “red”
  • HEX – 指定十六进制值,比如 “#ff0000”
  • RGB – 指定 RGB 值,比如 “rgb(255,0,0)”
  • HSL – 指定 HSL 值,比如 “hsl(0, 100%, 50%)”
  • transparent

也可以特定边框,(用于上边框、右边框、下边框和左边框)。

各边

在 CSS 中,还有一些属性可用于指定每个边框(顶部、右侧、底部和左侧):

p {
  border-top-style: dotted;
  border-right-style: solid;
  border-bottom-style: dotted;
  border-left-style: solid;
}

四个值,则是上右下左;三个值,则是上(右左)下,两个值(上下)(右左),一个值(上右下左)

或者样子理解

四个值,则是上右下左;三个值,则是上右下(左对应右),两个值上右(下对应上)(左对应右),一个值(上右下左)

如果 border-style 属性设置四个值:

border-style: dotted solid double dashed;
  • 上边框是虚线
  • 右边框是实线
  • 下边框是双线
  • 左边框是虚线

如果 border-style 属性设置三个值:

border-style: dotted solid double;
  • 上边框是虚线
  • 右和左边框是实线
  • 下边框是双线

如果 border-style 属性设置两个值:

border-style: dotted solid;
  • 上和下边框是虚线
  • 右和左边框是实线

如果 border-style 属性设置一个值:

border-style: dotted;
  • 四条边均为虚线

简写

border 属性是以下各个边框属性的简写属性:

  • border-width
  • border-style(必需)
  • border-color

您还可以只为一个边指定所有单个边框属性:

p {
  border-left: 6px solid red;
  background-color: lightgrey;
}

圆角

border-radius 属性用于向元素添加圆角边框

p {
  border: 2px solid red;
  border-radius: 5px;
}

外边距

CSS 拥有用于为元素的每一侧指定外边距的属性:

  • margin-top
  • margin-right
  • margin-bottom
  • margin-left

所有外边距属性都可以设置以下值:

  • auto – 浏览器来计算外边距
  • length – 以 px、pt、cm 等单位指定外边距
  • % – 指定以包含元素宽度的百分比计的外边距
  • inherit – 指定应从父元素继承外边距

**提示:**允许负值。

简写,上右下左

p {
  margin: 25px 50px 75px 100px;
}

您可以将 margin 属性设置为 auto,以使元素在其容器中水平居中。

然后,该元素将占据指定的宽度,并且剩余空间将在左右边界之间平均分配。

inherit 值继承父元素的外边距情况。

百分数是相对于父元素的 width 计算的。上面这个例子为 p 元素设置的外边距是其父元素的 width 的 10%。

外边距合并

这节有点牛逼,全新的知识,https://www.w3school.com.cn/css/css_margin_collapse.asp

外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。

合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。

**注释:**只有普通文档流中块框的垂直外边距才会发生外边距合并。行内框、浮动框或绝对定位之间的外边距不会合并。

内边距

CSS padding 属性用于在任何定义的边界内的元素内容周围生成空间。

CSS 拥有用于为元素的每一侧指定内边距的属性:

  • padding-top
  • padding-right
  • padding-bottom
  • padding-left

所有内边距属性都可以设置以下值:

  • length – 以 px、pt、cm 等单位指定内边距
  • % – 指定以包含元素宽度的百分比计的内边距
  • inherit – 指定应从父元素继承内边距

**提示:**不允许负值。

例子是和上面的外边距差不多

CSS width 属性指定元素内容区域的宽度。内容区域是元素(盒模型)的内边距、边框和外边距内的部分。因此,如果元素拥有指定的宽度,则添加到该元素的内边距会添加到元素的总宽度中。这通常是不希望的结果。

在这里,<div> 元素的宽度为 300px。但是,<div> 元素的实际宽度将是 350px(300px + 左内边距 25px + 右内边距 25px)。相当于是加号

div {
  width: 300px;
  padding: 25px;
}

若要将宽度保持为 300px,无论填充量如何,那么您可以使用 box-sizing 属性。这将导致元素保持其宽度。如果增加内边距,则可用的内容空间会减少。相当于是减号

使用 box-sizing 属性将宽度保持为 300px,无论填充量如何:

div {
  width: 300px;
  padding: 25px;
  box-sizing: border-box;
}

宽高

height 和 width 属性用于设置元素的高度和宽度。

height 和 width 属性不包括内边距、边框或外边距。它设置的是元素内边距、边框以及外边距内的区域的高度或宽度。

height 和 width 属性可设置如下值:

  • auto – 默认。浏览器计算高度和宽度。
  • length – 以 px、cm 等定义高度/宽度。
  • % – 以包含块的百分比定义高度/宽度。
  • initial – 将高度/宽度设置为默认值。
  • inherit – 从其父值继承高度/宽度。

**注意:**请记住,heightwidth 属性不包括内边距、边框或外边距!它们设置的是元素的内边距、边框和外边距内的区域的高度/宽度!

这句话到底怎么理解?

max-width 属性用于设置元素的最大宽度。是会随着浏览器大小的变化而变化,针对手机必备。

注释:max-width 属性的值将覆盖 width(宽度)。

还有max-height,min-height,min-width

框模型

或者叫盒模型

CSS 框模型实质上是一个包围每个 HTML 元素的框。它包括:外边距、边框、内边距以及实际的内容。下图展示了框模型:

框模型

对不同部分的说明:

  • 内容 – 框的内容,其中显示文本和图像。
  • 内边距 – 清除内容周围的区域。内边距是透明的。
  • 边框 – 围绕内边距和内容的边框。
  • 外边距 – 清除边界外的区域。外边距是透明的。

元素框的最内部分是实际的内容,直接包围内容的是内边距。内边距呈现了元素的背景。内边距的边缘是边框。边框以外是外边距,外边距默认是透明的,因此不会遮挡其后的任何元素。

**提示:**背景应用于由内容和内边距、边框组成的区域。

内边距、边框和外边距都是可选的,默认值是零。但是,许多元素将由用户代理样式表设置外边距和内边距。可以通过将元素的 margin 和 padding 设置为零来覆盖这些浏览器样式。这可以分别进行,也可以使用通用选择器对所有元素进行设置:

* {
  margin: 0;
  padding: 0;
}

在 CSS 中,width 和 height 指的是内容区域的宽度和高度。增加内边距、边框和外边距不会影响内容区域的尺寸,但是会增加元素框的总尺寸。

**提示:**内边距、边框和外边距可以应用于一个元素的所有边,也可以应用于单独的边。

**提示:**外边距可以是负值,而且在很多情况下都要使用负值的外边距。

元素的总宽度应该这样计算:

元素总宽度 = 宽度 + 左内边距 + 右内边距 + 左边框 + 右边框 + 左外边距 + 右外边距

元素的总高度应该这样计算:

元素总高度 = 高度 + 上内边距 + 下内边距 + 上边框 + 下边框 + 上外边距 + 下外边距

轮廓

轮廓是在元素周围绘制的一条线,在边框之外(而不是外边框),以凸显元素。

CSS 拥有如下轮廓属性:

  • outline-style
  • outline-color
  • outline-width
  • outline-offset
  • outline

**注意:**轮廓与边框不同!不同之处在于:轮廓是在元素边框之外绘制的,并且可能与其他内容重叠。同样,轮廓也不是元素尺寸的一部分;元素的总宽度和高度不受轮廓线宽度的影响。

样式

outline-style 属性指定轮廓的样式,并可设置如下值:

  • dotted – 定义点状的轮廓。
  • dashed – 定义虚线的轮廓。
  • solid – 定义实线的轮廓。
  • double – 定义双线的轮廓。
  • groove – 定义 3D 凹槽轮廓。
  • ridge – 定义 3D 凸槽轮廓。
  • inset – 定义 3D 凹边轮廓。
  • outset – 定义 3D 凸边轮廓。
  • none – 定义无轮廓。
  • hidden – 定义隐藏的轮廓。

宽度

outline-width 属性指定轮廓的宽度,并可设置如下值之一:

  • thin(通常为 1px)
  • medium(通常为 3px)
  • thick (通常为 5px)
  • 特定尺寸(以 px、pt、cm、em 计)

颜色也一样,简写也一样

偏移

outline-offset 属性在元素的轮廓与边框之间添加空间。元素及其轮廓之间的空间是透明的。

下例指定边框边缘外 25px 的轮廓:

p {
  margin: 50px;
  border: 1px solid black;
  outline: 1px solid red;
  outline-offset: 25px;
}

文本

color 属性用于设置文本的颜色。颜色由以下值指定:

  • 颜色名 – 比如 “red”
  • 十六进制值 – 比如 “#ff0000”
  • RGB 值 – 比如 “rgb(255,0,0)”

**提示:**对于 W3C compliant CSS:如果您定义了 color 属性,则还必须定义 background-color 属性。

对齐

文本可以左对齐或右对齐,或居中对齐。当 text-align 属性设置为 “justify” 后,实现两端对齐。

h1 {
  text-align: center;
}

h2 {
  text-align: left;
}

h3 {
  text-align: right;
}

div {
  text-align: justify;
}

方向direction 和 unicode-bidi 属性可用于更改元素的文本方向:

p {
  direction: rtl;
  unicode-bidi: bidi-override;
}

垂直对齐

vertical-align 属性设置元素的垂直对齐方式。

img.top {
  vertical-align: top;
}

img.middle {
  vertical-align: middle;
}

img.bottom {
  vertical-align: bottom;
}

装饰

text-decoration 属性用于设置或删除文本装饰。

none; 通常用于从链接上删除下划线

overline 上划线

line-through 中划线(删除线?)

underline 下划线

转换

text-transform 属性用于指定文本中的大写和小写字母。

uppercase 转大写

lowercase 转小写

capitalize 首字母大写

间距

text-indent 属性用于指定文本第一行的缩进

letter-spacing 字母间距

line-height 行间距 0.8,1.8,这种

word-spacing 词间距

white-space: nowrap; 禁用元素内的文本换行

阴影

text-shadow 属性为文本添加阴影。

最简单的用法是只指定水平阴影(2px)和垂直阴影(2px),加上颜色。

h1 {
  text-shadow: 2px 2px red;
}

给阴影添加模糊效果(5px):

h1 {
  text-shadow: 2px 2px 5px red;
}

字体

在 CSS 中,有五个通用字体族:

  • 衬线字体(Serif)- 在每个字母的边缘都有一个小的笔触。它们营造出一种形式感和优雅感。
  • 无衬线字体(Sans-serif)- 字体线条简洁(没有小笔画)。它们营造出现代而简约的外观。
  • 等宽字体(Monospace)- 这里所有字母都有相同的固定宽度。它们创造出机械式的外观。
  • 草书字体(Cursive)- 模仿了人类的笔迹。
  • 幻想字体(Fantasy)- 是装饰性/俏皮的字体。

一些字体的例子

通用字体族 字体名称实例
Serif Times New Roman Georgia Garamond
Sans-serif Arial Verdana Helvetica
Monospace Courier New Lucida Console Monaco
Cursive Brush Script MT Lucida Handwriting
Fantasy Copperplate Papyrus

我们使用 font-family 属性规定文本的字体。

font-family 属性应包含多个字体名称作为“后备”系统,以确保浏览器/操作系统之间的最大兼容性。请以您需要的字体开始,并以通用系列结束(如果没有其他可用字体,则让浏览器选择通用系列中的相似字体)。字体名称应以逗号分隔。

**注释:**如果字体名称不止一个单词,则必须用引号引起来,例如:”Times New Roman”。

.p1 {
  font-family: "Times New Roman", Times, serif;
}

.p2 {
  font-family: Arial, Helvetica, sans-serif;
}

.p3 {
  font-family: "Lucida Console", "Courier New", monospace;
}

样式

font-style 属性主要用于指定斜体文本。

此属性可设置三个值:

  • normal – 文字正常显示
  • italic – 文本以斜体显示
  • oblique – 文本为“倾斜”(倾斜与斜体非常相似,但支持较少)

font-weight 属性指定字体的粗细

p.normal {
  font-weight: normal;
}

p.thick {
  font-weight: bold;
}

font-variant 属性指定是否以 small-caps 字体(小型大写字母)显示文本。

p.normal {
  font-variant: normal;
}

p.small {
  font-variant: small-caps;
}

大小

font-size 属性设置文本的大小。

**注释:**如果您没有指定字体大小,则普通文本(如段落)的默认大小为 16px(16px = 1em)。

像素是px

em是相对于16px的比例大小

vw是响应式文字大小, 1vw = 视口宽度的 1%(浏览器窗口的大小1%)

简写

font 属性是以下属性的简写属性:

  • font-style
  • font-variant
  • font-weight
  • font-size/line-height
  • font-family

注意:font-sizefont-family 的值是必需的。如果缺少其他值之一,则会使用其默认值。

图标

向 HTML 页面添加图标的最简单方法是使用图标库,比如 Font Awesome。

<script src="https://kit.fontawesome.com/yourcode.js"></script>

<i class="fas fa-heart"></i>

Bootstrap使用

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

<i class="glyphicon glyphicon-thumbs-up"></i>

链接

四种链接状态分别是:

  • a:link – 正常的,未访问的链接
  • a:visited – 用户访问过的链接
  • a:hover – 用户将鼠标悬停在链接上时
  • a:active – 链接被点击时
/* 未被访问的链接 */
a:link {
  color: red;
}

/* 已被访问的链接 */
a:visited {
  color: green;
}

/* 将鼠标悬停在链接上 */
a:hover {
  color: hotpink;
}

/* 被选择的链接 */
a:active {
  color: blue;
}

如果为多个链接状态设置样式,请遵循如下顺序规则:

  • a:hover 必须 a:link 和 a:visited 之后
  • a:active 必须在 a:hover 之后

文本装饰 text-decoration: none;或者underline来删除下划线和添加

背景色就是background-color

列表

在 HTML 中,列表主要有两种类型:

  • 无序列表(<ul>)- 列表项用的是项目符号标记
  • 有序列表(<ol>)- 列表项用的是数字或字母标记

CSS 列表属性使您可以:

  • 为有序列表设置不同的列表项标记
  • 为无序列表设置不同的列表项标记
  • 将图像设置为列表项标记
  • 为列表和列表项添加背景色

list-style-type 属性指定列表项标记的类型。

ul.a {
  list-style-type: circle;
}

ul.b {
  list-style-type: square;
}

ol.c {
  list-style-type: upper-roman;
}

ol.d {
  list-style-type: lower-alpha;
}

list-style-image 属性将图像指定为列表项标记:

ul {
  list-style-image: url('sqpurple.gif');
}

list-style-position 属性指定列表项标记(项目符号)的位置。

“list-style-position: outside;” 表示项目符号点将在列表项之外。列表项每行的开头将垂直对齐。这是默认的。

“list-style-position: inside;” 表示项目符号将在列表项内。由于它是列表项的一部分,因此它将成为文本的一部分,并在开头推开文本。

list-style-type:none 属性也可以用于删除标记/项目符号

list-style 属性是一种简写属性。它用于在一条声明中设置所有列表属性:

在使用简写属性时,属性值的顺序为:

  • list-style-type(如果指定了 list-style-image,那么在由于某种原因而无法显示图像时,会显示这个属性的值)
  • list-style-position(指定列表项标记应显示在内容流的内部还是外部)
  • list-style-image(将图像指定为列表项标记)

表格

边框

如需在 CSS 中设置表格边框,请使用 border 属性。

table, th, td {
  border: 1px solid black;
}

**注意:**上例中的表格拥有双边框。这是因为 table 和 <th><td> 元素都有单独的边框。

合并边框

border-collapse 属性设置是否将表格边框折叠为单一边框:

table {
  border-collapse: collapse;
}

table, th, td {
  border: 1px solid black;
}

如果只希望表格周围有边框,则仅需为 <table> 指定 border 属性:

table {
  border: 1px solid black;
}

水平对齐

text-align 属性设置 <th> 或 中内容的水平对齐方式(左、右或居中)。

默认情况下,<th> 元素的内容居中对齐,而 <td> 元素的内容左对齐。

垂直对齐

vertical-align 属性设置 <th><td> 中内容的垂直对齐方式(上、下或居中)。

默认情况下,表中内容的垂直对齐是居中(<th><td> 元素都是)。

其他

表格内边距,padding

水平分割线, <th><td> 添加 border-bottom 属性,以实现水平分隔线:

可悬停表格

tr:hover {background-color: #f5f5f5;}

条状表格,为了实现斑马纹表格效果,请使用 nth-child() 选择器,并为所有偶数(或奇数)表行添加 background-color:

tr:nth-child(even) {background-color: #f2f2f2;}

响应式表格,在 <table> 元素周围添加带有 overflow-x:auto 的容器元素(例如 <div>),以实现响应式效果:

<div style="overflow-x:auto;">

<table>
... table content ...
</table>

</div>

CSS中级

和基础不一样,中级开始难起来了,个人感觉中级更加重要,高级可能还得往后稍一稍,中级才是CSS基础。

布局

display

display 属性是用于控制布局的最重要的 CSS 属性,规定是否/如何显示元素。

块级元素(block element)总是从新行开始,并占据可用的全部宽度(尽可能向左和向右伸展)。

块级元素的一些例子:

  • <div>
  • <h1> - <h6>
  • <p>
  • <form>
  • <header>
  • <footer>
  • <section>

行内元素(inline element)内联元素不从新行开始,仅占用所需的宽度。

行内元素的一些例子:

  • <span>
  • <a>
  • <img>

**Display: none;**通常与 JavaScript 一起使用,以隐藏和显示元素,而无需删除和重新创建它们。如果您想知道如何实现此目标,请查看本页面上的最后一个实例。

默认情况下,<script> 元素使用 display: none;。

覆盖默认的display,最常见的例子就是把li变成行内元素

li {
  display: inline;
}

**注意:**设置元素的 display 属性仅会更改元素的显示方式,而不会更改元素的种类。因此,带有 display: block; 的行内元素不允许在其中包含其他块元素。

删除OR隐藏?

display:none有点像删除,布局都不在了

visibility:hidden是视觉隐藏,但是布局还是在,占用之前的空间

display的值

描述
none 此元素不会被显示。
block 此元素将显示为块级元素,此元素前后会带有换行符。
inline 默认。此元素会被显示为内联元素,元素前后没有换行符。
inline-block 行内块元素。(CSS2.1 新增的值)
list-item 此元素会作为列表显示。
run-in 此元素会根据上下文作为块级元素或内联元素显示。
compact CSS 中有值 compact,不过由于缺乏广泛支持,已经从 CSS2.1 中删除。
marker CSS 中有值 marker,不过由于缺乏广泛支持,已经从 CSS2.1 中删除。
table 此元素会作为块级表格来显示(类似 ),表格前后带有换行符。
inline-table 此元素会作为内联表格来显示(类似 ),表格前后没有换行符。)。)。)。)。)。)
table-row-group 此元素会作为一个或多个行的分组来显示(类似
table-header-group 此元素会作为一个或多个行的分组来显示(类似
table-footer-group 此元素会作为一个或多个行的分组来显示(类似
table-row 此元素会作为一个表格行显示(类似
table-column-group 此元素会作为一个或多个列的分组来显示(类似
table-column 此元素会作为一个单元格列显示(类似
table-cell 此元素会作为一个表格单元格显示(类似
table-caption 此元素会作为一个表格标题显示(类似
inherit 规定应该从父元素继承 display 属性的值。

inline-block

与 display: inline 相比,主要区别在于 display: inline-block 允许在元素上设置宽度和高度。

同样,如果设置了 display: inline-block,将保留上下外边距/内边距,而 display: inline 则不会。

与 display: block 相比,主要区别在于 display:inline-block 在元素之后不添加换行符,因此该元素可以位于其他元素旁边。

使用 inline-block 来创建导航链接。

display 的一种常见用法:inline-block 用于水平而不是垂直地显示列表项。下例创建了一个水平导航链接:

.nav {
  background-color: yellow; 
  list-style-type: none;
  text-align: center; 
  padding: 0;
  margin: 0;
}

.nav li {
  display: inline-block;
  font-size: 20px;
  padding: 20px;
}

width or max-width

之前讲过了,margin设置成为auto,可以使得元素水平居中

width是固定长度,max-width是最大宽度,当浏览器小于max-width,那么就会变化。

定位

position 属性规定应用于元素的定位方法的类型(static、relative、fixed、absolute 或 sticky)。

position 属性

position 属性规定应用于元素的定位方法的类型。

有五个不同的位置值:

  • static
  • relative
  • fixed
  • absolute
  • sticky

元素其实是使用 top、bottom、left 和 right 属性定位的。但是,除非首先设置了 position 属性,否则这些属性将不起作用。根据不同的 position 值,它们的工作方式也不同。

static

HTML 元素默认情况下的定位方式为 static(静态)。

静态定位的元素不受 top、bottom、left 和 right 属性的影响。

position: static; 的元素不会以任何特殊方式定位;它始终根据页面的正常流进行定位:

relative

position: relative; 的元素相对于其正常位置进行定位。(按我的理解就是相对原本的自身)

设置相对定位的元素的 top、right、bottom 和 left 属性将导致其偏离其正常位置进行调整。不会对其余内容进行调整来适应元素留下的任何空间。直接会挪出去

div.relative {
  position: relative;
  left: 30px;
  border: 3px solid #73AD21;
}

fixed

position: fixed; 的元素是相对于视口定位的(视口就是浏览器窗口),这意味着即使滚动页面,它也始终位于同一位置。 top、right、bottom 和 left 属性用于定位此元素。

div.fixed {
  position: fixed;
  bottom: 0;
  right: 0;
  width: 300px;
  border: 3px solid #73AD21;
}

absolute

position: absolute; 的元素相对于最近的定位祖先元素进行定位(而不是相对于视口定位,如 fixed)。

然而,如果绝对定位的元素没有祖先,它将使用文档主体(body),并随页面滚动一起移动。

注意:“被定位的”元素是其位置除 static 以外的任何元素。

sticky

position: sticky; 的元素根据用户的滚动位置进行定位。

粘性元素根据滚动位置在相对(relative)和固定(fixed)之间切换。起先它会被相对定位,直到在视口中遇到给定的偏移位置为止 – 然后将其“粘贴”在适当的位置(比如 position:fixed)。

**注意:**Internet Explorer、Edge 15 以及更早的版本不支持粘性定位。 Safari 需要 -webkit- 前缀(请参见下面的实例)。您还必须至少指定 toprightbottomleft 之一,以便粘性定位起作用。

理解:有点像某种个人博客的顶栏,一开始是相对偏移的,后来就是固定住了

重叠元素

z-index 可以设置元素的堆栈顺序。

**注意:**如果两个定位的元素重叠而未指定 z-index,则位于 HTML 代码中最后的元素将显示在顶部。

溢出

overflow 属性指定在元素的内容太大而无法放入指定区域时是剪裁内容还是添加滚动条。

overflow 属性可设置以下值:

  • visible – 默认。溢出没有被剪裁。内容在元素框外渲染
  • hidden – 溢出被剪裁,其余内容将不可见
  • scroll – 溢出被剪裁,同时添加滚动条以查看其余内容,这将在水平和垂直方向上添加一个滚动条
  • auto – 与 scroll 类似,但仅在必要时添加滚动条。(还是auto香啊)

**注释:**overflow 属性仅适用于具有指定高度的块元素。

**注释:**在 OS X Lion(在 Mac 上)中,滚动条默认情况下是隐藏的,并且仅在使用时显示(即使设置了 “overflow:scroll”)。

overflow-xoverflow-y

overflow-xoverflow-y 属性规定是仅水平还是垂直地(或同时)更改内容的溢出:

  • overflow-x 指定如何处理内容的左/右边缘。
  • overflow-y 指定如何处理内容的上/下边缘。
div {
  overflow-x: hidden; /* 隐藏水平滚动栏 */
  overflow-y: scroll; /* 添加垂直滚动栏 */
}

浮动

float 属性用于定位和格式化内容,例如让图像向左浮动到容器中的文本那里。

float 属性可以设置以下值之一:

  • left – 元素浮动到其容器的左侧
  • right – 元素浮动在其容器的右侧
  • none – 元素不会浮动(将显示在文本中刚出现的位置)。默认值。
  • inherit – 元素继承其父级的 float 值

最简单的用法是,float 属性可实现(报纸上)文字包围图片的效果。

clear 属性指定哪些元素可以浮动于被清除元素的旁边以及哪一侧。

clear 属性可设置以下值之一:

  • none – 允许两侧都有浮动元素。默认值
  • left – 左侧不允许浮动元素
  • right- 右侧不允许浮动元素
  • both – 左侧或右侧均不允许浮动元素
  • inherit – 元素继承其父级的 clear 值

使用 clear 属性的最常见用法是在元素上使用了 float 属性之后。

clearfix Hack

如果一个元素比包含它的元素高,并且它是浮动的,它将“溢出”到其容器之外:

然后我们可以向包含该元素的元素添加 overflow: auto;,来解决此问题:

.clearfix::after {
  content: "";
  clear: both;
  display: table;
}

实例

水平三个框

* {
  box-sizing: border-box;
}

.box {
  float: left;
  width: 33.33%; /* 三个框(四框使用 25%,两框使用 50%,以此类推) */
  padding: 50px; /* 如果需要在图片间增加间距 */
}

什么是 box-sizing?

您可以轻松地并排创建三个浮动框。但是,当您添加一些内容来扩大每个框的宽度(例如,内边距或边框)时,这个框会损坏。 box-sizing 属性允许我们在框的总宽度(和高度)中包括内边距和边框,确保内边距留在框内而不会破裂。

您可以在我们的 CSS Box Sizing 这一章中学习有关 box-sizing 属性的更多知识。

创建等宽且自动高度的box,需要用到css3的flex-wrap特性,在父元素container中使用

display: flex;

可以使用float:left创建水平菜单

还有一些🌰到这里查看吧

https://www.w3school.com.cn/css/css_float_examples.asp

对齐

居中对齐元素

要使块元素(例如 <div>水平居中,请使用 margin: auto;。

**注意:**如果未设置 width 属性(或将其设置为 100%),则居中对齐无效。

居中对齐文本

如果仅需在元素内居中文本,请使用 text-align: center;:

居中对齐图像

如需居中图像,请将左右外边距设置为 auto,并将其设置为块元素:

img {
  display: block;
  margin-left: auto;
  margin-right: auto;
  width: 40%;
}

左和右对齐使用 position

对齐元素的一种方法是使用 position: absolute; :

.right {
  position: absolute;
  right: 0px;
  width: 300px;
  border: 3px solid #73AD21;
  padding: 20px;
}

**注意:**绝对定位的元素将从正常流中删除,并可能出现元素重叠。

左和右对齐使用 float

对齐元素的另一种方法是使用 float 属性:

.right {
  float: right;
  width: 300px;
  border: 3px solid #73AD21;
  padding: 10px;
}

**注意:**如果一个元素比包含它的元素高,并且它是浮动的,它将溢出其容器。您可以使用 clearfix hack 来解决此问题(请看下面的例子)。

.clearfix {
  overflow: auto;
}

垂直对齐使用 padding

有很多方法可以在 CSS 中垂直对齐元素。一个简单的解决方案是使用上下内边距。

.center {
  padding: 70px 0;
  border: 3px solid green;
}

如需同时垂直和水平对齐,请使用 padding 和 text-align: center;

.center {
  padding: 70px 0;
  border: 3px solid green;
  text-align: center;
}

垂直对齐使用 line-height

另一个技巧是使用其值等于 height 属性值的 line-height 属性:

.center {
  line-height: 200px;
  height: 200px;
  border: 3px solid green;
  text-align: center;
}

/* 如果有多行文本,请添加如下代码:*/
.center p {
  line-height: 1.5;
  display: inline-block;
  vertical-align: middle;
}

垂直对齐使用 position 和 transform

如果您的选择不是 padding 和 line-height,则另一种解决方案是使用 position 和 transform 属性:

.center { 
  height: 200px;
  position: relative;
  border: 3px solid green; 
}

.center p {
  margin: 0;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

垂直对齐使用 Flexbox

弹性布局很牛啊

.center {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 200px;
  border: 3px solid green; 
}

组合器

选择器 示例 示例描述
element element div p 选择 <div> 元素内的所有 <p> 元素。
element>element div > p 选择其父元素是 <div> 元素的所有 <p> 元素。
element+element div + p 选择所有紧随 <div> 元素之后的 <p> 元素。(紧邻的一个)
element1~element2 p ~ ul 选择 <p> 元素后面的每个 <ul> 元素。(后面的全部)

伪类

伪类用于定义元素的特殊状态。

例如,它可以用于:

  • 设置鼠标悬停在元素上时的样式
  • 为已访问和未访问链接设置不同的样式
  • 设置元素获得焦点时的样式

语法

伪类的语法:

selector:pseudo-class {
  property: value;
}

锚伪类

链接能够以不同的方式显示:

/* 未访问的链接 */
a:link {
  color: #FF0000;
}

/* 已访问的链接 */
a:visited {
  color: #00FF00;
}

/* 鼠标悬停链接 */
a:hover {
  color: #FF00FF;
}

/* 已选择的链接 */
a:active {
  color: #0000FF;
}

注意:a:hover 必须在 CSS 定义中的 a:linka:visited 之后,才能生效!a:active 必须在 CSS 定义中的 a:hover 之后才能生效!伪类名称对大小写不敏感。

把鼠标悬停到 <div> 元素以显示 <p> 元素(类似工具提示的效果):

p {
  display: none;
  background-color: yellow;
  padding: 20px;
}

div:hover p {
  display: block;
}

:first-child

:first-child 伪类与指定的元素匹配:该元素是某一个父元素的第一个子元素。

匹配所有 <p> 元素中的首个 <i> 元素

在下面的例子中,选择器匹配所有 <p> 元素中的第一个 <i> 元素:

p i:first-child {
  color: blue;
}

匹配第一个p元素的所有i元素

p:first-child i {
  color: blue;
}

:lang

:lang 伪类允许您为不同的语言定义特殊的规则。

在下面的例子中,:lang 为属性为 lang=”en” 的 <q> 元素定义引号:

<html>
<head>
<style>
q:lang(en) {
  quotes: "~" "~";
}
</style>
</head>
<body>

<p>Some text <q lang="no">A quote in a paragraph</q> Some text.</p>

</body>
</html>

所有CSS伪类

选择器 例子 例子描述
:active a:active 选择活动的链接。
:checked input:checked 选择每个被选中的 元素。
:disabled input:disabled 选择每个被禁用的 元素。
:empty p:empty 选择没有子元素的每个

元素。

:enabled input:enabled 选择每个已启用的 元素。
:first-child p:first-child 选择作为其父的首个子元素的每个

元素。

:first-of-type p:first-of-type 选择作为其父的首个

元素的每个

元素。

:focus input:focus 选择获得焦点的 元素。
:hover a:hover 选择鼠标悬停其上的链接。
:in-range input:in-range 选择具有指定范围内的值的 元素。
:invalid input:invalid 选择所有具有无效值的 元素。
:lang(language) p:lang(it) 选择每个 lang 属性值以 “it” 开头的

元素。

:last-child p:last-child 选择作为其父的最后一个子元素的每个

元素。

:last-of-type p:last-of-type 选择作为其父的最后一个

元素的每个

元素。

:link a:link 选择所有未被访问的链接。
:not(selector) :not(p) 选择每个非

元素的元素。

:nth-child(n) p:nth-child(2) 选择作为其父的第二个子元素的每个

元素。

:nth-last-child(n) p:nth-last-child(2) 选择作为父的第二个子元素的每个

元素,从最后一个子元素计数。

:nth-last-of-type(n) p:nth-last-of-type(2) 选择作为父的第二个

元素的每个

元素,从最后一个子元素计数

:nth-of-type(n) p:nth-of-type(2) 选择作为其父的第二个

元素的每个

元素。

:only-of-type p:only-of-type 选择作为其父的唯一

元素的每个

元素。

:only-child p:only-child 选择作为其父的唯一子元素的

元素。

:optional input:optional 选择不带 “required” 属性的 元素。
:out-of-range input:out-of-range 选择值在指定范围之外的 元素。
:read-only input:read-only 选择指定了 “readonly” 属性的 元素。
:read-write input:read-write 选择不带 “readonly” 属性的 元素。
:required input:required 选择指定了 “required” 属性的 元素。
:root root 选择元素的根元素。
:target #news:target 选择当前活动的 #news 元素(单击包含该锚名称的 URL)。
:valid input:valid 选择所有具有有效值的 元素。
:visited a:visited 选择所有已访问的链接。

所有 CSS 伪元素

选择器 例子 例子描述
::after p::after 在每个

元素之后插入内容。

::before p::before 在每个

元素之前插入内容。

::first-letter p::first-letter 选择每个

元素的首字母。

::first-line p::first-line 选择每个

元素的首行。

::selection p::selection 选择用户选择的元素部分。

导航栏

删除样式和内外边距

ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
}

垂直导航栏

在上面的基础上,将a变成块元素

li a {
  display: block;
  width: 60px;
}
ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  width: 60px;
} 

li a {
  display: block;
}

更多例子看这个吧

https://www.w3school.com.cn/css/css_navbar_vertical.asp

水平导航栏

将display改成inline,就会变成一栏

li {
  display: inline;
}

浮动列表项

创建水平导航栏的另一种方法是浮动 <li> 元素,并为导航链接规定布局:

li {
  float: left;
}

a {
  display: block;
  padding: 8px;
  background-color: #dddddd;
}
  • float: left; – 使用 float 使块元素滑动为彼此相邻
  • display: block; – 将链接显示为块元素可以使整个链接区域都可单击(不仅是文本),而且允许我们指定填充(如果需要,还可以指定高度,宽度,边距等)

​ 更多🌰https://www.w3school.com.cn/css/css_navbar_horizontal.asp

其他

下拉菜单

https://www.w3school.com.cn/css/css_dropdowns.asp

图片库

https://www.w3school.com.cn/css/css_image_gallery.asp

图片精灵

这个有点好玩,一张图有三个图像,靠便宜来用其他的图

https://www.w3school.com.cn/css/css_image_sprites.asp

表单

https://www.w3school.com.cn/css/css_form.asp

  • input[type=text] – 将仅选择文本字段
  • input[type=password] – 将仅选择密码字段
  • input[type=number] – 将仅选择数字字段

计数器

https://www.w3school.com.cn/css/css_counters.asp

带计数器的自动编号

CSS 计数器就像“变量”。变量值可以通过 CSS 规则递增(将跟踪它们的使用次数)。

如需使用 CSS 计数器,我们将使用以下属性:

  • counter-reset – 创建或重置计数器
  • counter-increment – 递增计数器值
  • content – 插入生成的内容
  • counter() 或 counters() 函数 – 将计数器的值添加到元素

如需使用 CSS 计数器,必须首先使用 counter-reset 创建它。

还有套娃计数器

网页布局

https://www.w3school.com.cn/css/css_website_layout.asp

单位

https://www.w3school.com.cn/css/css_units.asp

特异性

https://www.w3school.com.cn/css/css_specificity.asp

特异性规则 1:

在特异性相同的情况下:最新的规则很重要 – 如果将同一规则两次写入外部样式表,那么样式表中后面的规将更靠近要设置样式的元素,因此会被应用:

特异性规则 2:

ID 选择器比属性选择器拥有更高的特异性 – 请看以下三行代码:

特异性规则 3:

上下文选择器比单一元素选择器更具体 – 嵌入式样式表更靠近要设置样式的元素。所以在以下情况下:

特异性规则 4:

类选择器会击败任意数量的元素选择器 – 类选择器(诸如 .intro 会击败 h1、p、div 等):

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇