赞
踩
目录
2.6.5CSS Box-sizing,基于box的尺寸计算
固定/滚动背景图像background-attachment
4.10.4justify-content决定项在主轴的对齐方法
4.10.5align-items,决定项在交叉轴(纵轴)的对齐方式
4.11Responsive Web Design,响应式布局
CSS 是层叠样式表(Cascading Style Sheets)的简称,是一种用于描述 HTML 或 XML 文档的呈现的样式表语言。CSS 可以用来控制网页的布局、字体、颜色、背景、边框、动画等各种视觉效果。CSS 也可以让网页适应不同的设备和屏幕尺寸
CSS 的基本语法是由选择器和声明组成的。选择器用来指定要应用样式的元素,声明用来指定元素的属性和值。声明由属性和值组成,属性是要设置的样式特征,值是要赋予属性的具体效果
CSS 的用途是为 HTML 或 XML 文档添加样式,使网页的呈现更加美观和多样化。CSS 可以用来控制网页的以下方面:
- 布局:CSS 可以用来定义网页元素的位置、大小、对齐方式、间距等,实现各种布局效果,如多列布局、响应式布局、网格布局等。
- 字体:CSS 可以用来设置网页文本的字体、大小、颜色、粗细、斜体、阴影等,实现各种文本效果,如渐变文字、立体文字、动态文字等。
- 背景:CSS 可以用来设置网页元素的背景颜色、图片、渐变、图案等,实现各种背景效果,如固定背景、视差滚动背景、动画背景等。
- 边框:CSS 可以用来设置网页元素的边框样式、颜色、宽度、圆角等,实现各种边框效果,如阴影边框、立体边框、动画边框等。
- 动画:CSS 可以用来设置网页元素的动画效果,如移动、旋转、缩放、淡入淡出等,实现各种动画效果,如加载动画、悬停动画、过渡动画等。
除了以上的方面,CSS 还可以用来控制网页的媒体查询、声音、打印样式等,使网页适应不同的设备和场景以及浮动和定位。
css的优势:
1、内容和表现分离
2、网页结构表现统一,可以实现复用
3、样式十分的丰富
4、建议使用独立于html的css文件
5、利用SEO,容易被搜索引擎收录!
CSS 可以通过多种方式应用到 HTML 文档中,例如:
- 内联样式表:在 HTML 元素的 style 属性中直接写入 CSS 代码。
- 内部样式表:在 HTML 文档的 head 标签中使用 style 标签来包含 CSS 代码。
- 外部样式表:在 HTML 文档中使用 link 标签或 import 指令来引用外部的 CSS 文件。
- 浏览器缺省设置
- <h1 style="color: red;background-color: deepskyblue ">标题一</h1>
- <!--内联样式表-->
该声明表示设置当前<h1>和</h1>标签之间的文本字体颜色为蓝色,背景色为黄色。
- <style>
- h1{
- color: red;
- }
- p{
- background-color: yellow;
- color: blue;
- }
- </style>
- <!--外部样式表-->
- <link rel="stylesheet" href="样式文件URL">
样式定义通常保存在外部.css文件中。
有了外部样式表文件,你只需改变一个文件就可以改变整个网站的外观!外部样式表文件不应包含任何HTML标记,必须保存为.css扩展名
这四种方式的优先级是由高到低的,也就是说,内联样式会覆盖内部样式表和外部样式表,内部样式表会覆盖外部样式表。但是,如果在 CSS 声明中使用了 !important 规则,那么这个声明会覆盖任何其他声明,无论它们的优先级如何
补充1!important 规则
!important 是 CSS 中的一个规则,用于增加样式的权重,使其覆盖其他的样式声明
p { color: blue; } p { color: red !important; }在这个例子中,所有的段落元素的颜色都会是红色,因为 !important 规则会覆盖掉普通的 color: blue 声明。
!important 规则与优先级无关,但它与最终的结果直接相关。使用 !important 规则时,应该谨慎,因为它会破坏 CSS 的层叠规则,使得调试变得困难2。
一般来说,建议避免使用 !important 规则,除非有特殊的需求。例如,如果你需要覆盖一个内联样式或一个外部样式表中的样式,或者如果你需要在一个特定的页面中设置一个全局的样式
补充2浏览器下载css文件 渲染
CSS选择器是一种用来选取HTML元素的模式,它可以让您为不同的元素应用不同的样式。CSS选择器有多种类型,例如:
在CSS中最常见的选择器就是元素选择器,即采用HTML文档中的元素名称进行样式规定。元素选择器又称为类型选择器,可以用于匹配HTML文档中某一个元素类型的所有元素。
- p{background:gray}
- /*标签选择器*/
- <h1 class="red">这是标题,字体颜色是红色</h1>
- <p class="red">这是段落,字体颜色也是红色</p>
- .red{color:red}
- /*类选择器*/
- <p id="test">这是一个段落</p>
- #test{color:red}
- /*ID选择器*/
优先级:ID选择器>类选择器>标签选择器
CSS属性选择器有不同的类型,如:
[attribute]:选择所有有指定属性的元素,不管属性值是什么。
[attribute=value]:选择所有指定属性值等于给定值的元素。(绝对等于)
[attribute~=value]:选择所有指定属性值包含给定词的元素。(包含,注意:属性值部分匹配需要将需要选择的关键字用空格分开)
[attribute^=value]:选择所有指定属性值以给定值开头的元素。(以什么开头)
[attribute$=value]:选择所有指定属性值以给定值结尾的元素。(以什么结尾)
[attribute*=value]:选择所有指定属性值包含给定子串的元素。(包含)
[attribute operator value i]:在匹配属性值时忽略大小写(支持 ASCII 字符范围之内的字母)。
[attribute operator value s]:在匹配属性值时区分大小写(支持 ASCII 字符范围之内的字母)。
- <!DOCTYPE html>
- <html lang="en" >
- <head>
- <meta charset="UTF-8">
- <title>代码举例</title>
- <link rel="stylesheet" href="csstest.css">
- <style>
- /* 使用 [attribute] 选择器来选择所有有 class 属性的 li 元素 */
- li[class] {
- color: blue;
- }
-
- /* 使用 [attribute=value] 选择器来选择所有 class 属性值等于 a 的 li 元素 */
- li[class=b] {
- color: red;
- }
-
- /* 使用 [attribute~=value] 选择器来选择所有 class 属性值包含 a 的 li 元素 */
- li[class~=a] {
- color: green;
- }
-
- /* 使用 [attribute|=value] 选择器来选择所有 class 属性值等于 c 或以 c- 开头的 li 元素 */
- li[class|=c] {
- color: yellow;
- }
-
- /* 使用 [attribute^=value] 选择器来选择所有 href 属性值以 https 开头的 a 元素 */
- a[href^=https] {
- font-weight: bold;
- }
-
- /* 使用 [attribute$=value] 选择器来选择所有 href 属性值以 .com 结尾的 a 元素 */
- a[href$=".com"] {
- color: blue;
- font-style: italic;
- }
-
- /* 使用 [attribute*=value] 选择器来选择所有 href 属性值包含 mdn 的 a 元素 */
- a[href*="mdn.com"] {
- color: pink;
- text-decoration: underline;
- }
-
- /* 使用 [attribute operator value i] 选择器来选择所有 title 属性值包含 link 的 a 元素,忽略大小写 */
- a[title*=link i] {
- color: purple;
- text-transform: uppercase;
- }
-
- </style>
- </head>
- <body >
- <ul>
- <li class="b">Item 1</li>
- <li class="a b">Item 2</li>
- <li class="b a">Item 3</li>
- <li class="c-111">Item 4</li>
- <li class="c d">Item 5</li>
- </ul>
- <a href="https://example.com" title="Example Link">Example Link</a>
- <a href="#top" title="Back to Top">Back to Top</a>
- <a href="https://mdn.com" title="MDN Link">MDN Link</a>
-
- </body>
- </html>
descendant selector (space) ,后代选择器
child selector (>) ,子选择器
adjacent sibling selector (+),相邻兄弟选择器
general sibling selector (~),同级选择器
伪类用于定义元素的特殊状态
单行/多行注释同C/C++注释
该语法在外部样式表文件内使用,用于指定当前样式表使用的字符编码。
- @charset "utf-8";
- /*该语句表示外部样式表文件使用了utf-8的编码格式,一般写在外部样式表文件的第一行*/
CSS中的颜色通常是由:一个有效的颜色名称--如 "red""一个RGB值--如 "rgb(255, 0, 0) "一个HEX值--如 "#ff0000 "HTML和CSS支持140个标准颜色名称。
RGB颜色值可以用这个公式指定:rgb(red、green、blue)。每个参数(red、green、blue)都定义了0到255之间的颜色强度。
RGB值也可以用十六进制颜色值的形式来指定: #RRGGBB,其中RR(红)、GG(绿)和BB(蓝)是00至FF之间的十六进制值(与十进制0-255相同)。(RGB值,通过指定16进制颜色值设置。#Rrggbb,其中RR(红),gg(绿)和bb(蓝色)是00和ff之间的十六进制值同十进制0-255)
- 12 /* 一个整数 */
- 4.01 /* 一个小数 */
- -456.8 /* 一个负小数 */
- 0.0 /* 零 */
- +0.0 /* 带正号的零 */
- -0.0 /* 带负号的零 */
- .60 /* 点前的数字可以省略 */
- 10e3 /* 科学计数法 */
- -3.4e-2 /* 科学计数法最复杂的情况 */
表示方法为数值接长度单位。可用于描述文本、图像或其他各类元素的尺寸。
具体表如下:
注意:
- rem,相对于根,即html元素设置的尺寸,在没有显式声明时。浏览器默认html字体为16px
- %,相对于父容器设置的百分比
- CSS像素,是一个相对(具体物理设备)的绝对单位 即在同一设备上,1px长度是相同的,但在不同设备上,1px长度是不同的
- 元素字体属性(大小、行高、间距、缩进等)建议使用em、rem 浏览器默认,1em=16px 元素布局(高宽等)建议使用%、px 当包含多媒体元素、页面宽度预知时,可以使用绝对尺寸
- 外边距——清除边框外的区域,外边距是透明的。
- 内边距——清除内容周围的区域,内边距是透明的。
CSS padding 属性用于在任何定义的边界内的元素内容周围生成空间,元素的内边距也可以被理解为元素内容周围的填充物,因为内边距不影响当前元素与其他元素之间的距离,它只能用于增加元素内容与元素边框之间的距离。属性值不可以为负数
可以为元素的每一侧(上、右、下和左侧)设置内边距;(padding-top; padding-right; padding-bottom; padding-left)(单边内边距)
padding 是透明的 Padding,撑起的空间颜色由元素背景颜色决定
CSS边框属性允许你指定一个元素的边框的样式、宽度和颜色。
- border-style
- border-width
- border-color
- border-radius(CSS3)
border-style, 指定要显示什么样的边界
border-width, 为边框指定宽度
CSS中的border-width属性用于定义HTML元素边框的宽度。该属性有四种取值
边框宽度支持按上下左右分别声明;
border-color
略
边框简写
- p {
- border-width: 1px;
- border-style: solid;
- border-color: red
- }
- /*简写*/
- p {
- border: 1px solid red
- }
border-radius属性
决定了元素边线至其他元素的距离,即撑起了整个元素至其他元素的空间;透明,空间颜色不由元素本身决定,而由父容器决定
margin 属性设置为 auto,以使元素在其容器中水平居中。(必须指定宽度) 然后,该元素将占据指定的宽度,并且剩余空间将在左右边界之间平均分配
可以为元素的每一侧(上、右、下和左侧)设置内边距;(margin-top; margin-right; margin-bottom;margin-left)(单边内边距)同内边距
外边距坍塌
元素的顶部和底部的边距有时会被折叠成一个单一的边距,这个边距等于两个边距中最大的那个。
这种情况不会发生在水平边距(左和右)上!只有垂直边距(上和下)!只有垂直边距(顶部和底部)!
轮廓是在元素周围绘制的一条线,在边框之外,以凸显元素;
轮廓与边框不同之处在于:
轮廓是在元素边框之外绘制的,并且可能与其他内容重叠。
轮廓也不是元素尺寸的一部分;元素的总宽度和高度不受轮廓线宽度的影响;
- outline-style
- outline-color
- outline-width
- outline-offset
- outline
outline-offset 属性用于设置 outline 与一个元素边缘或边框之间的间隙 。outline 是一条绘制在元素周围,超出边框边缘的线条 。元素与其 outline 之间的空间是透明的 。
默认
width/height属性为元素内容的高宽,因此,元素实际占用尺寸仍受margin/border/padding影响 致使在布局时计算复杂,非常不直观
CSS3提供Box-sizing属性,协助调整元素占用尺寸
- Content-box,默认值。仍按内容计算高宽
- Border-box,width/height属性值,为边框内,即border/padding/content的值。但不包括margin值
在CSS3中,box-shadow 属性可以为边框添加阴影,该属性适用于所有元素。box-shadow的默认属性值为none,表示无阴影效果
object-fit属性用于指定<img>或<video>应如何调整大小以适应其容器。
- fill,默认值,缩放填充整合容器
- contain,等比例缩放,填充容器
- cover,等比例缩放,直到高宽任一完全填充,元素居中后,2边剪裁至容器大小
注意:
当容器尺寸小于内部元素尺寸时 会使元素溢出
loading="lazy"属性支持延迟加载图片。在浏览器真正需要渲染显式图片时(具体由各浏览器决定,一般为滚动到需要展示图片时)加载图片,而非打开页面即加载。 当页面中图片过多时,浏览器仅需先加载首屏展示图片,可避免占用网络资源提高页面渲染效率。
CSS背景属性用于定义元素的背景效果。
- body {
- background-image: url("../resources/img.png");
- background-repeat: no-repeat;
- background-attachment: fixed;
- background-size: cover;
- }
background-color属性的默认值是transparent (透明的)
CSS中的background-image属性用于设置背景图像的平铺方式。如果不设置该属性,则默认背景图像会在水平和垂直方向上同时被重复平铺 该属性有四种不同的取值,如下表所示
CSS中的background-attachment属性用于设置背景图像是固定在屏幕上还是随着页面滚动。该属性有两种取值 该属性有四种不同的取值,如表所示
关键词定位
使用关键词组合的方式定位图像,需要从表示水平方向和垂直方向的关键词中各选一个组
合使用,例如 background-position:left top 表示背景图像在元素左上角的位置。
关键词指示的方向非常明显,例如 left 和 right 就是水平方向专用,而 top 和 bottom是垂直方向专用。因此关键词的组合可以不分先后顺序,例如 left top 和 top left 就表达完全相同的含义。关键词 center 既可表示水平居中也可表示垂直居中,组合使用时取决于另一个关键词是水平还是垂直方向, center 则用于补充对立方向。关键词定位的方式也可以简写为单个关键词的形式,这种情况会默认另一个省略的关键词为center。 例如简写形式left就等价于leftcenter或center left,表示水平方向左对齐、垂直方向居中显示。
长度值定位
百分比定位
总结
背景简写
- p{
- background-color:silver;
- background-image:url(image/football.png);
- background-repeat:no-repeat;
- }
- p{ background: silver url(image/football.png) no-repeat }
常用:
文本对齐text-align
Text Decoration. 文本修饰
可用于删除文本中超链接的下划线,以及修饰文本
文本转换
文本间距
CSS 字体属性定义了字体族、字体样式、字体粗细、字体大小
font-family属性
font-style属性
font-weight属性
font-size属性
W3C 建议使用 em 尺寸单位
在CSS3之前,浏览器只能显示设备上已安装的字体。目前在CSS3中,通过@font-face的规则,网页可以显示任何字体。当有特殊字体时,可以将其放在服务器端,在浏览页面时会被自动下载到用户的设备终端。
opacity属性指定元素的透明度
opacity 属性的取值范围为 0.0-1.0。 值越低,越透明
opacity 属性通常与 :hover 选择器一同使用,这样就可以在鼠标悬停时更改透明度
高级链接:组合多个 CSS 属性将链接显示为框/按钮 可创建用于导航的,按钮样式的超链接
list-style-type
list-style-image
CSS中的list-style-image属性可以用于设置列表的标志图标。标志图标可以是来源于本地或者网络的图像文件。如果已使用list-style-image属性声明了列表的标志图标,则不能同时使用list-style-type属性声明列表的标志类型,否则后者将无显示效果。
样式位置list-style-position
样式缩写
除以上5种属性设置外,在CSS中一些通用属性设置同样也可以用于表格元素。例如字体颜色(color) 、 背景( background )、文本对齐( text-align)、 边框( border)、 内边距( padding) 、宽度( width)和高度( height)等,这里不再展开详细说明。
折叠边框border-collapse
边线距离border-spacing
标题位置caption-side
空单元格 empty-cells
表格布局table-layout
几点注意:
- Th,默认字体加粗居中对齐 Td,默认字体左对齐
- tr的默认显式类型为display:table-row;即,内外边距必须声明在td,声明在tr无效
- HTML table标签按整体渲染后加载到节点,CSS table方式逐条渲染。
- 条状表格:为了实现斑马纹表格效果,请使用 nth-child() 选择器,并为所有偶数(或奇数)表行添加 background-color
display的属性值,inline , block, inline-block
inline(行内元素):
使元素变成行内元素,拥有行内元素的特性,即可以与其他行内元素共享一行,不会独占一行.
不能更改元素的height,width的值,大小由内容撑开.
可以使用padding上下左右都有效,margin只有left和right产生边距效果,但是top和bottom就不行.block(块级元素):
使元素变成块级元素,独占一行,在不设置自己的宽度的情况下,块级元素会默认填满父级元素的宽度.
能够改变元素的height,width的值.
可以设置padding,margin的各个属性值,top,left,bottom,right都能够产生边距效果.inline-block(融合行内于块级):
结合了inline与block的一些特点,结合了上述inline的第1个特点和block的第2,3个特点.
用通俗的话讲,就是不独占一行的块级元素。
通过将 display 属性设置为 none 可以隐藏元素。该元素将被隐藏,并且页面将显示为好像该元素不在其中; (display: none; 通常与 JavaScript 一起使用,以隐藏和显示元素,而无需删除和重新创建它们。)
visibility:hidden; 也可以隐藏元素。但是,该元素仍将占用与之前相同的空间。元素将被隐藏,但仍会影响布局。
vertical-align属性设置一个元素的垂直对齐。
CSS overflow 属性指定在元素的内容太大而无法放入指定区域时是剪裁内容还是添加滚动条
overflow属性可设置以下值:
- visible - 默认。溢出没有被剪裁。内容在元素框外渲染
- hidden - 溢出被剪裁,其余内容将不可见
- scroll - 溢出被剪裁,同时添加滚动条以查看其余内容, 将在水平和垂直方向上添加一个滚动条(即使不需要)
- auto - 与 scroll 类似,但仅在必要时添加滚动条
overflow 属性仅适用于具有指定高度的块元素
标准文档流
float属性指定了一个元素是否应该浮动。
补充:
- 元素只能左右浮动,不能上下浮动
- 浮动元素之后的“元素的内容”将围绕它
- 严禁基于float,布局
在对元素声明浮动效果后,该浮动元素会自动生成一个块级框,因此需要明确指定浮动元素的宽度,否则会被默认不占空间。元素在进行浮动时会朝着指定的方向一直移动直到碰到页面的边缘或者上一个浮动框的边缘才会停下来。如果一行之内的宽度不足以放置浮动元素,则该元素会向下移动直到有足够的空间为止再向着指定的方向进行浮动。
clear属性指定哪些元素可以浮动于被清除元素的旁边以及哪一侧 浮动元素会继续浮动,但是被清除的元素将显示在其下方
调色网站推荐https://www.grabient.com/
从上到下的渐变
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>线性渐变</title>
- <style type="text/css">
- .box{
- height: 200px;
- background-color: red;
- background-image:linear-gradient(red,yellow,blue);}
- </style>
- </head>
- <body>
- <div class="box"></div>
- </body>
- </html>
从左到右的渐变
- <style type="text/css">
- #box {
- height: 200px;
- background-color: red; /* 针对不支持渐变的浏览器 */
- background-image: linear-gradient(to right, red , blue);
- }
- </style>
对角线渐变
- <style type="text/css">
- #box {
- height: 200px;
- background-color: red;
- background-image: linear-gradient(to bottom right, red, blue);
- }
- </style>
使用角度的渐变
取代预定义的方向(向下、向上、向右、向左、向右下等等)。值 0deg 等于向上(to top)。值 90deg 等于向右(to right)。值 180deg 等于向下(to bottom)。
- <style type="text/css">
- #box {
- height: 100px;
- background-color: red;
- background-image: linear-gradient(90deg, red, yellow);
- }
- </style>
使用透明度
如需添加透明度,我们使用 rgba() 函数来定义色标。 rgba() 函数中的最后一个参数可以是 0 到 1 的值,它定义颜色的透明度:0 表示全透明,1 表示全彩色(无透明)。
- <style type="text/css">
- .box {
- height: 200px;
- background-image: linear-gradient(to right, rgba(255,0,0,0), rgba(255,0,0,1));
- }
- </style>
重复线性渐变
用repeating-linear-gradient()属性
- <style type="text/css">
- box {
- height: 200px;
- background-color: red;
- background-image: repeating-linear-gradient(red, yellow 10%, green 20%);
- }
- </style>
语法格式:
background-image: radial-gradient(shape size at position, start-color, ..., last-color);
默认地,shape 为椭圆形,size 为最远角,position 为中心。
- <style type="text/css">
- .box{
- height: 300px;
- background-image: radial-gradient(circle,red 20%,yellow 20%,blue)
- }
- </style>
position 属性规定应用于元素的定位方法的类型 定位方法的类型的值:
- static
- relative
- fixed
- absolute
元素其实是使用 top、bottom、left 和 right 属性定位的。但是,除非首先设置了 position 属性,否则这些属性将不起作用。根据不同的 position 值,它们的工作方式也不同。
HTML 元素默认情况下的定位方式为 static(静态) 静态定位的元素不受 top、bottom、left 和 right 属性的影响 position:
static; 的元素不会以任何特殊方式定位;它始终根据页面的正常流进行定位
元素相对于其正常位置进行定位 设置相对定位的元素的 top、right、bottom 和 left 属性将导致其偏离其正常位置进行调整。不会对其余内容进行调整来适应元素留下的任何空间。 Relative,相对于默认正常位置
元素是相对于视口定位的,这意味着即使滚动页面,它也始终位于同一位置。(相对于浏览器窗口区域的固定位置,与页面无关,不随页面滚动) top、right、bottom 和 left 属性用于定位此元素
元素相对于所在的多级容器中,最近的定位祖先元素进行定位(显式声明了relative或fixed的元素,而不是相对于视口定位--如 fixed)
可用于实现悬浮按钮/弹出下拉导航等 绝对定位,背景颜色/宽度等不受容器影响,需定义自身的属性
position: absolute; 如果绝对定位的元素没有祖先,它将使用文档主体(body),并随页面滚动一起移动
使用属性z-index可以为元素规定层次顺序,其属性值为整数,并且该数值越大将叠放在越靠上的位置。
默认是0,最高无上限
CSS3可以将文本布局分割为多个列,实现仿报纸排版效果。
CSS3中column-gap属性用于设置列与列之间的宽度。
CSS3中column-rule属性适用于同时为列与列之间的分割线设置宽度、样式和颜色规范。
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>导航测试</title>
- <style>
- #sidebar1{
- width: 200px;
- box-sizing: border-box;
- }
- #sidebar1 ul{
- list-style-type: none;
- padding: 0;
- background-color: #f1f1f1;
- }
- #sidebar1 a{
- display: block;
- padding: 8px 15px;
- color: #000;
- text-decoration: none;
- }
- #sidebar1 a:hover{
- background: #555;
- color: white;
- }
- </style>
- </head>
- <body>
- <div id="sidebar1">
- <ul>
- <li><a href="https://www.baidu.com/">Home</a></li>
- <li><a href="https://www.baidu.com/">News</a></li>
- <li><a href="https://www.baidu.com/">Contact</a></li>
- <li><a href="https://www.baidu.com/">About</a></li>
- </ul>
-
- </div>
- </body>
- </html>
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <style>
- /* ------------上导航---------- */
- #navbar1 ul {
- /* li撑满ul */
- padding: 0;
- background: #333;
- }
- #navbar1 li {
- /* 使列表inline横向排列,且内部按block撑满高度 */
- display: inline-block;
- }
- #navbar1 a {
- /* 撑满li */
- display: block;
- color: white;
- padding: 14px 16px;
- text-decoration: none;
- }
- #navbar1 a:hover {
- background-color: #111;
- }
-
- </style>
- </head>
- <body>
- <h2>Horizontal Navigation Bar</h2>
- <div id="navbar1">
- <ul>
- <li><a href="#">Home</a></li>
- <li><a href="#">News</a></li>
- <li><a href="#">Contact</a></li>
- <li><a href="#">About</a></li>
- <li><a href="#">Logout</a></li>
- </ul>
- </div>
- </body>
- </html>
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <style>
- .nav ul {
- display: flex;
- padding: 0;
- list-style-type: none;
- background-color: #333;
- }
-
- .nav li a {
- display: block;
- color: white;
- padding: 14px 16px;
- text-decoration: none;
- }
-
- .nav li a:hover {
- background-color: #111;
- }
-
- .nav .right {
- margin-left: auto;
- }
- </style>
- </head>
- <body>
- <hr>
- <h2>Horizontal Navigation Bar</h2>
- <div class="nav">
- <ul>
- <li><a href="#">Home</a></li>
- <li><a href="#">News</a></li>
- <li><a href="#">Contact</a></li>
- <li class="right"><a href="#">About</a></li>
- <li><a href="#">Logout</a></li>
- </ul>
- </div>
- <hr>
- </body>
- </html>
CSS 过渡允许在给定的时间内平滑地改变属性值 创建过渡效果,必须明确两件事: 指定添加过渡效果的CSS属性 指定持续时间。
默认时间为0,即无效果
hover,自动在鼠标移出时,反向执行相应操作
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <style>
- div.tran1 {
- width: 100px;
- height: 100px;
- background: red;
- transition: width 2s;
- }
-
- div.tran1:hover {
- width: 300px;
- }
-
- div.tran2 {
- width: 100px;
- height: 100px;
- background: red;
- transition: width 2s, height 4s;
- }
-
- div.tran2:hover {
- width: 300px;
- height: 300px;
- }
-
- /* */
-
- div.animated_div {
- width: 60px;
- height: 40px;
- background: #92B901;
- color: #ffffff;
- font-weight: bold;
- font-size: 1.5em;
- text-align: center;
- padding: 10px;
- margin: 5px;
- transition-property: width, height, background, font-size, opacity;
- transition-duration: 1s, 1s, 1s, 1s, 1s;
- border-radius: 5px;
- opacity: 0.4;
- }
-
- div.animated_div:hover {
- opacity: 1;
- background: #1ec7e6;
- width: 120px;
- height: 80px;
- font-size: 3.5em;
- }
- </style>
- </head>
- <body>
- <h1>CSS Transitions</h1>
- 鼠标悬浮在以下div时,在2秒内宽度带过渡效果扩展 <br>
- <div class="tran1"></div>
- <hr>
- 宽度按2秒,高度按4秒,过渡扩展 <br>
- <div class="tran2"></div>
- <hr>
- 结合高宽背景色字体尺寸透明度的多项过渡效果 <br>
- transition-property属性值与transition-duration值一一对应 <br>
- <div class="animated_div">BO</div>
-
- </body>
- </html>
解释
CSS 转换(transforms)允许移动、旋转、缩放和倾斜元素
Transform不包含动态过渡效果
Transform属性,及标记方法
所有转换,均为先绘制元素及其他正常元素,再计算并转换元素。因此,其仍占用原位置,且,不影响其他元素的位置。即转换后,为绝对定位
使用 CSS 创建可悬停的下拉列表
鼠标悬浮的下拉选项/信息等
创建一个支持下拉的容器,容器包含下拉激活项(文本/按钮/图片等等),以及隐藏的具体下拉内容
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <style>
- .dropdown-2 {
- position: relative;
- display: inline-block;
- z-index: 1;
- }
-
- button.dropdown-toggle-2 {
- background-color: #4CAF50;
- color: white;
- padding: 16px;
- font-size: 16px;
- border: none;
- cursor: pointer;
- }
-
- .dropdown-menu-2 {
- display: none;
- position: absolute;
- background-color: #f9f9f9;
- min-width: 160px;
- box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
- z-index: 1;
- }
- .dropdown-2:hover .dropdown-menu-2 {
- display: block;
- }
- </style>
- </head>
- <body>
- <h3>Dropdown Menu</h3>
- <div class="dropdown-2">
- <button class="dropdown-toggle-2">
- Mouse over me
- </button>
- <div class="dropdown-menu-2">
- <ul>
- <li>Link 1</li>
- <li>Link 2</li>
- <li>Link 3</li>
- </ul>
- </div>
- </div>
- <hr>
- </div>
- <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Commodi, omnis.</p>
- </body>
- </html>
Card,是包括Google Material Design,iOS Human Interface Guidelines等均涉及的经典设计风格
Card一般由2部分组成,放置标题/图片的header,以及content。因此,创建card容器(div),嵌套header容器(div)以及内容容器(div)
为card容器添加阴影,使容器具有立体悬浮感
有的网站都会有自己的主题色,例如饿了么:
所以很对元素都会用到这些颜色,例如某些字体颜色,弹框提示颜色等等。
如果每次用到的时候,都使用十六进制的颜色表示,那么效率十分低,并且如果万一有一天需要更换主题颜色,那么一个一个更改,是十分繁琐的
为了解决以上问题,css引入了变量。
CSS变量可以访问 DOM,可以创建具有局部或全局范围的变量,使用 JavaScript 和媒体查询来修改变量。var() 函数用于插入 CSS 变量的值。全局变量可以在整个文档进行访问使用,局部变量只能在声明它的选择器内部使用。
例如:
- :root{
- --bg-color: #cccccc;
- }
- .father{
- background-color: var(--bg-color);
- }
:root声明的是全局变量,如果是一个自定义属性用–作为前缀,使用时比如: var(–bg-color)就和#cccccc相等。
好处:
1.可维护性
如果没有CSS变量需要手动改变大量的属性值,使用批量处理查找和替换,可能会影响其他样式规则。使用CSS变量只用改变定义时的值。
2.提高CSS可读性
可以通过变量名判断属性内容
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <style>
- :root {
- --bg-color: #1e90ff;
- --font-color: #cccccc;
- }
-
- #app {
- width: 100px;
- height: 100px;
- background-color: var(--bg-color);
- color: var(--font-color);
- }
- </style>
- </head>
-
- <body>
- <div id="app">
- <p>Hello World!</p>
- </div>
- <br />
- <button onclick="changeColor()">切换背景色</button>
- <script>
- function changeColor() {
- console.log(document.documentElement.style);
- document.documentElement.style.setProperty('--bg-color', 'black');
- document.documentElement.style.setProperty('--font-color', 'white');
- }
- </script>
- </body>
-
- </html>
相关知识点:
以`--`为前缀声明变量名称,通过var()函数访问 可将变量通过`:root`伪类声明在页面根节点
变量值是字符串,可以与其他字符串拼接;
变量值是数值,不能与数值单位直接连用;
变量值带有单位,不能写成字符串
calc()函数
CSS3.0提供基于用户浏览器视窗的相对单位
- vw,相对视窗宽度的百分比
- vh,相对视窗高度的百分比
即,%为相对父元素,vw/vh为相对当前视窗
- Table,嵌套的table会增加开发复杂度不利于后续维护,且严重影响渲染速度;语义描述不符;不利与搜索引擎抓取
- Float,后续元素有不可预期的影响,不利于控制维护
- inline-block,W3C推荐的div+css布局解决方案,可实现自适应布局。但在设置子项的方向/对齐/顺序等方面灵活性较差(当前主流UI框架使用方案)
- Flex,实现横向元素内容的一维弹性布局(基于弹性,也可用于二维布局)
- Grid,实现网页整体结构的二维响应式布局
弹性布局必须声明弹性容器(flex container),display属性设置为flex 弹性容器内的直接子元素,为弹性项(flexible items) 弹性项,具有弹性的,类似inline-block的特性
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <style>
-
- #flex2{
- display: flex;
- background-color: DodgerBlue;
- }
- #flex2 {
- flex-direction: column-reverse;
- }
- #flex2 > div {
- background-color: #f1f1f1;
- width: 100px;
- margin: 10px;
- text-align: center;
- line-height: 75px;
- font-size: 30px;
- }
- </style>
- </head>
- <body>
-
- <div id="flex2">
- <div>1</div>
- <div>2</div>
- <div>3</div>
- </div>
- <hr>
- <p>The "flex-wrap: nowrap;" specifies that the flex items will not
- wrap (this is default):</p>
- </body>
- </html>
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <style>
-
- #flex3{
- display: flex;
- background-color: DodgerBlue;
- }
- #flex3 {
- flex-wrap: nowrap;
- }
-
- #flex3 > div {
- background-color: #f1f1f1;
- width: 100px;
- margin: 10px;
- text-align: center;
- line-height: 75px;
- font-size: 30px;
- }
- </style>
- </head>
- <body>
-
- <div id="flex3">
- <div>1</div>
- <div>2</div>
- <div>3</div>
- <div>4</div>
- <div>5</div>
- <div>6</div>
- <div>7</div>
- <div>8</div>
- <div>9</div>
- <div>10</div>
- <div>11</div>
- <div>12</div>
- </div>
- <hr>
- <p>The "flex-wrap: wrap;" specifies that the flex items will wrap
- if necessary:</p>
- </body>
- </html>
弹性容器的直接子元素自动成为弹性(flex)项目。
有如下属性:
- order
- flex-grow
- flex-shrink
- flex-basis
- flex
- align-self
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <style>
-
- #flex5{
- display: flex;
- background-color: DodgerBlue;
- }
- #flex5 > .grow-1 {
- flex-grow: 3;
- }
-
- #flex5 > .grow-2 {
- flex-grow: 2;
- }
- #flex5 > .grow-1, #flex5 > .grow-2{
- background-color: #f1f1f1;
- width: 100px;
- margin: 10px;
- text-align: center;
- line-height: 75px;
- font-size: 30px;
- }
- </style>
- </head>
- <body>
-
- <div id="flex5">
- <div class="grow-1">1</div>
- <div class="grow-1">2</div>
- <div class="grow-2">3</div>
- </div>
- <hr>
- <hr>
- <p>The "flex-wrap: wrap;" specifies that the flex items will wrap
- if necessary:</p>
- </body>
- </html>
在确定宽度前,项的初始长度,优先级高于width
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <style>
-
- #flex6{
- display: flex;
- background-color: DodgerBlue;
- }
-
- #flex6 > div{
- background-color: #f1f1f1;
- width: 100px;
- margin: 10px;
- text-align: center;
- line-height: 75px;
- font-size: 30px;
- }
- #flex6 > .percent-30 {
- flex-basis: 30%;
- }
-
- #flex6 > .percent-70 {
- flex-basis: 70%;
- }
- </style>
- </head>
- <body>
-
- <div id="flex6">
- <div class="percent-30">1</div>
- <div class="percent-70">2</div>
- <div class="percent-70">3</div>
- </div>
- <hr>
- <p>The "flex-wrap: wrap;" specifies that the flex items will wrap
- if necessary:</p>
- </body>
- </html>
当各元素占空间之和大于容器时,压缩每个元素的比例
默认值1。每个元素等比压缩;0,不压缩
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <style>
-
- #flex7{
- display: flex;
- background-color: DodgerBlue;
- }
-
- #flex7 > div{
- background-color: #f1f1f1;
- width: 100px;
- margin: 10px;
- text-align: center;
- line-height: 75px;
- font-size: 30px;
- }
-
- </style>
- </head>
- <body>
- <div id="flex7">
- <div>1</div>
- <div>2</div>
- <div>3</div>
- <div>4</div>
- <div>5</div>
- <div style="flex-shrink: 0">6</div>
- </div>
- <hr>
- </body>
- </html>
无论使用何种设备(台式机/平板/手机等)浏览网页,网页不应遗漏信息以适应设备,而应调整其内容以适应设备
响应式网页布局,仅基于HTML CSS即可实现
- Max-width,当窗口宽度最大为(即小于等于时)
- Min-width,当窗口宽度最小为(即大于等于时)
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport"
- content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
- <title>Title</title>
- <style>
- :root {
- --col-1: 8.33333333%;
- --col-2: 16.66666667%;
- --col-3: 25%;
- --col-4: 33.33333333%;
- --col-5: 41.66666667%;
- --col-6: 50%;
- --col-7: 58.33333333%;
- --col-8: 66.66666667%;
- --col-9: 75%;
- --col-10: 83.33333333%;
- --col-11: 91.66666667%;
- --col-12: 100%;
- }
- * {
- margin: 0;
- padding: 0;
- box-sizing: border-box;
- }
- /* 测试用的区域样式 */
- .area {
- padding: 10px;
- border: 2px solid #f08c00;
- background-color: #ffec99;
- border-radius: 5px;
- }
- /* 顶级容器 */
- .container {
- max-width: var(--container-width);
- margin: auto;
- /* 默认高度最小一屏 */
- min-height: 100vh;
- }
- /* 全局弹性布局的,行容器 */
- .row {
- display: flex;
- /* 超出项自动换行,从而实现响应式布局 */
- flex-wrap: wrap;
- /* 弹性项上对齐,纵向不拉伸 */
- align-items: flex-start;
- }
- ul.nav-sidebar {
- list-style: none;
- display: var(--nav-sidebar);
- justify-content: var(--nav-sidebar-justify);
- }
- /* 当大于等于200px时 */
- @media (min-width: 200px) {
- :root {
- --container-width: 540px;
- --nav-sidebar: flex;
- --nav-sidebar-justify: space-between;
- }
- .col-sm-1 {width: var(--col-1);}
- .col-sm-2 {width: var(--col-2);}
- .col-sm-3 {width: var(--col-3);}
- .col-sm-4 {width: var(--col-4);}
- .col-sm-5 {width: var(--col-5);}
- .col-sm-6 {width: var(--col-6);}
- .col-sm-7 {width: var(--col-7);}
- .col-sm-8 {width: var(--col-8);}
- .col-sm-9 {width: var(--col-9);}
- .col-sm-10 {width: var(--col-10);}
- .col-sm-11 {width: var(--col-12);}
- .col-sm-12 {width: var(--col-12);}
- }
- /* 当大于等于992px时 */
- @media (min-width: 992px) {
- :root {
- --container-width: 960px;
- --nav-sidebar: block;
- --nav-sidebar-justify: none;
- }
- /* 分12列 */
- .col-md-1 {width: var(--col-1);}
- .col-md-2 {width: var(--col-2);}
- .col-md-3 {width: var(--col-3);}
- .col-md-4 {width: var(--col-4);}
- .col-md-5 {width: var(--col-5);}
- .col-md-6 {width: var(--col-6);}
- .col-md-7 {width: var(--col-7);}
- .col-md-8 {width: var(--col-8);}
- .col-md-9 {width: var(--col-9);}
- .col-md-10 {width: var(--col-10);}
- .col-md-11 {width: var(--col-11);}
- .col-md-12 {width: var(--col-12);}
- }
- </style>
- </head>
- <body>
- <div class="container">
- <!-- header -->
- <div class="area row">
- <h3 class="col-md-12">Responsive Breakpoints: 992px</h3>
- </div>
- <!-- main -->
- <div class="area row">
- <!-- sidebar -->
- <div class="area col-md-2 col-sm-12">
- <ul class="nav-sidebar">
- <li><a href="">Nav 1</a></li>
- <li><a href="">Nav 2</a></li>
- <li><a href="">Nav 3</a></li>
- </ul>
- </div>
- <!-- body -->
- <div class="area col-md-7 col-sm-12">
- <h1>Main article area</h1>
- <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Assumenda autem, eligendi impedit ipsam ipsum
- non similique! Aut dolorum esse expedita, harum ipsum libero, numquam obcaecati provident recusandae
- sint sit suscipit veritatis voluptas.</p>
- </div>
- <!-- aside -->
- <div class="area col-md-3 row col-sm-12">
- <div class="area col-md-12 col-sm-6">Advertising1</div>
- <div class="area col-md-12 col-sm-6">Advertising2</div>
- </div>
- </div>
- <!-- footer -->
- <div class="area row">
- <h3 class="col-md-12">The footer</h3>
- </div>
- </div>
- </body>
- </html>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。