CSS 三大特性

(一)、继承性


父亲



  <div class="son">儿子</div>
 </div>

  • 作用 : 子元素可以继承父元素的属性样式
  • 什么样的属性可以继承 :
text- 开头的  text-indent、text-align、text-decoration;
 font- 开头的  font四个
 line- 开头的 line-height
 color 都是可以继承的
  • 应用 : 在写页面之前,,我们一般会通过 body 设置一个字体, 让将来页面上所有的标签都能继承这个属性,统一设置默认页面风格 : 比如 font: bold 40px '楷体'
  • 特殊性 : [ 介绍底层 ]
  1. a标签, 本身有自己的颜色, 不能通过继承设置, 如果一定要修改 a 标签的颜色, 直接作用在 a 标签上面
  2. h标签, 本身有自己的字体大小,不能通过继承设置, 如果一定要修改 h 标签的大小, 直接作用在 h 标签上面 (emhuatu)
  3. div 的高度如果不能设置,由内容决定 (没有内容, 高度为0), 宽度默认由父元素继承过来

二)、层叠性

  • 层叠性 : 是浏览器处理冲突的一个特性
p {
     color: red;
 }
 .red {
     font-size: 20px;
     color: green;
 }
 1. 层叠的属性不一样 : 会添加属性
 2. 层叠的属性一样 : 会覆盖
 <p class="red">小马哥</p>
  • 作用 : 如果一个属性通过两个选择器设置到同一个元素上面, 那么这个时候, 一个属性会被层叠掉
  • 代码 :
/* 优先级的问题 */
 .box { background: pink;}
 div {   background: green;
         font-size: 40px;
         color: red;
 }
 div { background: orange;}
 <div class="father"></div>
 //1. 先测试一个
 //2. 再测试上下调换
 //3. 再加个类呢?

三)、优先级

示例: <h1 class="box" id="box" style="color: pink;">滴,滴滴</h1>

  1. 哪有可以改变样式的选择器??
  2. 比较
  1. 优先级 (理解记忆)
!important > 行内样式 > id > 类 > 标签 > 通配符 * > 继承
  1. 元素的三种显示方式

一)、行内元素

  • 属性: display : inline ;
  • 特点 :
1. 一行可以显示多个;  (优点)
 2. 宽度由内容决定
  3. 无法设置宽高   (缺点)
  • 典型代表 : span, a

二)、块级元素

  • 属性 : display : block ;
  • 特点 :
  1. 一行只能显示一个 (算不上缺点)
  2. 宽度继承父元素
  3. 可以设置宽高 (优点)
  • 典型代表 : div, p, h系列

需求 ??? 设置宽高的导航??????


三)、行内块级元素

  • 属性 : display: inline-block ;
  • 特点 :
  1. 一行可以显示多个 (行内)
  2. 有能设置宽高 (块级)
  • 典型代表 : input img , textarea, select, button

四)、三种显示方式的转换

  • display: block; 转成块级
  • display: inline-block; 转成行内块
  • display: inline; 转成行内

<!--

padding-left的特殊性(盒子大小不会变化会自动加减)


有一个大盒子 里面有一个小的盒子


小盒子的宽度继承父盒子


小的盒子添加padding-left , 小盒子的尺寸大小W


不会发生变化的


-->

line-height(行高)和font的连写不能居中 因为font-size里面必须要除以/行高的高度

四、margin 的两种特殊现象

一)、外边距合并现象:

// 盒子左右排序
  margin-left 和 margin-right 叠加
 
 // 盒子上下排序:
 margin-top 和 margin-bottom 合并
 
 // 总结 : 
 两个div上下排序, 在进行设置 margin-top 和 margin-bottom 的时候,两个margin会产生一个合并的现象, 合并的值以大的为准

二)、margin塌陷现象:

如果一个大盒子中包含一个小盒子, 给小盒子设置 margin-top 大盒子会一起向下平移

解决方法:

  1. 给父盒子加一个边框 border-top
  2. 给父盒子加 padding-top
  3. 给父盒子设置属性 overflow: hidden => BFC;
  4. 给父盒子设置浮动 float:left
  5. 给父盒子设置为行内块 display:inline-block

5. 浮动的特点

标准流: 就是浏览器默认摆放盒子的顺序

  1. 浮动的元素会脱离标准流 (脱标)
如果一个元素按照正常的标准流来显示, 会在 html 中所属的位置占位, 后面的元素会紧跟着它, 但是浮动脱离了标准流, 将来在看到浮动的元素以后,就不能以正常的标准流来判断了 (浮动的元素在标准流中不占位置了)
  1. 浮动以后的元素, 会覆盖在标准流的元素之上(比标准流高半个级别)
  2. 浮动的规则: 浮动找浮动, 不浮动找不浮动
  3. 浮动的重点: 浮动的元素只会影响下面的元素
  • 本质 : 浮动的元素受到盒子边框的限制
  1. 浮动的元素会改变显示方式
不管元素是行内元素还是块级元素将来在显示的时候, 都会在同一行显示
 浮动以后的元素可以设置宽高
 
 总结: 浮动以后的元素的显示方式与行内块级元素一样

记忆 :

1. 浮动的元素会脱标 ==> 飘起来了 ==> 比标准流高半个级别  ==> 类似行内块的特点
 2. 浮动的元素会被盒子的边框限制住;

三、清除浮动

浮动对页面的影响:

如果一个父盒子中有一个子盒子, 并且父盒子没有设置高, 子盒子在父盒子中进行了浮动, 那么将来父盒子的高度为0, 由于父盒子的高度为 0, 下面的元素会自动补位, 所以这个时候要进行浮动的清除

浮动: float: left; float: right;
 清除浮动: clear: both;
  1. 额外标签法

在浮动的盒子内部最后, 再放一个块级标签, 在这个标签内使用 clear: both; 来清除浮动对页面的影响

注意: 一般情况不使用这种方式清除浮动, 因为这种方式会在页面中添加额外的标签

(在盒子后面加一个空盒子 并且给这个空盒子设置clear:both)

  1. 使用 overflow 清除浮动

找到浮动盒子的父元素, 再在父元素中添加一个属性, overflow: hidden; 清除父元素中子元素浮动对页面的影响

注意: 一般情况用的也是很多也不用这种方式, 因为 overflow: hidden; 有一个特点, 离开了这个元素所在的区域以后会被隐藏 (后面讲这个方法就懂了)

  1. 使用伪元素清除浮动

伪元素: 在页面上不存在的元素, 但是可以通过 css 添加上去

种类: 常见的就2种

::after(在...之后)
 ::before(在...之前)

注意:

  1. 每个元素都可以添加自己的伪元素
  2. 默认伪元素是行内元素, 可以通过 display 修改

清除浮动:

.clearfix:after {
     content: "";     //伪元素必须给这个content=''
     display: block;   // 必须块级才能清除 
     clear: both;      // 核心代码
 
     height: 0;
     line-height: 0;
     visibility: hidden;
 }
  1. 设置行高 -- 简单粗暴

注意 : 问题? 给谁设置,,, 浮动的父盒子 (height=0 的)

浮动 的不能覆盖文字和行内块

margin和padding在行内元素里使用 左右是有效的上下是无效的。因为行内元素里不可以设置宽高

相对定位(relative)绝对定位(absolute)固定定位(position: fixed)

相对定位是不脱标的 绝对和固定都是脱标的 绝对定位没有父亲的时候相对于浏览器 而固定定位永远都是相对于浏览器的

magin:0 auto 使用的条件 第一:盒子必须有宽度 第二:必须是块级元素

前端html+css几个难点 需要注意的:

定位>浮动>标准

购物车加透明的 用display:none;和display:block:配合 hover

----- 女鞋 ----- 先写一条线 然后 然后再用一个sapn配合定位 然后设置背景透明

滚动条的实现 先写一个盒子 边角都设置成 border-radios:5px。然后再里面设置成背景色 然后4px 0 0 4px