周,我们学习了运用:hover复合选择器,制作鼠标悬停在导航栏上的样式变化效果。在课后作业中,我要求同学们把导航栏放入店铺首页,运用:hover选择器制作鼠标悬停在导航栏的效果。
先来回顾一下知识点。
:hover选择器是CSS样式中的复合选择符,冒号前面的内容代表鼠标悬停的位置。它可以作用于网页中的所有元素,如超链接<a>、表格<table>、单元格<td>等网页标签。在Dreamweaver操作中,我们可以通过新建CSS规则,选择复合选择符,输入:hover选择器名称设置样式。在输入名称时,格式为“网页元素名称:hover”,例如:a:hover代表鼠标悬停在超链接上的效果。
当然网页元素名称也可以是其他选择符:
例如类选择符,.apple:hover代表鼠标悬停在类选择符上的效果,当鼠标经过“class=apple”的网页内容时会发生的样式变化;ID选择符,#orange:hover代表鼠标悬停在ID是orange的网页内容时发生的样式变化。
与此同时,冒号前的网页元素名称也可以进行重组,例如要设置ID为#tb表格中的超链接,在鼠标悬停时的样式变化,我们可以把网页名称设置为#tb a:hover。多个选择符叠加时,使用空格分隔即可。
那么问题来了,许多同学掌握了制作单个导航栏的方法,一旦将导航栏放入整体页面却出现了很多问题。比如小佳同学就出现了“当鼠标经过导航栏时,是一整排全亮,甚至连店招所在的表格也跟着发生样式变化”的问题。这是为什么呢?
好,接下来,我们来看看小佳同学的作业:
「视频解析版本」
<script src="https://lf3-cdn-tos.bytescm.com/obj/cdn-static-resource/tt_player/tt.player.js?v=20160723"></script>
「文字解析版本」
显然小佳的作业中,鼠标移入导航栏,出现了一整行的变化,而非单个单元格的变化,并且顶部店招区域也出现了样式变化。
当我们检查小佳的代码时,我们发现:hover选择器前的网页内容是td,这就意味着鼠标经过网页中所有的单元格都会发生以下所设置的样式变化。
这里的td:hover是鼠标悬停在单元格(列)的效果。而我们之前做的是一行N列的导航栏,不存在其他多余单元格,因此在这个情况下我们可以用td:hover来实现鼠标经过单元格的效果。
但是,你看下面的代码,有多少个td呢?我们这里多行多列,并且你在第二行的单元格中嵌套了表格。因此,如果用td:hover,页面中所有的td都会有鼠标经过的效果,因此你会发现整个页面都会出现鼠标经过变红色的效果。所以,接下来,我们要思考如何把td替换一下。
:hover前的td该如何被替换呢?
方法1:
新建CSS样式,类型为类选择器(命名为.daohang,为导航栏鼠标未经过时的样式)设置好之后,选中导航栏单元格,并右键选择应用。设置后代码如下:
应用后,你可以直接到代码区域把原来的td替换为.daohang。也可以新建CSS规则,类型为复合样式,名称为.daohang:hover。
方法2:
将表格的名称(ID)设置为tb1,那么是tb1这个表格中的单元格样式变化,因此我们可以将名称设置为 “#tb1 td:hover”,这样同样可以实现之前的效果。
好了,以上就是:hover选择器在网页中的应用,你学会了么?
如果你也想试一试,可以回复关键词“网页”获取图片素材和Dreamweaver CS6软件。
们在设计网站的时候,有时候为了体现出别具一格的风格,往往会设计出一些特殊的风格。这里就举一个比较常见的例子 —— 倾斜的背景颜色。
在CSS中,没有某一个属性能够直接实现倾斜的背景颜色,而是需要通过一些“手段”来实现。最常想到的方案就是在内容的底部放置一个div,给这个div设定一个背景颜色,然后让这个div倾斜一个角度,从而实现倾斜的背景颜色。比如像下图所示的案例:
那么下面就来用一个基本的实例来解释并实现倾斜背景的效果:
首先要说明一下,页面导航条是固定在页面顶部的,导航条不会随着页面的滚动而移动。这个效果的实现非常简单,就是利用了 position 这个属性的 fixed 值来实现的。
我下面的代码实例中,HTML用来给页面上添加元素,而在 CSS 部分需要精细化的设定属性的参数值,而且需要若干个HTML标签的CSS来配合,从而实现倾斜背景的效果。所以我在CSS代码部分用了比较多的注释来描述这些属性的效果和目的,大家在阅读的时候可以将 CSS 结合着 HTML 一起来理解。或者可以直接拿我的这个实例作为一个模板来使用。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="index.css">
</head>
<body>
<div class="navbar-bg">
<ul class="navbar">
<li class="item">
<a href="https://www.baidu.com">Home</a>
</li>
<li class="item">
<a href="https://www.baidu.com">Home</a>
</li>
<li class="item">
<a href="https://www.baidu.com">Home</a>
</li>
<li class="item">
<a href="https://www.baidu.com">Home</a>
</li>
<li class="item sign">
<a href="https://www.baidu.com">Sign</a>
</li>
</ul>
</div>
<div class="box-bg">
<div class="box">
<div class="item">
<h1>Title</h1>
<p>This is the description for title.</p>
<button>click me</button>
</div>
<div class="item">
<h1>Title</h1>
<p>This is the description for title.</p>
<button>click me</button>
</div>
<div class="item">
<h1>Title</h1>
<p>This is the description for title.</p>
<button>click me</button>
</div>
</div>
</div>
<div class="content">
<h1>This is content</h1>
</div>
<div class="footer">
<div class="footer-bg">
<ul class="list">
<li>
<a href="https://greatfrank.cn">Link</a>
</li>
<li>
<a href="https://greatfrank.cn">Link</a>
</li>
<li>
<a href="https://greatfrank.cn">Link</a>
</li>
<li>
<a href="https://greatfrank.cn">Link</a>
</li>
<li>
<a href="https://greatfrank.cn">Link</a>
</li>
<li>
<a href="https://greatfrank.cn">Link</a>
</li>
</ul>
</div>
</div>
</body>
</html>
为了让导航条和其他元素都能够与页面的两边留出距离,我在实际内容标签的外围又包裹了一层div,主要在这个包裹的div里设定左右内间距,从而实现两边留白的效果。这些外围包裹的 div 的 class 名称一般都会有一个后缀 "-bg"。
在实际内容的排列时,我采用了更加方便灵活的弹性布局,这样会相对的减少HTML和CSS的代码量。
另外,如果想要实现倾斜的背景颜色,那么这些带有 bg 后缀的 div 就是需要倾斜的标签。倾斜这些 div 其实很简单,只需要设定一个 transform: skew(0deg, -9deg) 这样的CSS代码即可,但是我们可以想象一下,原本是长方形的 div 按照 Y 轴逆时针旋转了一个弧度(-9deg)后,它会变成一个平行四边形,这个平行四边形是左边低右边高。这样就会露出它后面的白色的 body 的部分。所以这种玩法麻烦的地方就是如何通过多个 CSS 属性的配合来遮住露出的白色的body部分。下面就来看一下这个HTML对应的 CSS 代码部分。
在大家阅读 CSS 的代码之前,我给出一个原理图来解释一下其中的原理:
当外围的 div 倾斜了之后,就需要把内容部分的div的上部的内间距增大,以此来遮住平行四边形的左侧露出的白色区域。这是页面上部区域的原理。
那么页面底部也同样需要实现这样倾斜背景颜色的设计,这样才能将风格一致,产生美感。原理还是这个原理图所示的逻辑,不同的地方在于,底部最外围的 div 不倾斜,而是需要两个属性,height 和 overflow-y,并且这个 div 不能带有背景颜色。它们的作用是当它里面的内容超出这个 div 的区域时就不显示,这样就会让上图中蓝色的平行西变形的左下角区域被红色的框线裁剪掉,从而让这个div 乖乖的呆在页面的底部。而这个 div 里面一层的 div 需要让它倾斜,而且还带有一个背景颜色。这样组合出来的效果就是一个看似是左右两边是竖线,下部是横线,只有上部是斜线的带有背景颜色的四边形,这个四边形里面是实际的页面内容。
最终的样子在这篇 CSS 代码的最后展示出来了。
HTML 在页面上放置了一个按钮
<button class="btn">点击按钮</button>
如果想要实现当鼠标悬停在按钮上时,按钮文字加粗,在 CSS 里这样设置
.btn:hover {
font-weight: bolder;
}
但是这样做了之后,当文字加粗后,势必会将按钮的尺寸撑的更大。那么有可能会影响到按钮周围其他 HTML 元素的位置,如果你的页面内容比较多,而且比较紧凑的话,撑大的按钮会将周围的元素推开,这很有可能会扰乱页面的布局。
如果既要保留按钮的鼠标悬停文字加粗的效果,还不能影响到周围元素的位置,可以再给按钮设定一个固定的尺寸。
.btn {
padding: 1rem;
width: 4rem;
}
.btn:hover {
font-weight: bolder;
}
这样按钮的尺寸就不会变化,但是文字在鼠标悬停时会加粗,按钮周围的元素也不会受到影响。
以上这种情况一般在页面顶部的导航条上最为常见,请大家注意。
*请认真填写需求信息,我们会在24小时内与您取得联系。