CSS样式,在前面学习HTML的结构时,也讲过一点。大概知道CSS样式如何使用。现在,系统的讲述一下CSS的用法,以及关于CSS样式的一些结构。
参考文章:CSS 背景图像重复 (w3schools.com)
一、CSS介绍
- CSS 代表 层叠样式表
- CSS描述了HTML元素如何在屏幕上显示, 纸张或其他介质
- CSS节省了大量的工作。它可以控制布局 一次多个网页
- 外部样式表存储在CSS文件中
二、CSS语法和基本用法
基本结构:语法、选择器、使用方法、注释方法
CSS 规则由选择器和声明块组成。
语法:
剖析:
CSS选择器,分为5种,前面在HTML也讲述过一些。
1.CSS元素选择器 (一些HTML基本的元素)
比如:p{ } h1{ } div{ }
2.CSS id选择器 (自定义的HTML元素)
比如: #dada{ }
3.CSS类选择器 (使用class自定义的元素)
比如: .dada{ } 或者: p.dada{ } //这种用法,可以指定某个元素p的dada属性!
4.CSS通用选择器
使用*{} 直接应用到所有css元素里面。
5分组选择器 (就是将一部分css样式相同的元素放在一起,减少代码量)
p,h1,div{ }
使用CSS的三种用法:
1.外部CSS (就是自定义的样式表,然后指定样式表。<link rel="stylesheet" href="mystyle.css">)
注意:css样式里面的一些属性,不要有空格!!! 比如:witdh:300px 这个里面不要有空格。
2.内部CSS (就是放在头部的CSS样式)
3.内联CSS (放在内部的 使用style样式声明的!)
注意:在上面三种方法都使用的情况下,内联样式的优先级大于前面两种!
注释方法:
在html里面,注释方法是:<!-- -->
在CSS里面,注释方法是:/* */
CSS颜色和背景
CSS颜色和HTML的介绍是一样的,这里额外记忆一下透明度这个元素。
在CSS颜色里面,可以使用opacity表示透明度:
div {
background-color: green;
opacity: 0.3;
}
也可以使用RGBA的方式,添加透明度:
div {
background: rgba(0, 128, 0, 0.3) /* Green background with 30% opacity */
}
background-color
background-image
background-repeat
background-attachment
background-position
background
(速记属性)
背景颜色:background-color
背景图像:background-image:url("");
背景图像重复:设置不重复:background-repeat:no-repeat 、repeat-x、repeat-y。
背景图像位置:background-position:left top
背景图像附件:background-attachment:fixed、scroll。(一个是固定位置)
简写背景图像的属性:
例如: 相当于包括了上述的所有属性
body {
background: #ffffff url("img_tree.png") no-repeat right top;
}
CSS边框、边距、填充
边框属性:
border-style:设置边框的样式,比如:solid。表示粗体。
solid、dotted(虚线边框)、none、double
border-width:边框的宽度。(就是黑线的宽度。)
它有四个边框,top、right、bottom、left。(按顺时针的顺序。)
border-color:边框颜色,同样它也有四个边框。
border-radius:设置圆角边框。
上述四个边框,也可以这样写:border-top-color (先写是哪一条边框。)或者不写边框,直接写2px,它会根据顺序自动填充。
边距属性:margin
它也有四个属性。另外,学一个继承属性inherit。(继承属性有意思捏,如果使用继承,那么它和padding的展示页面有一些相同之处。)
例如:<div>是父类,它定义了边框1px。右边框的空白空间是100px。
<p.ex1>也是块元素,属于div框架里边,加入继承属性之后。它会距离div的边框100px。
div {
border: 1px solid red;
margin-left: 100px;
}
p.ex1 {
margin-left: inherit;
}
</style>
<div>
<p class="ex1">This paragraph has an inherited left margin (from the div element).</p>
</div>
注意:继承的方式,只能继承边距,不能继承样式。就比如上面的例子,它只继承了边距,边框1px的属性并没有继承。
两个边距会折叠成一个边距:
collapse、比如,定义上边一个元素的下边距是100px。下边一个元素的上边距是20px.按道理是100px+20px。总共120px的距离,但是,实际上只有100px。这就是折叠。
填充:padding
它也存在四个边框属性。它实际上就是,里面的块元素和外边边框的距离。它存在两种方式。一种是加了填充属性整个边框宽度不变,一种是会变化。
它常和盒子属性一起使用。先看会变化的:直接加入填充属性,它会随着填充的大小,而改变整个边框的大小。
使整个边框宽度不变,加入box-sizing属性。
例如:
div {
width: 300px;
padding: 25px; //无论,怎么改变这个值,整个width也不会改变。
box-sizing: border-box;
}
CSS高度/宽度、盒子模型、轮廓(outline)
CSS的width、height和前面所学的border边框的宽度是不一样的概念!!!一个指的是边框,线的宽度,一个是关于某一个属性的宽度。
auto
- 这是默认值。浏览器 计算高度和宽度length
- 定义高度/宽度,单位为px, cm, 等。%
- 定义高度/宽度的百分比 包含块initial
- 将高度/宽度设置为其 默认值inherit
- 高度/宽度将是 继承自其父值
最大宽度:max-width:
盒子模型:
- 内容 - 显示文本和图像的框的内容
- 填充 - 清除内容周围的区域。填充是透明的
- 边框 - 围绕填充和内容的边框
- 边距 - 清除边界外的区域。边距为 透明
轮廓(outline):
它的实质其实就是边框之外的部分,注意和边框不同,和margin边距也不同。轮廓是可能与其它部分重叠的存在。
outline-style
outline-color
outline-width
outline-offset
outline
轮廓样式:outline-style 它的属性和边框样式是一样的。
轮廓偏移:outline-offset 它会在边框之外 偏移一部分空空间。有点像margin。
但又有点不一样,轮廓的改变是不会影响整体的改变,不像前面所学的边框改变一个,会导致整个盒子大小改变,除非加入box-sizing:border-box。
(轮廓没有加偏移之前,它就相当于边框,加了偏移之后,他才会距离边框有一些空间)
简便用法:(按顺序填写,和边框的简便写法是一样的)
outline-width
outline-style
(必填)outline-color
CSS文本
文本颜色:color //和其它不一样,它只需要一个color元素即可。
文本对齐方式:
text-align
text-align-last
direction
unicode-bidi
vertical-align
text-align:center、left、right、justify。 //左对齐或右对齐、居中对齐或两端对齐
text-align-last:文本的最后一行的格式。
direction:表示文本的方向。
例如:p {
direction: rtl;
unicode-bidi: bidi-override;
} //表示,颠倒的方向。
vertical-align:baseline、text-top、text-bottom。垂直对齐的方式。baseline是默认的方式。
文本修饰(下划线text-decoration):
text-decoration-line
text-decoration-color
text-decoration-style
text-decoration-thickness
text-decoration
text-decoration-line:修饰线。overline、underline、line-through(上划线、下划线、中间线)
text-decoration-style:修饰线的样式,注意要先写修饰线属性,才能写这个。
text-decoration-thickness:修饰线的宽度。
简便用法:(按顺序填写。)
text-decoration-line
(必填)text-decoration-color
(可选)text-decoration-style
(可选)text-decoration-thickness
(可选)
例如: p {
text-decoration: underline red double 5px;
}
注意:text-decoration:none。表示无下划线。
文本转换(text-transform):text-transform: uppercase; (大写)、lowercase; capitalize;(首字母大写)
文本间距:
text-indent
letter-spacing
line-height
word-spacing
white-space
text-indent:文本缩进 (就是首行缩进)。text-indent: 50px;
letter-spacing:字母间距。letter-spacing: 5px;
word-spacing:单词间距。
line-height:行高。line-height: 0.8; (注意一下,只有它的属性值是0.8。没有px)
white-space: 空白,禁止换行。 white-space: nowrap;
文本阴影(text-shadow):
它的顺序是:水平、垂直、模糊(可选)、颜色。
例如: h1 {
text-shadow: 0 0 3px #ff0000;
}
CSS字体、图标、链接
字体有很多种,在英文字体里面,请记住两种最常用的:Serif、Sans-serif。
有的时候,书写会出现多个字体。这是作为备用字体,就是当第一种字体没有找到,就使用下面一个字体。
font-family :字体样式。
font-style:字体形状。normal(正常)、italic(斜体)。这里,我稍微感觉有些困惑。在前面边框的学习,有一个border-style: solid(黑实线。)!!!哦哦哦,是不一样的。
font-weight:字体粗细。 (它有一个bold的属性,表示粗体。和前面style样式是分开的。它不能表示字体大小,只能表示粗细。)
font-variant:字体变体。 (这个很少用)
font-size:字体大小。 这里要注意,字体大小是字体大小,不能用字体大小去表示标题h1~h6这种信息。它存在三种表现形式:vw、px、em。
vw会随着视图(浏览器页面)的改变而改变(1vw = 视口宽度的 1%。如果视口宽 50 厘米,则 1vw 为 0.5 厘米。)。px是像素。em相当于16px。
简写字体:
font-style (样式只有斜体和正常)
font-variant (变体,不常用,可选)
font-weight
font-size/line-height (必选)
font-family (必选,字体选择)
例如:
p.a {
font: 20px Arial, sans-serif; (后面是一个字体选择。)
}
图标:
这个介绍较少,建议翻阅网上资料自主添加。它的标签是<icon>。也可以使用链接。
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<i class="glyphicon glyphicon-cloud"></i> //查略资料得。
CSS链接:
链接的标签是<a href="">
它的样式有四个属性,四个链接状态是:
a:link
- 一个正常的、未访问的链接a:visited
- 用户访问过的链接a:hover
- 当用户将鼠标悬停在它上面时的链接a:active
- 点击链接的那一刻
它也经常和 文本修饰符一起使用:text-decoration:none;//如果没有这句,链接会显示下划线。
存在背景颜色、按钮。
举例: 这是一个按钮链接。
<style>
a:link, a:visited {
background-color: #f44336;
color: white;
padding: 14px 25px;
text-align: center;
text-decoration: none;
display: inline-block;
}
a:hover, a:active {
background-color: red;
}
</style>
<a href="default.asp" target="_blank">This is a link</a>
CSS列表、表格
在前面的HTML里面学习了无序(ul)和有序(ol)列表。
list-style-type:列表样式。circle、square。
list-style-image:列表图片。url("")
list-style-position:列表的位置。两种:outside(列表的序号放在div外面)、inside
表格:
HTML学习了<table>、<tr>、<th>、<td>。
它们的属性主要是<border>. (表格的边框)
border-collapse:折叠表格。border-collapse: collapse; //表示,使用单边框。因为默认情况下都是双边框。
td—— text-align:使表格里面的文本对齐。
例如:td{text-align:center;} //居中对齐。
注意:th这个元素,默认是居中对齐的,而td这个元素,默认是靠左对齐。
td—— vertical-align:垂直对齐。文本会靠左下。
有的时候,还会用到表格填充:padding。
th、td—— border-bottom:水平分割器。相当于只有水平一条线。
tr—— tr:hover{ background-color: }。鼠标悬停表。鼠标悬停会在一行出现颜色。
tr:nth-child(even){background-color: }. 条带表格。
响应式表:(有意思捏。)
其实,就是,它多了一个可滑动的滑动栏。
CSS显示属性、最大宽度、位置(定位)
在学习这三个知识点时,先介绍一下块元素和内联元素。这个在HTML介绍过一些。这个很重要。比如:块元素,它的特点是总是从新行开始,它的区域总是尽可能的往两边延伸。
内联元素,它的特点是按需占用,它不会从新行开始。
显示:其实就是display属性以及visibility属性。
display:none(会将它定义的属性都隐藏,在界面上不会展示)
display:inline。将块元素变为内联元素。
比如: li本来是一个列表,这是一个块元素。使用inline元素之后,它会变成一行。
li {
display: inline;
}
<ul>
<li><a href="/html/default.asp" target="_blank">HTML</a></li>
<li><a href="/css/default.asp" target="_blank">CSS</a></li>
<li><a href="/js/default.asp" target="_blank">JavaScript</a></li>
</ul>
display:block。 将内联元素转换成块元素。
例如: a是一个内联元素,它原本是在一行展示,转为块元素之后,就会每一行占用一个。
a {
display: block;
}
<a href="/html/default.asp" target="_blank">HTML</a>
<a href="/css/default.asp" target="_blank">CSS</a>
<a href="/js/default.asp" target="_blank">JavaScript</a>
visibility:hidden。//隐藏某个元素视图,仍会存在遗留下的空间。
设置宽度和最大宽度:
目的是防止,像块元素,它会尽可能的往两边延伸。设置宽度或者最大宽度。就可以解决这个问题。
同时,设置margin:auto。就可以让这个块元素处于居中位置。
位置或称定位(position):
有五种不同的位置值:
static
relative
fixed
absolute
sticky
position:static; //静态位置,不会受其它属性的css样式改变。比如,加入left:20px。这个原本的属性不会边。
position:relative;//相对位置,受其它属性的css样式改变,但整个元素的块元素大小不变,它只会偏移。
position:fixed; //固定位置,它是一种视图位置。这个不太好。因为它会覆盖原本css的视图。它是一种类似于内联属性的位置。
position:absolute; //绝对位置。它是相对于父元素而言的。它一般都放在父元素的框架里边。在父元素里面自定义的css样式。
position:sticky; //粘性位置。它相当于一个块级元素。它会随着滑动栏的滑动而改变。而且不会覆盖原本的视图。(这个有意思捏。)(需要注意的是,这个属性,在有些浏览器是下是不支持的,需要加入一些组件。比如:Safari浏览器,需要加入position: -webkit-sticky; 然后在使用这个属性。)
CSS索引、溢出、浮动和清除
Z-index:
这个元素,可以使得它可以和其它视图重叠。通常和position:relative、absolute。搭配一起使用。它主要的作用是决定,多个图像,哪个图像放在最上面。
例如:z-index:3 要比z-index:1 。要放在1的上面。
注意:如果没有加这个索引元素。那么多个图像的重叠,默认是最后的元素放在最上面。
溢出overflow:
它存在四个属性:visible、auto、hidden、scroll。
overflow:visible; 它保持文本原样,尽管文本超出框架,它也会显示。
overflow:hidden;对于超出框架的文本,它会格式化掉。
overflow:auto; 它会根据文本的大小,自动调整框架大小。
overflow:scroll; 它一般会事先设置框架大小,如果文本超出这个范围,就会出现滑动栏。注意,这个属性,存在两个值。overflow-x。overflow-y。
浮动和清除(float、clear):
浮动属性存在四个值:
left
- 元素浮动在其容器的左侧right
- 元素浮动在其容器的右侧none
- 元素不会浮动(将显示在文本中出现的位置)。这是默认值inherit
- 元素继承其父元素的浮点值
浮动属性和position位置属性有点相似。但其实一点也不同。position位置属性一般是重叠,而浮动属性不会重叠。例如:
div1、div2、div3分别是三个块元素。差不多每一个都要占用一行。
当设置float:left之后,相当于变成了内联元素。只在一行输出。
div {
float: left;
padding: 15px;
}
<div class="div1">Div 1</div>
<div class="div2">Div 2</div>
<div class="div3">Div 3</div>
清除元素clear:
它存在下列属性值:
none
- 元素没有被推到下面 左浮动或右浮动元素。这是默认值left
- 元素被推到左下方 浮动元素right
- 元素被推到下面 右浮动元素both
- 元素被推到两者下方 左右浮动元素inherit
- 元素继承清除值 从其父级
清除元素有意思捏。
它解释了浮动元素的本质,它一般是和浮动元素进行搭配使用的。比如下面这个例子,没有加clear之前,它会作为一个内联元素,放在文本的左边。
加入clear属性之后,它会从内联元素变为恰当的块级元素,从新行开始,不会重叠。(就是auto类型的块级元素。)
.div3 {
float: left;
padding: 10px;
border: 3px solid #73AD21;
}
.div4 {
padding: 10px;
border: 3px solid red;
clear: left;
}
CSS内联块、CSS对齐
内联块:
表示作用在内联元素里面的块级元素。
一般情况,块级布局是单独占一行,并尽可能的往那么延伸。而块级元素只占设置的宽度大小。
这里,内联块元素的布局,就是在设置的内联元素里面,单独占一行。(设置导航栏。)
例如:
使用内联块创建导航链接:
.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;
}
//nav是块级元素。在<li>设置内联块元素。
<ul class="nav">
<li><a href="#home">Home</a></li>
<li><a href="#about">About Us</a></li>
<li><a href="#clients">Our Clients</a></li>
<li><a href="#contact">Contact Us</a></li>
</ul>
CSS水平和垂直对齐:
margin:auto 设置块级元素居中。(不是文本居中噢)
text-align:center; 文本居中。
有的时候,元素存在可能,图像在块级框架之外。这个时候,需要用清除修复元素。clearfix hack
清除修复元素:
代码元素:
.clearfix::after {
content: "";
clear: both;
display: table;
}
line-height:垂直居中。
transform:translate(%,%) 使用位置变换。
flebox:弹性框。
CSS组合器、伪类、伪元素
组合器:
CSS 中有四种不同的组合器:
- 后代选择器(空格)
- 儿童选择器 (>)
- 相邻同级选择器 (+)
- 常规同级选择器 (~)
后代选择器: 它选择后代所有的p元素。
div p {
background-color: yellow;
}
儿童选择器:> 它只会选择div元素里面的p标签元素
div > p {
background-color: yellow;
}
相邻同级选择器 (+): 它紧跟div元素的下一个p元素。如果不是紧跟的元素,不会起作用,注意不是嵌套在div元素里面的p元素噢。
div + p {
background-color: yellow;
}
常规同级选择器 (~): 它选择div元素后面所有的p元素。
div ~ p {
background-color: yellow;
}
伪类:用于定义特殊语法的元素。语法: 就是冒号:形式。
前面我们学过了:a:hover、a:link、a:visited、a:active。
简单工具悬停的方法: //将悬停的方法放在p元素之前。
div:hover p {
display: block;
}
p:first-child //匹配第一个p元素的标签。
:first-child
p i:first-child //匹配p标签第一个i元素。后面的i元素不会有这个作用。
p i:first-child {
color: blue;
}
<p>I am a <i>strong</i> person. I am a <i>strong</i> person.</p>
p:first-child i //匹配p标签后面所有的i元素。后面的i元素都会有这个样式。
伪元素: 语法用::表示。
::first-line //文本第一行的样式
::first-letter //文本第一行的首字母样式
::before //放置在文本前的图片。
例如: h1::before {
content: url(smiley.gif);
}
::after //放置在文本后的图片。
::marker //标记的文本。例如li、ul这种元素。