自学CSS

层叠样式基础

1. 概念

css和html都是标记语言。
style放在head中。
css写在style中。

css组成
选择器{
	属性: 值;
	属性: 值;
}

2. css基础选择器

选择器分为基础选择器和复合选择器。
基础选择器由单个选择器组成。

2.1 基础选择器

基础选择器包括:
	标签选择器
	类选择器
	id选择器
	通配选择器
	标签选择器
		用html标签名称作为选择器。会把所有该标签名的标签选中
	p {
		color: green;
	}
	类选择器: 一个标签上可以添加多个类名
	.类名 {
		color: green;
	}
	id选择器: id值唯一
	#id名 {
		color: green;
	}
	通配符选择器: 
		*定义,它表示选取页面中所有元素
	* {  
	//所有的标签都会加上这个样式
		color: green;
	}

2.2 复合选择器

后代选择器
子选择器
并集选择器
伪类选择器
2.2.1后代选择器
    <ol>
        <li>我是ol的孩子</li>
        <li>我是ol的孩子</li>
        <li>我是ol的孩子</li>
    </ol>
    <ul>
        <li>我是ul的孩子</li>
        <li>我是ul的孩子</li>
        <li>我是ul的孩子</li>
    </ul>
    <ul class='nav'>
        <li>我是ul的孩子</li>
        <li>我是ul的孩子</li>
        <li>我是ul的孩子</li>
    </ul>
2.2.2后代选择器

用空格表示,所有的后代都会选中(儿子|孙子关系)

//选中ol下的li
ol li{
    color: aqua;
}
//选中ul下的li
ul li{
    color: blue;
}
.nav li {
    color: blue;
}
2.2.3子选择器
> 只选中最亲的儿子
    <div class="nav">
        <a href="#">我是儿子</a>
        <p><a href="#">我是孙子</a></p>
    </div>
//儿子aqua
div>a{
    color: aqua;
}
2.2.4并集选择器

选择多组标签,同时为他们定义相同的样式 用逗号隔开

    <div>熊大</div>
    <p>熊二</p>
    <span>光头强</span>
    <ul class="pig">
        <li>小猪佩奇</li>
        <li>猪爸爸</li>
        <li>猪妈妈</li>
    </ul>
// 熊大熊二小猪一家粉色
div,p, .pig li {
    color: pink;
}
2.2.5 伪类选择器

像某些选择器添加特殊的效果
: 表示

  1. a链接的伪类选择器
    LVHA
    L link
    V visited
    H hover
    A active
    love hate
    hover用的最多
    四个伪类选择器的顺序不能改变 (使用设计上述)

  2. focus伪类选择器
    一般focus是在input上用

input:focus{
background: yellow;
}

3. 字体属性

  1. font-family 字体格式
  2. font-size 字体大小 单位px
  3. font-weight 字体粗细 bold 粗体 bolder 更粗 light 细体
  4. font-style 字体样式 italic 斜体
  5. font可以组合上述4个
font:font-style font-weight font-size/line-height font-family;

4. 文本属性

  1. color 文本颜色
  2. text-align 文本内容水平对齐 left center right
  3. text-decoration 文本装饰
    none
    underline 下划线
    overline 上划线
    line-through 删除线
  4. text-indent 文本缩进 2em em相对单元,当前元素font-size1个文字的大小
  5. line-height 行间距 上间距+字体+下间距
    文字居中的方式:文字的行高===盒子的高度
    行高的上空袭和下空袭把文字寄到中间了,如果行高小于盒子高度,文字偏上 ((行高-文字size)/2 小于box/2 文字偏上);如果行高大于盒子的宽度,文字偏下((行高-文字size)/2 大于box/2 文字偏下)。

5. 引入方式

行内样式表
直接卸载标签中

<p style = 'color: red;font-size: 32px;'>

内部样式表
style标签
外部样式表
写一个.css文件夹
然后再文件中引入

<link rel = 'stylesheet' href = 'css文件路径'>

层叠样式进阶

1.emmet语法

emmet生成html

1. div*3 ---3个div
2. 父子关系---ul>li
3. 兄弟关系---div+p
4. div.box 生成带有class=box的div
5. div#box 生成带有id=box的div
6. div类名有序号  .demo$*6 生成class=demo1-demo6的div
7. 默认显示文字的标签 div{	xxx}*5

emmet生成css

 w100 -- width: 100
 h200

2. 元素显示模式

2.1 块元素、行内元素、行内块元素

html元素分为块元素和行内元素

块元素
<h1>-<h6>
<p>
<div>
<ul>
<ol>
<li>
独占一行
高度height、宽度width、外边距margin、内边距padding、可以控制
宽度默认是父级容器的100%
可以存放行内元素或者块级元素
文字类的元素怒内不能使用块级元素 如p标签内不能存放div
行内元素
<a>
<strong>
<b>
<em>
<i>
<del>
<s>
<ins>
<u>
<span>
一行内可以存放多个行内元素
行内元素不能设置宽度和高度
行内块元素
<img>
<input>
<td>
和相邻行内元素在一行上,但是他们之间有空白空袭,一行可以显示多个
默认宽度就是它本身内容的宽度
高度行高、外边距和内边距可以控制

在这里插入图片描述

2.2 元素转换

/*将行内元素转换为块元素  之后就可以设置高度、宽度*/
display: block;
/*将块元素转换为行内元素 之后就可以同行显示*/
display: inline;
/*将行元素转换为行内块元素 之后就可以同行显示*/
display: inline-block;

3. 背景 background

background = {
background-color,   		transparent透明|color
background-image,			none|url(url)
background-repeat,			repeat|no-repeat|repeat-x|repeat-y
background-attachment,		fix|scroll
background-position			x y ;  center top;第二个值默认居中对齐
}
background: 				rgba(x,x,x,x) a是透明度  0是透明 1是不透明

4. CSS三大特性

层叠性:样式相同的就会被覆盖
继承性:子标签会继承父标签的某些样式,如文本颜色和字号 text- font- line- color
				行高也会继承 字号/行高(尺寸,字号的倍数)
优先级:行内>id>类>元素>通配

在这里插入图片描述
复合选择器会有权重叠加的问题

    <ol>
        <li>我是ol的孩子</li>
        <li>我是ol的孩子</li>
        <li>我是ol的孩子</li>
    </ol>

ol :0,0,0,1+ li: 0,0,0,1 = 0,0,1,0 >0,0,0,1

ol li{
    color: aqua;
}
li{
    color: blue;
}
<ul class="nav1">
    <li class="first">1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
</ul>
.nav1 li {
   color: red;
}
/* 把第一个li粉色加粗 */
.nav1 .first {
    color: pink;
    font-weight: bold;
}

页面布局(重要)

页面布局的三大核心:盒子模型、浮动、定位。
传统网页布局的三种方式

  1. 标准流|文件流,就是标签按照规定好的默认方式排列,氛围块级元素和行内元素
  2. 浮动:浮动可以改变元素的默认排列方式,最典型的应用就是让多个块级元素一行内排列显示。
    布局准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动
  3. 定位

1. 盒子模型

border padding margin

1.1 组成

  1. border 边框
1. border = {
边框粗细, 	border-width
边框样式,	border-style solid实线 dotted点线 dashed虚线
边框颜色    	border-color
}

2. border也可以分为
border-top
border-bottom
border-left
border-right
而且border和上述四个可以同时出现,并且要先写border.

3. 合并两个相邻的单元格:border-collapse: collapse;
4. border会影响盒子的实际大小
  1. padding 内边距
1. 内边距:内容和边框有了距离

2. padding可以分上下左右
一个值:全
二个值: 上下  左右
三个值:上 左右 下
四个值:上 右 下 左

3. padding 也会影响盒子的实际大小
4. 若是标签没有设置宽度值,并且加上了padding,这样是不会影响盒子的宽度
  1. margin 外边距
    盒子与盒子之间的距离
用法同padding

应用:
外边距可以让
i 块级盒子水平居中。		条件: 1. 盒子必须指定width; 2. 盒子左右的外边距都设置为aoto
ii 行内元素居中				条件:只要给父元素添加text-align : center即可

块级盒子水平居中。

<div class="box1"></div>
.box1{
    width: 200px;
    height: 150px;
    background-color: aqua;
    /* 盒子居中 宽度+左右为auto*/
    /* margin: 0 auto; */
    /* margin-left: auto;
    margin-right: auto; */
    margin: auto;
}

行内元素|居中

 <div class="box2">
     <p class="p1">111</p>
 </div>
.box2{
    width: 200px;
    height: 150px;
    background-color: aqua;
    /* 块级元素居中 宽度+左右为auto*/
    margin: 0 auto;
    /* 行内元素或者行内块元素内容居中父元素添加text-align : center即可*/
    text-align: center;
}

外边距合并

1. 相邻元素垂直外边距合并
<div class="box">
    <div class="box1"></div>
    <div class="box2"></div>
</div>
.box1{
    background-color: aqua;
    width: 50px;
    height: 50px;
    margin-bottom: 20px;
}
.box2{
    background-color: red;
    width: 50px;
    height: 50px;
    margin-top: 30px;
}

box1和box2 之间的外边距为30px
box的高度为50+50+30=130
在这里插入图片描述
解决方案,就给一个框定义外边距

2. 嵌套块元素塌陷
<div class="father">
    <div class="son"></div>
</div>
.father{
 width: 500px;
 height: 500px;
 background-color: blue;
 margin-top: 100px;
}
.son{
 width: 200px;
 height: 200px;
 background-color: blueviolet;
 margin-top: 150px;
}

效果图在这里插入图片描述
整体box与上的外边距为150,选择两个嵌套的box的最大的外边距作为最后的外边距
为了实现嵌套的两个box分开的外边距的方法:

  1. 给父块元素增加上边框
.father{
    width: 500px;
    height: 500px;
    background-color: blue;
    margin-top: 100px;
    border-top: solid;
}
.son{
    width: 200px;
    height: 200px;
    background-color: blueviolet;
    margin-top: 150px;
}
  1. 给父块元素增加上内边距
.father{
    width: 500px;
    height: 500px;
    background-color: blue;
    margin-top: 100px;
    padding-top: 1px;
}
.son{
    width: 200px;
    height: 200px;
    background-color: blueviolet;
    margin-top: 150px;
}
  1. 给父元素设定overflow:hidden
.father{
 width: 500px;
    height: 500px;
    background-color: blue;
    margin-top: 100px;
    overflow: hidden;
}
.son{
    width: 200px;
    height: 200px;
    background-color: blueviolet;
    margin-top: 150px;
}

在这里插入图片描述


清除内外边距

*{
	padding: 0;
	margin: 0;
}

行内元素和行内块元素尽量只涉及左右内外边距


  1. content 内容
    在这里插入图片描述

1.2 圆角 css3

border-radius : 锁定尺寸|百分比;
原理
根据锁定尺寸为半径的原和框的四个角对齐,将两个连接点构造的圆弧就是我们的圆角。
在这里插入图片描述
圆形:将radius设置为高度|或者宽度的一半(前提给定的是一个正方形)或者是50% 就是宽度的50%
圆角: 设置为高度的50%

对某一个角设置的石墨烯 左 上 右 下

1.3 盒子阴影 css3

box-shadow

box-shadow={
h-shadow 水平阴影,x轴 正右 负左
v-shadow 竖直阴影  y轴 正下 负上
blur 模糊距离 0 实在的阴影  值越大 影子越虚 
spread 影子尺寸
color
inset内阴影  ourset 外阴影

1.4 文字阴影 css3

text-shadow

text-shadow={
h-shadow 水平阴影,x轴 正右 负左
v-shadow 竖直阴影  y轴 正下 负上
blur 模糊距离 0 实在的阴影  值越大 影子越虚 
color

2. 浮动

float

标签上加上了float,就创建了浮动框。浮动框会找到左边缘,右边缘或者是另外一个浮动框的边缘。

2.1 浮动特性

1. 浮动元素会脱离标准流---浮动元素不占位置
2. 浮动元素会一行内显示并且元素顶部对齐,下端不管,浮动元素是互相贴近不会有缝隙,如果父级宽度装不下这些浮动的盒子,多出的盒子会另起一行对齐。
3. 浮动的元素具有行内元素的特性。就是给行内元素或者块元素加上float属性就变成了行内块元素。可以加weigh属性,行内块元素的宽度没有指定的时候,宽度=内容元素。

在这里插入图片描述
浮动注意点


1 先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置,符合网页布局第一准则。
2 浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流。
.浮动元素的标准流父元素一定都有高度?
不是必要的。
因为有些里面包含我们决定不了个数的,所以高度最好是让子盒子撑开父元素。
(子盒子为浮动元素的时候,父元素的高度就是0.因为浮动元素不占位置。)这时候就需要清除浮动。


浮动元素的父元素高度问题

<div class="box">
    <div class="l1"></div>
    <div class="l2"></div>
</div>
<div class="box1"></div>
        .box{
            width: 800px;
            margin: 100px auto;
        }
        .box div{
            float: left;
            height: 200px;
            width: 200px;
            margin-right: 10px;
            background-color: aqua;
        }
        .box1{
            height: 300px;
            background-color: purple;
        }

在这里插入图片描述
解决方法:清除浮动

清除浮动的本质:清除浮动就是清除浮动元素脱离标准流造成的影响
如果父盒子本身有高度,就不需要清除浮动
清除浮动后,父级就会根据浮动的子盒子自动检测高度,父级有了高度就不会影响下面的标准流了
清除浮动的策略:	
闭合浮动,只让浮动在父盒子内部影响,不影响盒子外面的其他盒子

选择器{clear:属性值[left不允许左侧有浮动元素,right不允许右侧有浮动元素,both同时都不允许];}

1. 额外标签法:隔墙法。就是在最后一个浮动元素后面添加一个额外的块级标签,在设置clear
    <div class="box">
        <div class="l1"></div>
        <div class="l2"></div>
        <p class="clear"></p>
    </div>
    <div class="box1"></div>
        .box{
            width: 800px;
            margin:  0 auto;
        }
        .box div{
            float: left;
            height: 200px;
            width: 200px;
            margin-right: 10px;
            background-color: aqua;
        }
        .box1{
            height: 300px;
            background-color: purple;
        }
        .clear{
            clear: both;
        }

缺点,文档结构被破坏 冗余元素

2. 父级添加overflow
    <div class="box">
        <div class="l1"></div>
        <div class="l2"></div>
    </div>
    <div class="box1"></div>
        .box{
            width: 800px;
            margin:  0 auto;
            /*hidden | sroll |auto*/
            overflow: sroll
        }
        .box div{
            float: left;
            height: 200px;
            width: 200px;
            margin-right: 10px;
            background-color: aqua;
        }
        .box1{
            height: 300px;
            background-color: purple;
        }

缺点无法显示溢出部分的元素

3. 父级添加after伪元素

after指的是在盒子的后面进行操作,是额外标签法的升级版。

    <div class="box clearfix">
        <div class="l1"></div>
        <div class="l2"></div>
    </div>
    <div class="box1"></div>
.box{
    width: 800px;
    margin:  0 auto;
}
.box div{
    float: left;
    height: 200px;
    width: 200px;
    margin-right: 10px;
    background-color: aqua;
}
.box1{
    height: 300px;
    background-color: purple; 
}
.clearfix:after{
    content: "";/*伪元素一定要增加的属性 */
    height: 0; /*不看到该元素*/
    display: block; /*代表添加了一个块级元素*/
    clear: both; /*清除浮动*/
    visibility: hidden; /*不看到该元素*/
}
4. 父级添加双伪元素 
    <div class="box clearfix">
        <div class="l1"></div>
        <div class="l2"></div>
    </div>
    <div class="box1"></div>
        .clearfix:before,.clearfix:after{
            content: "";
            display: block;
        }
        .clearfix:after{
            clear: both;
        }

在这里插入图片描述在这里插入图片描述

3. 定位

效果
1某个元素可以自由的在一个盒子内移动位置,并且压住其他盒子。
2当我们移动窗口的时候,盒子是固定在屏幕某个位置。
3定位的叠放顺序z-index:num num越大,盒子越靠上 z-index是position才有的属性

浮动可以让多个块级盒子一行没有空隙排列显示,经常用于横向排列块级盒子。
定位是可以让盒子自由的在某个盒子内移动位置或者固定屏幕某个位置,并且可以压住其他盒子。

定位=定位模式+边偏移
定位模式用于指定一个元素再文档中的定位方式 : position= {static, relative, absolute, fixed}
边偏移决定该元素的最终位置: top bottom left right

3.1 静态定位(x)

默认定位方式,无定位的意思
position : static;
按照标准流进行排列,没有偏移

3.2 相对定位 (√)

相对定位是相对他自身原来的位置
position : relative;
top: 100px;
left: 100px;
而它原本下面的元素还是再原来位置,不会发生改变。 

3.3 绝对定位

相对于它的祖先元素。
特点
	1. 如果没有祖先元素或者祖先元素没有定位,则以浏览器为准
	2. 如果祖先元素有定位(相对,绝对,固定定位),则以最接近一级的有定位的祖先元素为参考点移动位置。
	3. 绝对元素不占有空间

  1. 绝对定位和相对定位的使用
    子绝父相
    子级绝对定位,不会占有位置,可以放到父盒子里面任何地方,不会影响其他的兄弟盒子。

  2. 绝对定位和浮动的区别:

浮动元素不占空间,之前的元素占有空间不会变,浮动之后的元素会使用浮动元素的位置。
绝对定位元素也不占有空间,但是绝对定位的元素可以在父级元素上的任何位置,浮动元素只能在之后的元素上控制位置。

行内元素加上了浮动后变成行内块元素,可以设置宽度和高度。
行内元素加上了绝对定位或者固定定位之后,也可以设置宽度和高度。

浮动和定位元素都不会发送外边距合并的问题。

浮动元素只会压住他下面标准流的盒子,不会压住他下面标准流盒子里面的文字 浮动用于文字环绕效果
绝对定位或者固定定位会压住标准流下面的盒子以及文字

  1. 绝对定位的盒子水平居中
    标准流盒子水平居中,只用使用margin :auto
    浮动只有左右
    定位的盒子水平居中:
    仅限在绝对定位中
    1.先绝对定位,再left:宽度的一半50%
    2.然后再margin - left:-盒子宽度的一半

3.4 固定定位

固定以浏览器为参照移动元素
跟父元素没有任何关系
不随滚动条滚动
不占有原先位置

固定定位也可以在版心右侧位置对齐

  1. 让固定定位的盒子left:50% 就到了版心的一半位置
  2. 让固定定位的盒子margin-left 版心宽度的一半,就能实现固定定位的盒子贴着版心右侧对齐
.fixposition{
    position: fixed;
    left: 50%;
    top: 50%;
    margin-left: 610px;
}

3.5 粘性定位

相对定位和粘性定位的混合
position: sticky;
top:10px

以浏览器为参考定位(固定定位的特点)
占有原先的位置(相对定位的特点)
必须添加top bottom left right 其中一个才生效

在这里插入图片描述

4. 元素的显示和隐藏

display 显示隐藏  none 隐藏 (不在占有原来的位置)block 块级显示 inline行内显示
visibility 显示隐藏 inherit继承父级的特性 hidden 隐藏(原来的位置保留) visible 可见
overflow 溢出部分显示隐藏  visible 可见 aoto 添加滚动条 hidden 溢出部分小时 scroll 总是显示滚动条
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值