浮动、定位、过渡、动画


前言

CSS提供了三种传统的布局方式:

  • 标准流
  • 浮动
  • 定位

CSS3中另外新加了过渡、动画的属性


一、浮动

float属性规定元素如何浮动,用于定位和格式化内容。
浮动最典型的应用:可以让多个块级元素一行内排列显示。

1.浮动特性

  • 脱离标准普通流的控制移动到指定位置,俗称脱标。
  • 浮动的盒子不再保留原先的位置
  • 多个盒子设置浮动,则按照属性值一行内显示并且顶端对其排列。
  • 浮动元素会具有行内块元素的特性

2.浮动布局注意点:

  • 浮动和标准流的父盒子搭配(先父元素标准流排列上下,再子元素浮动排列左右)。
  • 一个元素浮动了,其余兄弟元素也要浮动(只影响浮动盒子后面的标准流)。

3.浮动要素

语法:

选择器 { float ; 属性值 ; }

属性值:

属性值效果
left元素浮动到其容器的左侧
right元素浮动到其容器的右侧
none元素不会浮动(将显示在文本中刚出现的位置,默认值)
inherit元素继承其父级的float值

示例:

.box {
  float: left;
  width: 33.33%;
  padding: 50px;
}

效果:
在这里插入图片描述

4.清除浮动

clear 属性指定哪些元素可以浮动于被清除元素的旁边以及哪一侧。

属性值含义
none允许两侧都有浮动(默认)
left左侧不许有
right右侧不许有
both左右两侧都不许有
inherit元素继承其父级的clear值

需要清除浮动三种情况:

  • 父级没高度
  • 子盒子浮动
  • 影响下面布局

清除浮动的方法:

方式优点缺点
额外标签法/隔墙法通俗易懂,书写方便结构化较差,无意义标签较多
父级overflow:hidden;书写简单溢出隐藏
父级after伪元素结构语义化正确兼容性不好
父级双伪元素结构语义化正确兼容性不好

特例(溢出问题):

.clearfix {
  overflow: auto;
}
.img2 {
  float: right;
}

在这里插入图片描述

二、定位

position 属性规定应用于元素的定位方法的类型
( stasic、relative、 fixed、 absolute、sticky)

1.定位组成

定位:将盒子定在某一个位置,所以定位也是在摆放盒子,按照定位的方式移动盒子。

定位=定位模式+边偏移

定位模式用于指定一个元素在文档中的定位方式。有static、relative、absolute、fixed四个属性。

边偏移则决定了该元素的最终位置。有top、bottom、left、right四个属性。

2.静态定位static (了解)

HTML 元素默认情况下的定位方式为 static(静态),即无定位。

  • position: static; 的元素不会以任何特殊方式定位;它始终根据页面的正常流进行定位
  • 静态定位的元素不受 top、bottom、left 和 right 属性的影响。

语法:

选择器 { position :static ;}

3.相对定位relative (重要)

position:relative;的元素相对于其正常位置进行定位。

语法:

选择器 { position : relative ;}

设置相对定位的元素的 top、right、bottom 和 left属性将导致其偏离其正常位置进行调整。不会对其余内容进行调整来适应元素留下的任何空间。

示例:

div.relative {
  position: relative;
  left: 30px;
  border: 3px solid pink;
}

在这里插入图片描述

4.固定定位fixed (重要)

position:fixed;的元素是相对于视口定位的,这意味着即使滚动页面,它也始终位于同一位置。

  • top、right、bottom 和 left 属性用于定位此元素。
  • 固定定位的元素不会在页面中通常应放置的位置上留出空隙。

语法:

选择器 { position : fixed ; }

示例:

div.fixed {
  position: fixed;
  top:50px;
  left:30px;
  width: 300px;
  border: 3px solid pink;
}

在这里插入图片描述

5.绝对定位absolute(重要)

position: absolute; 的元素相对于最近的定位祖先元素进行定位(而不是相对于视口定位,如 fixed)。

特点:

  • 如果没有祖先元素或者祖先元素没有定位,则以浏览器为准定位。
  • 如果祖先元素有定位(relative、absolute、fixed),则以最近一级的有定位的祖先元素作为参考点来移动位置。
  • 绝对定位不再占原来的位置。

语法:

选择器 { position :absolute ;}

示例:

div.absolute {
  position: absolute;
  top: 80px;
  right: 0;
  width: 200px;
  height: 100px;
  border: 3px solid pink;
}

在这里插入图片描述
加了定位的盒子就不能用 margin: 0 auto; 来使盒子水平居中
解决办法:

1.水平

选择器 { left: 50%;
         margin-left:-(盒子宽的一半);
         }

2.垂直

选择器 { top: 50%;
         margin-top:-(盒子宽的一半);
         }

6.粘性定位sticky(了解)

position: sticky; 的元素根据用户的滚动位置进行定位。

特点:

  • 以浏览器的可视窗口为参照点移动。
  • 占有原先的位置。
  • 必须添加top、left、right、bottom其中一个才有效。
  • 兼容性差,IE不支持

语法:

选择器 { position :sticky ;top :10px;}

7.子绝父相

子级使用绝对定位,父级则需要相对定位。

  • 自己绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子。
  • 父盒子需要加定位限制子盒子在父盒子内显示。
  • 父盒子布局时,需要占有位置,因此父亲只能是相对定位。

8.定位叠放次序

用z-index属性定义层叠关系。position 的层叠是按顺序层叠的,不过可以通过设置 z-index 来改变层叠顺序,只有 relative,absolute,fixed 可以设置 z-index。

选择器 { z-index : 1;}

  • 数值可以为正整数、负数或0,默认为auto,数值越大,盒子越靠前。
  • 若属性值相同,则按书写顺序,就近原则。
  • 数字不加单位
  • 只有定位的盒子才有z-index属性。

三、过渡

CSS 过渡(transition)允许您在给定的时间内平滑地改变属性值。经常和:hover一起,搭配使用。

语法:

transition:要过渡的时间 花费时间 运动曲线 何时开始;

1.过渡效果:

transition-property 属性规定应用过渡效果的 CSS 属性的名称。(当指定的 CSS 属性改变时,过渡效果将开始)宽度、高度、背景颜色、内外边距,所有属性用all表示。
注意:
过渡效果通常在用户将鼠标指针浮动到元素上时发生。

2.过渡时间

transition-duration 属性规定完成过渡效果需要花费的时间(以秒或毫秒为单位,必须写)

3.运动曲线

transition-timing-function属性规定过渡效果的速度曲线。该属性允许过渡效果随着时间来改变其速度。默认值为ease(可省)。

  • ease–逐渐慢下来
  • linear–匀速
  • ease-in–加速
  • ease-out–减速
  • ease-in-out–先加速后减速
  • cubic-bezier(n,n,n,n)–允许在三次贝塞尔函数中定义自己

4.开始时间

transition-delay 属性规定过渡效果何时开始。
单位为秒/s(必须写),默认为0s

综合示例:

div {
  width: 100px;
  height: 100px;
  background: skyblue;
  transition-property: width height;
  transition-duration: 2s;
  transition-timing-function: linear;
  transition-delay: 1s;
}

过渡前:
在这里插入图片描述
过渡后:
在这里插入图片描述

四、动画

CSS 可实现 HTML 元素的动画效果,而不使用 JavaScript 或 Flash!动画使元素逐渐从一种样式变为另一种样式,您可以随意更改任意数量的 CSS 属性。
制作动画分为两步:
1.先定义动画
2.再使用动画。

语法:

animation: name duration timing-function delay iteration-count direction;

1.@keyframes规则

通过 @keyframes 规则,您能够创建动画。

创建动画的原理是,将一套 CSS 样式逐渐变化为另一套样式。在动画过程中,您能够多次改变这套 CSS 样式。

  • 以百分比来规定改变发生的时间,或者通过关键词 “from” 和 “to”,等价于 0% 和 100%。
  • 0% 是动画的开始时间,100% 动画的结束时间。
  • 为了获得最佳的浏览器支持,您应该始终定义 0% 和 100% 选择器。

语法:

@keyframes animation-name {
0% {
属性:值; }
100% {
属性:值;}
}

2.等待开始时间

animation-delay 属性定义动画何时开始,其值以秒或毫秒计,允许负值。例:-2s 使动画马上开始,但跳过 2 秒进入动画。

描述
time开始前等待时间,默认为0

3.播放情况

animation-direction 属性定义是否应该轮流反向播放动画。

  • animation-direction 值是 “alternate”,则动画会在奇数次数(1、3、5 等等)正常播放,而在偶数次数(2、4、6 等等)向后播放。
  • 如果把动画设置为只播放一次,则该属性没有效果。
描述
normal默认值,正常播放
alternate轮流反向播放

4.播放时间

animation-duration 属性定义动画完成一个周期所需要的时间,以秒或毫秒计。

描述
time规定完成动画所花费时间,默认为0

5.填充效果

animation-fill-mode 属性规定动画在播放之前或之后,其动画效果是否可见。其属性值是由逗号分隔的一个或多个填充模式关键词。

语法:

animation-fill-mode : none | forwards | backwards | both;

描述
none不改变默认
forwards完成后,保持最后一个属性值
backwards显示前,应用开始属性
both向前和向后填充模式都被应用

6.播放次数

animation-iteration-count 属性定义动画的播放次数。

描述
n播放n次
infinite无限次播放

7.动画名字

animation-name 属性为 @keyframes 动画规定名称。
始终需要规定 animation-duration 属性,否则时长为 0,就不会播放动画了。

8.运行和暂停

animation-play-state 属性规定动画正在运行还是暂停。

描述
paused暂停
running播放

9.播放速度

animation-timing-function 规定动画的速度曲线。

速度曲线定义动画从一套 CSS 样式变为另一套所用的时间。速度曲线用于使变化更为平滑。

描述
ease以低速开始,然后加快,在结束前变慢。(默认)
linear匀速
ease-in加速
ease-out减速
ease-in-out以低速开始和结束。
cubic-bezier(n,n,n,n)允许在三次贝塞尔函数中定义自己,可能的值是从 0 到 1 的数值。

综合示例:

div {
  width: 100px;
  height: 100px;
  background-color: red;
  position: relative;
  animation-name: example;
  animation-duration: 5s;
  animation-timing-function: linear;
  animation-delay: 2s;
  animation-iteration-count: infinite;
  animation-direction: alternate;
}
@keyframes example {
  0%   {background-color:red; left:0px; top:0px;}
  25%  {background-color:yellow; left:200px; top:0px;}
  50%  {background-color:blue; left:200px; top:200px;}
  75%  {background-color:green; left:0px; top:200px;}
  100% {background-color:red; left:0px; top:0px;}
}

效果大致如下:
颜色不断变换,无限循环下去
1.
在这里插入图片描述

在这里插入图片描述

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值