CSS基本知识总结

前言

一个专业的前端开发工程师,开发过程中,相当一部分精力要来处理浏览器的兼容性问题,期望一份代码在不同浏览器上效果是一致的。
在PC端,最常使用的Chrome,Edge浏览器都是基于chrome内核的,兼容效果较好。
在手机端,Android和IOS内置浏览器的内核都和chrome是一样的。
CSS主要学习各种属性,实现不同的组合效果(相比于后端开发,这个更依赖于记忆)。

CSS是什么?

层叠样式表 (Cascading Style Sheets),能够对网页中元素位置的排版进行像素级精确控制, 实现美化页面的效果;能够做到页面的样式和结构分离

基本语法规范

选择器+{一条/N条声明}
选择器表示针对谁进行修改;声明决定修改什么;声明的属性是键值对,使用分号隔开,使用冒号区分键和值。
style 标签可以放到页面任意位置,一般放到 head 标签内。同时CSS不区分大小写,一般使用小写字母。

<style>
	p {
		/* 设置字体颜色 */
		color: red;
		/* 设置字体大小 */
		font-size: 30px;
	}
</style>
<p>hello</p>

引入方式

1.内部样式表
写在 style 标签中,嵌入到 html 内部。类似上述代码。这样可以让样式和页面结构分离,但是在css内容多的时候分离不彻底。(开发阶段,建议写这种样式)
2.行内样式表
通过 style 属性, 来指定某个标签的样式,只适用于写简单样式,只针对某个标签生效。这种写法优先级较高,会覆盖其他样式。
注:一个元素的最终样式是“多方叠加”的结果;多个地方设置的相同样式,会按照优先级保留一个样式显示。
部署阶段,一般采用这种风格,减少不必要的空格/换行/缩进,达到节省带宽的效果。同时样式和结构彻底分离。但是受到浏览器缓存的影响,修改之后不一定立刻生效。

<style>
	div {
		color: red;
	}
</style>
<div style="color:green">想要生活过的去, 头上总得带点绿</div>

3.外部样式
当CSS比较复杂时,可以把CSS代码单独放在一个文件中,然后在HTML中单独引用!
实际开发过程中,主要使用外部样式!
①创建一个css文件
②使用link标签引入css

<link rel="stylesheet" href="[CSS文件路径]">

选择器种类

1.基础选择器

①标签选择器
能快速为同一类型的标签都选择出来,但是不能差异化选择。

<style>
	p {
	color: red;
	}
	div {
	color: green;
	}
</style>
<p>hello</p>
<div>world</div>

②类选择器
类名**.**开头,下方的标签使用 class 属性来调用,多个类名要使用空格分割,

<style>
	.box {
		width: 200px;
		height: 150px;
	}
	.blue {
		color: blue;
	}
</style>
<div class="box blue">蓝盒子</div>

③id 选择器
**#**开头,id 选择器的值和 html 中某个元素的 id 值相同。id 是唯一的,不能被多个标签使用。

<style>
	#ha {
	color: red;
	}
</style>
<div id="ha">哈哈哈</div>

④通配符选择器
使用 * 的定义,选取所有的标签,一般是清空内外边距。

* {
	<!--页面的所有内容都会被改成 红色 -->
 	color: red; 
 	<!-- 修改浏览器的默认样式-->
 	marign: 0;
	padding: 0;
	<!--通过box-sizing属性可以修改浏览器的行为,使边距不再撑大盒子 -->
	box-sizing: border-box;
}
2.复合选择器

①后代选择器
选择父元素中的某个子元素(也可以是孙子), 可以是任意基础选择器的组合(包括类选择器, id 选择器)。

<!--把 ol 中的 li 修改颜色, 不影响 ul-->
<ul>
	<li>aaa</li>
	<li>bbb</li>
	<li>ccc</li>
</ul>
<ol>
	<li>ddd</li>
	<li>eee</li>
	<li>fff</li>
</ol>
<!--这里的li特指ol中的所有li-->
ol li {
	color: red;
}

②子选择器
只能选择子标签。使用大于号分割,只选亲儿子, 不选孙子元素。

<div class="two">
	<a href="#">链接1</a>
	<p><a href="#">链接2</a></p>
</div>

.two>a {
	color: red;
}

③并集选择器
用于选择多组标签。这多种标签同时被设置为同一种样式。
使用逗号分割多个元素,任何基础选择器都可以使用并集选择器,也可以和复合选择器一起使用。

<div>苹果</div>
<h3>香蕉</h3>
<ul>
	<li>鸭梨</li>
	<li>橙子</li>
</ul>
<!--把苹果和香蕉颜色改成红色 -->
div, h3 {
	color: red;
}
<!--把苹果、鸭梨和橙子改成绿色 -->
div, ul>li {
	color: green;
}

④伪类选择器
a. 链接伪类选择器 (和a标签搭配使用,根据a标签的状态来选择)

状态表示
a:link选择未被访问过的链接
a:visited选择已经被访问过的链接
a:hover❤选择鼠标指针悬停上的链接
a:active❤鼠标按下但是还没弹起
<a href="#">小猫</a>
a:link {
	color: black;
	/* 去掉 a 标签的下划线 */
	text-decoration: none;
} 
a:visited {
	color: green;
} 
a:hover {
	color: red;
} 
a:active {
	color: blue;
}

b. force伪类选择器 (选取获取焦点的 input 表单元素)

<div class="three">
	<input type="text">
	<input type="text">
	<input type="text">
	<input type="text">
</div>
<!--此时被选中的表单的字体就会变成红色 -->
.three>input:focus {
	color: red;
}

常见元素属性

字体属性

**font相关CSS属性是可以被继承的,子元素会自动继承父元素的相关属性。**如果在某个元素使用不同的字体,就可以针对这个元素单独设置字体,此时设置的字体样式会自动覆盖原来的字体样式。
设置字体:font-family
大小:font-size (chrome 默认是 16px,单位px不要忘记哦)
粗细:font-weight (700=bold, 400 是不变粗, =normal),取值范围是 100 -> 900
文字样式:font-style (斜体italic,不倾斜normal)

<style>
	.font-family .one {
		font-family: 'Microsoft YaHei';
		font-size: 20px;
		font-weight: bold;
		font-style: italic;
	}
	.font-family .two {
		font-family: '宋体';
	}
</style>
<div class="font-family">
	<div class="one">
		这是微软雅黑
	</div>
	<div class="two">
		这是宋体
	</div>
</div>

文本属性

颜色:color ①预定义的颜色值(直接是单词) ②[最常用] 十六进制形式 ③RGB 方式 ; RGBA(Alpha表示透明度[0,1])
对齐:text-align (center/left/right)控制文字水平方向的对齐
装饰:text-decoration (underline下划线/none啥都没有/overline上划线/line-through删除线), none常用于给a标签去掉下划线。
缩进:text-indent 根据字体大小来设置缩进的像素数量~em是以当前字体大小为基准,eg:1em表示和当前字体大小一样(20px),是一个相对数值,也可以设置为小数,0.8em, 0.2em。
行高:line-height 行高指的是上下文本行之间的基线距离,控制文字垂直方向对齐(chrome 上 normal 为 21 px)
行高等与元素高度, 就可以实现文字居中对齐。

<style>
	.color {
		color: red;
		/* color: rgb(255, 0, 0); */
		/* color: #ff0000; */
	}
	.one {
		text-align: left;
		text-decoration: overline;  /*上划线*/
		text-indent:2em;
	}
	.line-height .two {
		height: 100px;
		line-height: 100px;
	}
</style>
<div class="color">这是一段话</div>
<div class="one">哈哈哈</div>
<div class="line-height">
	<div class="two">
		文本垂直居中
	</div>
</div>

背景属性

背景颜色:background-color 默认transparent透明的
背景图片:background-image 后加url()
背景平铺:background-repeat (repeat/no-repeat/repeat-x/repeat-y)
背景位置:background-position ①方位名词(top, left, right, bottom) ②坐标 ③混合单位

  1. 如果参数的两个值都是方位名词, 则前后顺序无关. (top left 和 left top 等效)
  2. 如果只指定了一个方位名词, 则第二个默认居中. (left 则意味着水平居中, top 意味着垂直居中. )
  3. 如果参数是精确值, 则的的第一个肯定是 x , 第二个肯定是 y. (100 200 意味着 x 为 100, y 为 200)
  4. 如果参数是精确值, 且只给了一个数值, 则该数值一定是 x 坐标, 另一个默认垂直居中。
  5. 如果参数是混合单位, 则第一个值一定为 x, 第二个值为 y 坐标. (100 center 表示横坐标为 100, 垂直居中)
    背景尺寸:background-size (length/percentage/cover/contain)
    注意:cover和contain的区别(cover图片填充内容,contain图片适应内容
<style>
	.bgi .one {
		background-color: red;
		background-image: url(star.jpg);
		height: 300px;
		background-color: red;
		background-position: center;
		background-size: contain;
	}
</style>

<div class="bgi">
	<div class="one"></div>
</div>

圆角矩形

基本用法:通过 border-radius 使边框带圆角效果。

<!--length 是内切圆的半径. 数值越大, 弧线越强烈-->
div {
	width: 200px;
	height: 100px;
	border: 2px solid green;  /**/
	border-radius: 10px;
}

生成圆形:让 border-radius 的值为矩形高度的一半即可。
border-radius: 10px 20px 30px 40px; 也可以这样设置,以坐标原点作为左上,顺时针设置。

元素的显示模式

块级元素 block

常见的元素:h1-h6, p, div, ul, ol, li…
特点:①独占一行 ②高宽,内外边距,行高都可控 ③宽度默认和父元素一样宽 ④是一个容器,里面可以放行内和块级元素

<style>
	.demo1 .parent {
		width: 500px;
		height: 500px;
		background-color: green;
	}
	.demo1 .child {
		/* 不写 width, 默认和父元素一样宽 */
		/* 不写 height, 默认为 0 (看不到了) */
		height: 200px;
		background-color: red;
	}
</style>
<div class="demo1">
	<div class="parent">
		<div class="child">
			child1
		</div>
		<div class="child">
			child2
		</div>
	</div>
</div>

行内元素/内联元素 inline

常见的元素:a, strong, b, em, i, del, s, ins, u, span…
特点:在浏览器中可以与其它行内元素共占一行,只有当多个元素的总宽度大于浏览器的宽度时,才会换行显示。
默认宽度就是本身的内容;并且行内元素只能容纳文本和其他行内元素,不能放块级元素。

<style>
	.demo2 span {
		width: 200px;
		height: 200px;
		background-color: red;
	}
</style>
<div class="demo2">
	<span>child1</span>
	<span>child2</span>
	<span>child3</span>
</div>

可以使用 display 属性可以修改元素的显示模式.
注:这里我们说的独占一行是指元素在浏览器中的运行效果,并不是在编辑器中独占一行。在编辑器中,不论怎么书写代码,都不会影响它在浏览器中的运行效果。
行内元素和块级元素的区别(常见面试题)
块级元素独占一行,行内元素不独占一行。
块级元素可以设置宽高,行内元素不能设置宽高。
块级元素四个方向都能设置内外边距,行内元素垂直方向不能设置。
块级元素默认的宽度和父元素一致,行内元素默认的宽度就是和本身内容相关(如果没有内容,宽度就为0)。
块级元素内部可以容纳其他块级元素和行内元素,而行内元素内部只能包含行内元素。

盒模型

每一个 HTML 元素就相当于是一个矩形的 “盒子”,由内容 content、内边距 padding、边框 border、外边距 margin由内而外组成。

  1. 边框
    粗细: border-width
    样式: border-style 默认没边框,solid 实线边框, dashed 虚线边框, dotted 点线边框
    颜色: border-color
    可以改四个方向的任意边框(border-top/bottom/left/right)
    边框会撑大盒子,实际大小要加上边框大小。通过 box-sizing 属性可以修改浏览器的行为,使边框不再撑大盒子。
  2. 内边距
    padding 设置内容和边框之间的距离。默认是顶着边框来放置的。
    可以通过padding-top,padding-bottom,padding-left,padding-right给四个方向都加上边距。内边距也会影响盒子大小,使用box-sizing:border-box属性也可以使内边距不再撑大盒子。
    复合写法:
    padding: 5px; 表示四个方向都是 5px
    padding: 5px 10px; 表示上下内边距 5px, 左右内边距为 10px
    padding: 5px 10px 20px; 表示上边距 5px, 左右内边距为 10px, 下内边距为 20px
    padding: 5px 10px 20px 30px; 表示 上5px, 右10px, 下20px, 左30px (顺时针)
  3. 外边距
    控制盒子和盒子之间的距离。类似的,通过margin-top, margin-bottom, margin-left, margin-right给四个方向加边距。复合写法同padding一样。
  4. 块级元素水平居中
    前提:指定宽度(如果不指定宽度, 默认和父元素一致),把水平 margin 设为 auto
<!--三种写法均可-->
margin-left: auto; margin-right: auto; /*只能设置水平居中,用top和bottom不能设置垂直居中 */
margin: auto;
margin: 0 auto;

margin:auto是给块级元素用到的
text-align:center是让行内元素/行内块元素居中的(元素里的文字水平居中)

弹性布局

flex布局

flex 是 flexible box 的缩写. 意思为 “弹性盒子”。任何一个 html 元素, 都可以指定为 display:flex 完成弹性布局。
flex 布局的本质是给父盒子添加 display:flex 属性,来控制子盒子的位置和排列方式。

常用属性

justify-content:设置主轴上的子元素排列方式。

描述
flex-start默认值,项目位于容器的开头
flex-end项目位于容器的结尾
center项目位于容器的中央
space-between项目在行与行之间留有间隙
space-around项目在行之前,行之间和行之后留有空间
<div>
	<span>1</span>
	<span>2</span>
	<span>3</span>
	<span>4</span>
	<span>5</span>
</div>
<style>
	div {
		width: 100%;
		height: 150px;
		background-color: red;
		display: flex;
		justify-content: flex-end;
	}
	div span {
		width: 100px;
		height: 100px;
		background-color: green;
	}
</style>

align-items:设置侧轴上的元素排列方式。(默认情况下,水平方向为主轴,垂直方向是侧轴)
取值与justify-content类似(stretch/scenter/flex-start/flex-end/space-between/space-around)
※ stretch是 align-content 的默认值. 意思是如果子元素没有被显式指定高度, 那么就会填充满父元素的高度。

<div>
	<span>1</span>
	<span>2</span>
	<span>3</span>
</div>
<style>
	div {
		width: 500px;
		height: 500px;
		background-color: green;
		display: flex;
		justify-content: space-around;
		align-items: center; /*注意:align-items 只能针对单行元素来实现. 如果有多行元素, 就需要使用 item-contents */
	}
	div span {
		width: 150px;
		height: 100px;
		background-color: red;
	}
</style>

使用align-items:center实现垂直居中,这是推荐做法!
通过弹性布局中的这两个属性再加上盒模型中的一些相关边距,基本上就能实现大多数的页面布局效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值