前端学习D4:CSS进阶

Posted 甜鲸鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端学习D4:CSS进阶相关的知识,希望对你有一定的参考价值。

文章目录


前言

这篇文章为我跟随pink老师重新系统学习前端时做的一些笔记。

系列文章目录

html5与CSS3篇】
D1:HTML基础:简介+常用标签
D2:CSS入门:简介+基础选择器+字体&文本属性+引入方式
D2:CSS基础:复合选择器+元素显示模式+背景
D3:CSS进阶:层叠&继承&优先级+盒子模型+圆角边框+盒子&文本阴影+浮动
D4:CSS进阶:定位+元素的显示与隐藏
D5:CSS提高
javascript篇】
D1:JavaScript入门:计算机基础+变量+数据类型
D2:JavaScript基础:运算符+运算流程分支控制+命名规范与语法格式
D3:JavaScript进阶


1 PS切图

PS有多种切图方式:图层切图、切片切图、PS插件切图等。

1.1 常见的图片格式

  1. jpg图像格式:JPEG(.jpg)对色彩的信息保留较好,高清,颜色较多,产品类的图片经常使用jpg格式。
  2. gif图像格式:GIF格式最多只能储存256色,所以通常用来显示简单图形及字体,但是可以保存透明背景和动画效果,实际经常用于一些图片小动画效果。
  3. png图像格式:PNG是一种新型的网络图形格式,结合了GIF和JPEG的优点,具有存储形式丰富的特点,能够保持透明背景。如果想要切成背景透明的图片,选择.png格式。
  4. PSD图像格式:PSD格式是PhotoShop的专用格式,里面可以存放图层、通道、遮罩等多种设计稿。对前端人员来说,最大的优点是可以直接从上面复制文字、获得图片,还可以测量大小和距离。

1.2 图层切图

最简单的切图方式:右击图层 --> 快速导出为PNG。
但很多情况下,需要先合并图层再导出:

  1. 选中需要的图层:图层菜单 --> 合并图层(ctrl + e);
  2. 右击 --> 快速导出为PNG。

1.3 切片切图

略。

1.4 PS插件切图

Cutterman简介及其使用略。

2 CSS属性书写顺序(*)

建议遵循以下顺序:

  1. 布局定位属性:display / position / float / clear / visibility / overflow
  2. 自身属性:width / height / margin / padding / border / background
  3. 文本属性:color / font / text-decoration / text-align / vertical-align / white-space / break-word
  4. 其他属性(CSS3):content / cursor/ border-radius / box-shadow / text-shadow / background: linear-gradient…

3 页面布局整体思路

为了提高网页制作的效率,布局时通常有以下的整体思路:

  1. 必须确定页面的版心(可视区),通过测量可得知。
  2. 分析页面中的行模块,以及每个行模块中的列模块。(页面布局第一准则)
  3. 一行中的列模块经常浮动布局,先确定每个列的大小,之后确定列的位置。(页面布局第二准则)
  4. 制作HTML结构,遵循先有结构、后有样式的原则。结构永远最重要。
  5. 先理清楚布局结构,再写代码。

4 导航栏案例

导航栏注意点:

  1. 实际开发中不会直接使用<a>链接,而是用<li>包含链接的做法。
    • <li><a></a></li>语义更清晰。
    • 如果直接使用<a>,搜索引擎容易识别为有堆砌关键字嫌疑,有降权的风险,从而影响网站排名。
  2. 可以对<a>标签使用:hover设置border-bottom添加导航栏的鼠标悬浮效果,并设置<li>的外边距。

5 定位

5.1 为什么需要定位

以下情况使用标准流或浮动很难实现:

  1. 某个元素可以自由地在一个盒子内移动位置,并且压住其他盒子。
  2. 当滚动窗口的时候,盒子是固定屏幕某个位置的。

以上效果需要使用定位来实现。

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

5.2 定位的组成

定位:将盒子定在某一个位置,所以定位也是在摆放盒子,按照定位的方式移动盒子。
定位 = 定位模式 +边偏移
定位模式用于指定一个元素在文档中的定位方式,边偏移则决定了该元素的最终位置。

5.2.1 定位模式

定位模式决定元素的定位方式 ,它通过CSS的position属性来设置,其值可以分为四个:

语义
static静态定位
relative相对定位
absolute绝对定位
fixed固定定位

5.2.2 边偏移

边偏移就是定位的盒子移动到最终位置。

边偏移属性示例描述
toptop: 80px;顶端偏移量,定义元素相对于其父元素的上边线的距离
bottombottom: 80px;底部偏移量,定义元素相对于其父元素的下边线的距离
rightright: 80px;右侧偏移量,定义元素相对于其父元素右边线的距离
leftleft: 80px;左侧偏移量,定义元素相对于其父元素左边线的距离

5.3 静态定位static(了解)

静态定位是元素的默认定位方式,无定位的意思。

  • 静态定位按照标准流特性摆放位置,它没有边偏移。在布局时很少用到。
选择器 
	position: static;

5.4 相对定位relative(*)

相对定位是元素在移动位置的时候,是相对于它原来的位置来说的。

  • 它是相对于自己原来的位置来移动的(移动位置的时候参照点是自己原来的位置)。
  • 原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待。(不脱标,继续保留原来位置)。因此,相对定位并没有脱标,它最典型的应用是限制绝对定位。
选择器 
	position: relative;

5.5 绝对定位absolute(*)

绝对定位是元素在移动位置的时候,是相对于它的祖先元素来说的。

  • 如果没有祖先元素,或者祖先元素没定位,则以浏览器为准进行定位(Document 文档)。
  • 如果祖先元素父级有定位(相对、绝对、固定定位),则以最近一级的有定位祖先元素为参考点移动位置。
  • 绝对定位不再占用原先的位置(脱标)。所以绝对定位是脱离标准流的。
选择器 
	position: absolute;

5.6 子绝父相(*)

子绝父相的由来:

  1. 绝对定位和相对定位的使用场景?
  2. 相对定位如何限制绝对定位?

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

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

总结:因为父级需要占有位置,因此是相对定位,子盒子不要占有位置,则是绝对定位。但子绝父相不是永远不变的,如果父元素不需要占有位置,子绝父绝也会遇到。
案例:带切换按钮的轮播图。

5.7 固定定位fixed(*)

固定定位是元素固定于浏览器的可视区的位置。主要使用场景: 可以在浏览器页面滚动时元素的位置不会改变。

  • 浏览器的可视窗口为参照点移动元素。跟父元素没有任何关系,不随滚动条滚动。
  • 固定定位不再占有原先的位置(脱标)。固定定位也是脱标的,所以固定定位也可以看做是一种特殊的绝对定位。

固定定位小技巧: 固定在版心右侧位置。

  1. 让固定定位的盒子left: 50%;走到浏览器可视区(也可以看做版心) 的一半位置。
  2. 让固定定位的盒子margin-left: 版心宽度的一半距离;多走版心宽度的一半位置,到版心右侧。
.fixed 
	position: fixed;
	/* 1. 走浏览器宽度的一半 */
	left: 50%;
	/* 2. 利用margin走版心盒子宽度的一半 */
	margin-left: 400px;

5.8 粘性定位sticky(了解)

粘性定位可以被认为是相对定位和固定定位的混合。

  • 浏览器的可视窗口为参照点移动元素(固定定位特点)。
  • 粘性定位占有原先的位置(相对定位的特点)。
  • 必须添加top,left,right,bottom其中一个才有效。
  • 跟页面滚动搭配使用。兼容性较差,IE 不支持。
选择器  position: sticky; top: 10px; 

5.9 定位叠放次序z-index

在使用定位布局时候,可能会出现盒子重叠的情况。此时,可以用z-index来控制盒子的前后次序(z轴)。

选择器 
	z-index: 1;

  1. 数值可以是正整数,负整数或者0,默认是auto,数值越大,盒子越靠上
  2. 如果属性值相同,则按照书写顺序,后来居上。
  3. 数字后面不能加单位。
  4. 只有定位的盒子才有z-index属性

5.10 定位的拓展

5.10.1 绝对定位的盒子实现居中

加了绝对定位的盒子不能通过margin: 0 auto;实现水平居中,但是可以通过以下计算方法实现水平和垂直居中:

  1. left: 50%;让盒子的左侧移动到父级元素的水平中心位置。
  2. margin-left: -100px;让盒子向左移动自身宽度的一半
.box 
	position: absolute;
	/* 实现水平居中 */
	/* 1. left走50%,即父容器宽度的一半 */
	left: 50%;
	/* 2. margin为负值,往左边走自己盒子宽度的一半 */
	margin-left: -100px;
	/* 实现垂直居中 */
	/* 1. top走50%,即父容器高度的一半 */
	top: 50%;
	/* 2. margin为负值,往上边走自己盒子高度的一半 */
	margin-top: -100px;
	width: 200px;
	height: 200px;
	background-color: pink;
	/* margin: auto; */

5.10.2 定位特殊特性

绝对定位和固定定位也和浮动类似。

  1. 行内元素添加绝对或者固定定位,可以直接设置高度和宽度。
  2. 块级元素添加绝对或者固定定位,如果不给宽度或者高度,默认大小是内容的大小。

5.10.3 脱标的盒子不会触发外边距塌陷

浮动元素、绝对定位(固定定位)元素都不会触发外边距合并的问题。

5.10.4 绝对定位(固定定位)会完全压住盒子

  1. 浮动元素不同,只会压住它下面标准流的盒子,但是不会压住下面标准流盒子里面的文字(图片)。因为浮动产生的目的最初是为了做文字环绕效果的,文字会围绕浮动元素。
  2. 但是绝对定位(固定定位) 会压住下面标准流所有的内容。

5.11 轮播图案例

  • 如果一个盒子既有left属性也有right属性,则默认会执行left属性。同理,既有top属性又有bottom属性,则会执行top属性。
  • 轮播图的左右按键:并集选择器提取左右两个类的公共部分。
<!DOCTYPE html>
<html lang="en">
	<head>
	    <meta charset="UTF-8">
	    <meta name="viewport" content="width=device-width, initial-scale=1.0">
	    <meta http-equiv="X-UA-Compatible" content="ie=edge">
	    <title>淘宝轮播图做法</title>
	    <style>
	        * 
	            margin: 0;
	            padding: 0;
	        
	        li 
	            list-style: none;
	        
	        .tb-promo 
	            position: relative;
	            width: 520px;
	            height: 280px;
	            background-color: pink;
	            margin: 100px auto;
	        
	        .tb-promo img 
	            width: 520px;
	            height: 280px;
	        
	        /* 并集选择器可以集体声明相同的样式 */
	        .prev,
	        .next 
	            position: absolute;
	            /* 绝对定位的盒子垂直居中 */
	            top: 50%;
	            margin-top: -15px;
	            /* 加了绝对定位的盒子可以直接设置高度和宽度 */
	            width: 20px;
	            height: 30px;
	            background: rgba(0, 0, 0, .3);
	            text-align: center;
	            line-height: 30px;
	            color: #fff;
	            text-decoration: none;
	        
	        .prev 
	            left: 0;
	            /* border-radius: 15px; */
	            border-top-right-radius: 15px;
	            border-bottom-right-radius: 15px;
	        
	        .next 
	            right: 0;
	            /* border-radius: 15px; */
	            border-top-left-radius: 15px;
	            border-bottom-left-radius: 15px;
	        
	        .promo-nav 
	            position: absolute;
	            bottom: 15px;
	            left: 50%;
	            margin-left: -35px;
	            width: 70px;
	            height: 13px;
	            background: rgba(255,255,255, .3);
	            border-radius: 7px;
	        
	        .promo-nav li 
	            float: left;
	            width: 8px;
	            height: 8px;
	            background-color: #fff;
	            border-radius: 50%;
	            margin: 3px;
	        
	        /* 不要忘记选择器权重的问题 */
	        /* .selected 
	            background-color: #ff5000;
	         */
	       .promo-nav .selected 
	            background-color: #ff5000;
	        
	    </style>
	</head>
	<body>
	    <div class="tb-promo">
	        <img src="images/tb.jpg" alt="">
	        <!-- 左侧按钮箭头 -->
	        <a href="#" class="prev"> &lt; </a>
	        <!-- 右侧按钮箭头 -->
	        <a href="#" class="next"> &gt; </a>
	        <!-- 小圆点 -->
	        <ul class="promo-nav">
	            <li class="selected"></li>
	            <li></li>
	            <li></li>
	            <li></li>
	            <li></li>
	        </ul>
	    </div>
	</body>
</html>

6 元素的隐藏与显示

类似网站广告,当我们点击关闭就不见了,但是重新刷新页面,广告会重新出现。本质:让一个元素在页面中隐藏或者显示出来。

6.1 display显示隐藏

display属性用于设置一个元素应如何显示。

  • display隐藏元素后,不再占有原来的位置。后面应用及其广泛,搭配 JS 可以做很多的网页特效。
display: none;  /* 隐藏对象 */
display: block; /* 除了转换为块级元素之外,同时还有显示元素的意思 */

6.2 visibility显示隐藏

visibility属性用于指定一个元素应可见还是隐藏。

  • visibility隐藏元素后,继续占有原来的位置
  • 如果隐藏元素想要原来位置, 就用visibility: hidden;;如果隐藏元素不想要原来位置,就用 display: none;(用处更多,重点)
visibility: visible; /* 元素可视 */
visibility: hidden;  /* 元素隐藏 */

6.3 overflow溢出显示隐藏

overflow属性指定了如果内容溢出一个元素的框(超过其指定高度及宽度)时,会发生什么。

overflow: visible; /* 不剪切内容也不添加滚动条 */
overflow: hidden;  /* 不显示超过对象尺寸的内容,超出的部分隐藏掉 */
overflow: scroll; /* 不管超出内容否,总是显示滚动条 */
overflow: auto;  /* 超出自动显示滚动条,不超出不显示滚动条 */

一般情况下,都不想让溢出的内容显示出来,因为溢出的部分会影响布局。但是如果是有定位的盒子,请慎用overflow: hidden;,因为它会隐藏多余的部分。

6.4 视频封面遮罩案例

<!DOCTYPE html>
<html lang="en">
	<head>
	    <meta charset="UTF-8">
	    <meta name="viewport" content="width=device-width, initial-scale=1.0">
	    <meta http-equiv="X-UA-Compatible" content="ie=edge">
	    <title>仿土豆网显示隐藏遮罩案例</title>
	    <style>
	        .tudou 
	            position: relative;
	            width: 444px;
	            height: 320px;
	            background-color: pink;
	            margin: 30px auto;
	        
	        .tudou img 
	            width: 100%;
	            height: 100%;
	        
	        .mask 
	            /* 隐藏遮罩层 */
	            display: none;
	            position: absolute;
	            top: 0;
	            left: 0;
	            width: 100%;
	            height: 100%;
	            background: rgba(0, 0, 0, .4) url(images/arr.png) no-repeat center;
	        
	        /* 当我们鼠标经过了土豆这个盒子,就让里面的遮罩层显示出来 */
	        .tudou:hover .mask 
	            /* 这里不是转换为块元素,而是显示元素 */
	            display: block;
	        
	    </style>
	</head>
	<body>
	    <div class="tudou">
	        <div class="mask"></div>
	        <img src="images/tudou.jpg" alt="">
	    </div>
	    <div class="tudou">
	        <div class="mask"></div>
	        <img src="images/tudou.jpg" alt="">
	    </div>
	    <div class="tudou">
	        <div class="mask"></div>
	        <img src="images/tudou.jpg" alt="">
	    </div>
	    <div class="tudou">
	        <div class="mask"></div>
	        <img src="images/tudou.jpg" alt="">
	    </div>
	</body>
</html>

总结

  • 网页布局

    • 标准流:可以让盒子上下排列或者左右排列,垂直的块级盒子显示就用标准流布局。
    • 浮动:可以让多个块级元素一行显示或者左右对齐盒子,多个块级盒子水平显示就用浮动布局。
    • 定位:定位最大的特点是有层叠的概念,就是可以让多个盒子前后叠压来显示。如果元素自由在某个盒子内移动就用定位布局。
  • 定位模式

    定位模式是否脱标移动位置是否常用
    static静态定位不能使用边偏移很少
    relative相对定位否(占有位置)相对于自身位置移动常用
    absolute绝对定位是(不占有位置)带有定位的父级常用
    fixed固定定位是(不占有位置)浏览器可视区常用
    sticky粘性定位否(占有位置)浏览器可视区当前阶段少
    • 相对定位,固定定位,绝对定位的两个大特点:
      1. 是否占有位置(是否脱标)
      2. 以谁为基准点移动
    • 重点学会子绝父相(儿子绝对定位,父亲必须相对定位)
  • 元素的显示与隐藏

    • display:不保留元素的位置
    • visibility:保留元素原来的位置
    • overflow:只处理溢出部分

以上是关于前端学习D4:CSS进阶的主要内容,如果未能解决你的问题,请参考以下文章

前端技术学习路线及技术汇总

前端学习路线

前端学习路线

前端学习顺序

前端完整学习路线

前端完整详细学习路线