码迷,mamicode.com
首页 > Web开发 > 详细

Web前端从入门到精通-13 css简介

时间:2015-10-25 22:27:42      阅读:371      评论:0      收藏:0      [点我收藏+]

标签:

欢迎回来,上节课的话我们做了一个导航

总体来说还能看,但是也有一些小问题

首先,当我们把鼠标移上去的时候不变成小手

这个看起来最不舒服了

所以先从这里开刀

说到这里了,想和大家沟通一个问题

我们平时上网的时候鼠标放到什么地方才变成小手呢?

是不是可以点的地方呢?

可以点的话意味着什么?

意味着是一个链接对不对

链接的话在我们的html里面毫无疑问就是a标签了

好的,说到这里脾气着急的马上就会说,那就用a标签包裹文字不就完事儿了?

话一说完,代码就会被改成这样

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>xxx</title>
    <style type="text/css">
    *{margin:0; padding:0;}
    li{list-style: none;}
    .clear:after{content:""; display: block; clear:both;}
    .navWrap{ margin:100px; border:1px solid black;}
    .navWrap li{ float:left; padding:30px; background: #333; color:#FFF;}
    .navWrap li:hover{ background: #777;}
    </style>
</head>
<body>
    <ul class="clear navWrap">
        <li><a>课程</a></li>
        <li><a>计划</a></li>
        <li><a>分享</a></li>
        <li><a>社区</a></li>
    </ul>
</body>
</html>

但是预览之后一定会让你很失望

该是什么样还是什么样,结果没有一丁点变化

所以在这里要注意一个细节,那就是写了a标签,如果想让它起到移入变成手的效果,必须加上href属性

href代表什么呢?就是链接的地址呗

但是我们平时写页面的时候写到一个a标签,并不见得知道或者确定它链到哪里

所以在不知道给href赋什么值的时候通常会有一个默认值给它

至于这个默认值是什么,我在这里先写出来

如果知道为什么是这个值,那最好

不知道也没关系

暂时先记住

我们在后面的课程当中会介绍到

这样一来,当我们把鼠标移动到文字上的时候,就会出现一个小手

技术分享

在此顺便一提,a链接文字都变成蓝色了,而且还有一个难看的下划线

这些也都是浏览器的默认样式

所以,为了干掉这些默认的样式,我们同时也在css的最前面加上

a{ text-decoration:none; color:#fff;}

好了,回到正题上,现在移到文字上是可以变成小手了

但是很别扭的一点是移动到文字周围的灰色背景时就变不成小手了

说白了就是我们的a标签的大小只是那两个文字所占据的大小

那么想要移动到文字周边的灰色背景的时候也变成小手该怎么做呢?

我们不妨思考一个问题

为什么a标签只有两个文字所占据的大小呢?

因为a标签是内联元素,所以是没有宽高属性的

那既然这样,我们多少也可以猜出来该怎么做了

改变a的display属性,让它变成block不就可以了么

好的,行还是不行,试试就知道了

先把代码给大家

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>xxx</title>
    <style type="text/css">
    *{margin:0; padding:0;}
    li{list-style: none;}
    a{text-decoration: none; color:#fff;}
    .clear:after{content:""; display: block; clear:both;}
    .navWrap{ margin:100px; border:1px solid black;}
    .navWrap li{ float:left; padding:30px; background: #333; color:#FFF;}
    .navWrap li:hover{ background: #777;}
    .navWrap li a{ display:block;}
    </style>
</head>
<body>
    <ul class="clear navWrap">
        <li><a href="javascript:;">课程</a></li>
        <li><a href="javascript:;">计划</a></li>
        <li><a href="javascript:;">分享</a></li>
        <li><a href="javascript:;">社区</a></li>
    </ul>
</body>
</html>

经过检验,发现是不可以的

原因也很简单

我们的确是把a变成了块元素,让它的宽和高起作用了

但是我们还没有给它加宽和高

当然没有效果了

所以接下来我们要给a标签加上width:80px; height:50px;

预览之后第一眼看上去发现模样变化有点大

技术分享

更严重的问题是,我们把鼠标移到上面之后感觉挺凌乱的

一会儿变成小手,一会儿又不变

好的,为了不混淆视听

我们给a标签加一个背景

这样看起来就会更明显

.navWrap li a{ display:block; width:80px; height:50px; background:#f00;}

技术分享

这次再移上去的时候,通过仔细观察我们发现

鼠标移动到红色区域的时候就会变成手

而移动到旁边的灰色区域就不变

那红色区域毋庸置疑肯定是a标签的范围

但是灰色区域是什么呢?

我们可以按下F12打开开发者工具看一下

技术分享

我们可以看到旁边的灰色部分是我们之前给li加的padding

现在看来这个padding就有点碍事儿了

所以我们直接去掉

技术分享

现在我们把鼠标移到上面去,就会发现不管是移动到文字上还是文字旁边的红色区域

都会变成小手

好了,为了解决这个问题,我们费了这么大的劲儿

但是大家也发现了,解决了这个问题之后

感觉还不如原来的效果好看呢

首先文字都挤到了左上角

而且我们鼠标移入的时候背景颜色也没有任何变化

首先我们来解决第二个问题

因为第二个问题相对来讲较为容易

大家思考一下鼠标移入背景变化这件事情我们在哪里控制的呢?

很明显是在这里:

.navWrap li:hover{ background: #777;}

但注意,目前我们是给li加的hover

所以移入li的时候会有变化

而现在,我们移入的时候

其实最直接移入的元素是a链接

a链接的父元素是li

所以我们也相当于移到了li上

那既然移动到了li上但是仍然没有变化呢?

这时要注意,我们现在将a链接变成了块元素

而且给它加了宽和高

但是对于li,我们给它加宽或者高了吗?

没有

既然这样,li的宽和高是多少呢?

它的子元素把它撑成了多少它就是多少

所以li的宽和高和a的宽和高是一样的

但是a链接是在li里面的

所以相当于a链接会吧li给盖住

那这样一来,虽然我们给li加了hover的时候背景颜色变化

但是由于被a链接挡着,什么都看不见

所以现在给li加的background是体现不出任何效果的

我们先把li的background和li:hover的background删掉

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>xxx</title>
    <style type="text/css">
    *{margin:0; padding:0;}
    li{list-style: none;}
    a{text-decoration: none; color:#fff;}
    .clear:after{content:""; display: block; clear:both;}
    .navWrap{ margin:100px; border:1px solid black;}
    .navWrap li{ float:left; color:#FFF;}
    .navWrap li a{ display:block; width:80px; height:50px; background:#f00;}
    </style>
</head>
<body>
    <ul class="clear navWrap">
        <li><a href="javascript:;">课程</a></li>
        <li><a href="javascript:;">计划</a></li>
        <li><a href="javascript:;">分享</a></li>
        <li><a href="javascript:;">社区</a></li>
    </ul>
</body>
</html>

给a链接加hover

.navWrap li a:hover{ background: #ca0;}

这样,移入a链接之后背景颜色就会变化了

好的,第一个问题解决了之后再来看第二个问题

那就是居中的问题

首先我们解决水平居中

水平居中的话很简单

只需要给a链接加上text-align:center;就可以解决

text-align这个属性就是专门用来设置水平对齐方式的

不过我还是要多说一句,text-align一定要在加了width的情况下使用

否则是不起作用的

原因很简单

不加宽度的话没办法计算出文字到两边的距离是多少

技术分享

至于垂直方向上对齐的设置

需要稍微动一下脑子

我们先来介绍一个概念——行高

在我们用Word的时候不知道大家有没有注意到

当我们选中一段文字时除了选中文字本身

还选中了文字的上面一小截儿和下面一小截儿

技术分享

其实在Word里面我们一行文字实际的高度就是文字的高度再加上这两小段距离

那我们把这一行文字实际所占的高度就叫做这行文字的行高

相信大家也看到了,一行文字有了一个行高之后是不是就变的垂直居中了

所以我们让文字垂直居中的原理就在此

好的,那所谓行高就是一行的高度,在我们这里一行的高度是多少呢?

我们可以做一个测试

把第一个a链接里面的内容增加一些

技术分享

我们会发现每行文字之间很挤

所以,由此可以得出:当不设置行高时,行高默认就是文字的高度

而对于我们中国的汉字来说,每个都是方方正正的正方形

因此行高默认就是文字的大小,即font-size

而这个行高我们是可以手动设置的

例如如果我们设置a标签的行高是25px

那就意味着每行所占据的实际高度是25px

这25px包括文字高度和文字上面的一段和下面一段的高度

通过哪个属性设置行高呢?

通过line-height

即我们可以给a链接的css加上line-height:25px;

技术分享

由于a链接本身的高度是50px

所以a链接里面正好可以盛下2行

好的,按照这个推理

如果我们给a链接设置line-height:50px;的话

是不是就正好盛下一行了?

而且这行文字一定是居中的

技术分享

好的,到现在为止的话

我们的导航终于算是比较漂亮了

但是还是有些小问题

第一个a链接我们刚才为了做测试多加了些内容

当我们的鼠标移到第一个a链接的时候问题出现了

技术分享

我们发现我们所加的内容并没有显示完全

而是直接被截断了

为什么会这样呢?

因为我们给a链接加了一个宽度,将它固定死了

所以即使内容再多,直到多到超出a链接宽了

多出的那部分直接就被截断了

好的,分析到这里

我们也知道是由于加了宽度引起的

很自然的,解决方案就是把加上去的宽给去了

将宽度去了之后,a链接里面的文字不会自动去折行

从而有多少显示多少一直往后显示

一预览,大吃一惊

技术分享

刚才的问题的确解决了,但是心的问题又来了

全都挤到一块儿了

还记得我们之前处理水平居中的时候加text-align的时候说的一句话吗?

text-align要配合width一起使用

刚才我们把width删了

效果就是这样,不配合width就用text-align的效果就是这样

那现在我们既想水平居中,还想让宽度自适应

只能换一个角度——给a链接加一个水平方向的padding

技术分享

这样一来,就好了

而现在,由于没有width了,text-align加上也起不到任何作用,可以把它删掉了

最终的代码给大家粘出来

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>xxx</title>
    <style type="text/css">
    *{margin:0; padding:0;}
    li{list-style: none;}
    a{text-decoration: none; color:#fff;}
    .clear:after{content:""; display: block; clear:both;}
    .navWrap{ margin:100px; border:1px solid black;}
    .navWrap li{ float:left; color:#FFF;}
    .navWrap li a{ display:block; height:50px; background:#f00; line-height: 50px; padding:0 10px;}
    .navWrap li a:hover{ background: #ca0;}
    </style>
</head>
<body>
    <ul class="clear navWrap">
        <li><a href="javascript:;">课程课程课程课程课</a></li>
        <li><a href="javascript:;">计划</a></li>
        <li><a href="javascript:;">分享</a></li>
        <li><a href="javascript:;">社区</a></li>
    </ul>
</body>
</html>

好的,我们用了两节课来写了一个导航,综合运用了之前学的一些东西

同时也用了一些以前没有用到过的知识

或许大家认为我很啰嗦

但是我们写代码的时候要本着一种不多写一个字母、不写废话的原则来写

这样才能写出高质量的代码

好的,这节课我们到这里

谢谢大家

Web前端从入门到精通-13 css简介

标签:

原文地址:http://www.cnblogs.com/zhaohuiziwo901/p/4890589.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!