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

欢迎回来,上节课没有给大家留什么问题,但是介绍了一个很重要的问题,那就是css的层叠优先级顺序:

行间样式>id选择器>类选择器>元素选择器

好的,复习到此结束,接下来我们继续学我们的css

这节课要讲一个很重要也是理解起来略有困难的东西——浮动

之前的课程中我们举了好几个列表的例子,但无一例外的是所有的列表都是竖着成一排的

那么怎么让它们横起来呢?——就是用我们的浮动(float)

在正式介绍浮动这个东西之前,我们先来说个知识点——块元素和内嵌元素

什么意思呢?不知道大家是否发现了一个规律或者是否自己曾经尝试过

在之前的例子中,我们给div、li设置过width、height这些样式

但是却没有给a、span设置过,那么我们不妨给这些标签试着加上width和height试试

代码和预览我就不在这里写了,大家最好自己亲自尝试一下

最终width和height是没有效果的

好的,大概我们知道是什么情况了:标签好像是分那么两种

一种是设置width和height起作用的

还有一种是设置width和height不起作用的

于是搞计算机的这伙儿人就给前者起了一个名字叫块元素,还有人叫它块级元素

后者就叫行内元素,或叫做内联元素、内嵌元素

由于前端的各路神仙百花齐放、百家争鸣,所以衍生出这么多叫法

名字是什么不重要,还有一点需要说明就是块元素除了设置宽高起作用之外还有一个特性

那就是如果不做任何特殊处理,块元素就会独占一行,不论它的前面、后面、父级、子级是块还是内嵌

而内嵌元素,则会按照我们写的顺序来显示

好的,扯了这么多,不如来个例子看着明白

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>内联和块</title>
    <style type="text/css">
    .ul1{ width:500px; height:200px; border:1px solid black;}
    .ul1 li{ width:200px; height:50px; border:1px solid black;}
    .a1{ width:100px; height:50px; border:1px solid black;}
    .div1{ width:100px; height:100px; border:1px solid black;}
    </style>
</head>
<body>
    <ul class="ul1">
        <li>li1</li>
        <li>li2</li>
        <li>li3</li>
    </ul>
    <a class="a1" href="javascript:;">a链接1</a>
    <a class="a1" href="javascript:;">a链接2</a>
    <a class="a1" href="javascript:;">a链接3</a>
    <a class="a1" href="javascript:;">a链接4</a>
    <div class="div1">div1</div>
</body>
</html>

结构和样式都非常简单,所以我们并不再多说什么,直接看运行结果

好的,看着这个例子,我们可以清楚的看到,li是块元素、a链接是内嵌元素

div的话之前已经说了是块元素,因此也没什么好怀疑的

那么ul是什么元素呢?

好的,判断一个元素是块还是内嵌其实最简单的办法就是看宽高对它是否有效

从上面预览的效果我们也可以看到,宽、高对它是有效果的

好的,接下来我们分析一个有意思的问题,a链接是内联元素

那为什么不会排在上面的ul的后面呢?

如果你有这样的疑问,不妨再返回去认真看看,分析下

即使a想和ul挤在一排,ul允许吗?

块元素是很霸道的,它才不管你是什么东西,统统都会给你挤到下一行

所以a链接被挤了下来

同理,为什么div也没有跟在第四个a链接的后面呢?

不是a链接不想,而是div不愿意和这些连宽高都没法设置的小角色在一起啊

自然也就到了下一排

好的,虽然一个元素是块儿还是内嵌科学家已经帮我们定好了

但政治老师告诉过我们:一切事物都是发展变化的

所以块儿可以变成内联,而内联也可以变为块儿

这是通过一个叫display的样式属性来控制的

例如我们在上面的例子中给.a1这个类加上display:block;这条样式属性

那我们页面上所有带有a1这个类名的a元素也就开始称霸了:

如果你预览之后是这样,那么恭喜你加对地方了

好的,说了这么半天好像和我们这节课的主题——浮动还没扯上什么关系,别急

接下来再做些准备工作

我们给上面的代码稍微加点东西,先给所有的li加个背景background:red,再给第一个li加一个类.li1

在.li1里面再加一条样式background:blue;

经过这么一番折腾,让大家加深了一下对上节课讲的层级这一概念的印象,接下来大家可以对比下效果是否和我的一样

如果一样的话,那么恭喜你,又加对地方了

最后,再给.li1加上我们的浮动:float:left;

这时,见证奇迹的时刻即将到来:

大家会发现一个很神奇的现象,li1好像位置没有变,而li2和li3出现了意外,不仅位置变了,而且它俩好像还重叠了起来

好的,事实上是这样的,如果我们给一个元素加了float浮动,那么这个元素好像就跟飘起来了

float:left就是向左飘,float:right就是向右飘

当然即使它再怎么奔放再怎么飘总得有个尽头,总得有一面墙把它挡住

这面墙就是距离它最近的块级父元素

不过这句话说的有些啰嗦,因为W3C规定内联里面不可以有块元素

所以只要你的css还是符合法律规定的,块元素的父级一定是块元素

如果你违反法律做事,非得在内联里面套一个块元素,出了什么事情概不负责

好了,又扯多了一些,回到我们的话题中

在这里的话距离li最近的块级父元素那就是ul了

所以加了float:left的li们都一边倒向ul的左边

当然视力稍微正常点的朋友都会说你这li明显还是和ul有那么一些间距嘛

其实这个间距是和我们之后要说的盒模型有关系

这个间距其实就是li的margin

总之先不用管这个问题

可能由于li1本身就在ul里面的左侧,所以大家对飘到左侧的体会可能并不是那么深

大家不妨把.li1的float改为right试试

如果你的运行结果和上面一样,那么恭喜你又前进了一步

好的,看着这个界面,我想问大家一个问题li1和li2,谁的位置更高一些呢?

我们在之前说过了,加了浮动的元素会飘起来,所以必然li2的位置更高一些

因此我们基本上可以猜测出来

当li1加了左浮动的时候,一定是因为蓝色li1飘起来了,然后因为li1在上空将li2挡住了

所以我们只看到了一个红色的li,我们看到的这个红色的li就是li3

那一定有人会有疑问,如果要是这样的话为什么li2和li3文字重叠在了一起呢?

实际上块元素在加了浮动飘起来之后会有这么一个特点:它会把它下方挡住的元素的文字挤下去

所以我们看到这样的效果也就不奇怪了

好的,其实我们可以进一步验证我们的猜测

如何验证呢?

我们给.li1这个类加上一条样式height:25px;

如果我们的猜测正确的话,li1的高度变成25px之后

我们可以看到li2的下半部分和整个li3

而且这次li2里面的文字虽然也被挤了下来,但是就不会盖住li里面的文字了

分析了这么多,还是直接预览最明显

和我们所设想的一模一样,这正所谓英雄所见略同,呵呵

这节课到此为止,下节课我们继续说我们的浮动

时间: 2024-10-28 10:41:42

Web前端从入门到精通-7 css简介的相关文章

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

欢迎大家回来,前段时间给大家介绍了浮动以及清除浮动的相关内容 上节课到最后我们留了一个小问题 如果所有的子元素都没有加浮动,父级不设置高度时,父级的高度会不会随子级的高度自动撑开 我们可以通过下面的代码来测试 .ul1{ width:102px; border:2px solid red;} .ul1 li{ width:100px; height:100px; border:1px solid black;} <ul class="ul1"> <li><

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

欢迎回来,上节课的话我们做了一个导航 总体来说还能看,但是也有一些小问题 首先,当我们把鼠标移上去的时候不变成小手 这个看起来最不舒服了 所以先从这里开刀 说到这里了,想和大家沟通一个问题 我们平时上网的时候鼠标放到什么地方才变成小手呢? 是不是可以点的地方呢? 可以点的话意味着什么? 意味着是一个链接对不对 链接的话在我们的html里面毫无疑问就是a标签了 好的,说到这里脾气着急的马上就会说,那就用a标签包裹文字不就完事儿了? 话一说完,代码就会被改成这样 <!DOCTYPE html> &

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

上节课呢,我们介绍了一个很重要的概念——盒模型 主要介绍了盒模型的一些基础知识:margin padding的概念 以及margin:0 auto;和margin的塌陷 如果对上述知识点还有不清楚的地方大家一定要弄懂 要不然再往下看的话比较费劲 这节课的话我们接着上节课的话题继续扯 实际上关于margin的话题还远远不止我们上节课说的那些问题 我们再看下面一个布局: <!DOCTYPE html> <html lang="en"> <head> &l

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

上节课我们主要介绍了三种css的选择器 结束的时候留了一个小问题,不知道大家还有没有记得 当多种选择器同时对一个元素操作时,会有什么情况呢? 不知道大家试了没有 先说句题外话,可能有的朋友说 你闲的蛋疼用多种选择器操作一个元素 我让一种选择器操纵一个元素不就可以了吗 我们学一个东西往往是为了用的,而不是为了装13的 所以我提出的这个问题自然有它的价值所在 接下来我会给大家分析 还拿我们的列表做例子,这次给大家举一个百度首页的例子 百度的推荐导航列表这里是不是我们的鼠标移上去的那一个块儿 外面会出

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

欢迎大家回来,上节课我们又说了margin的一个bug 那就是子元素的margin-top会传递给父元素 解决方案也已经给出来了,在此不再废话 此外还说了默认样式的清零,这个的话我个人感觉无所谓了 平时自己写代码测试的时候就直接上*{margin:0; padding:0;} 之前我们讲解盒模型的时候一直都是拿div举例子 那么我们知道,div天生就是个块元素 所以我们之前见到的那一堆margin.padding的规则都是针对块元素的 那不知道大家有没有自己测试过内嵌元素的盒模型 我们接下来就和

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

好的,在之前的11节课中 我们从对编程语言一无所知的状态循序渐进的了解了很多知识 包括html页面结构,css引入的几种方式,浮动,清除浮动,盒模型等等 现在是发挥这些知识用武之地的时候了 我们在上网浏览网页的时候不知道大家有没有注意过 在网页的最上面会有一个导航,比如 鼠标移入之后还会高亮显示 那么我们今天就利用我们之前学的东西做这样一个导航 首先,大家可以想象一下这个导航的大概结构是什么样子的呢? 可以不可以在外面有个大div作为父级 然后里面放上4个小div,一个div里面就是一项 当然没

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

上节课我们说到了标签以及标签的属性 比如一个div标签,它的属性有width height background对吧? 也就是 <div width="100px" height="100px" background="red"></div> 如果你的回答是对 那么恭喜你,你已经学晕了 上面这段代码是错误的 div下辈子也不会有width height background这些属性的 上节课,关于div,我们只说了它的一个

Web前端从入门到精通-4 html简介

本节课我继续带着大家学习html 上节课的话我们已经有了一个页面,大概长成这个样子: <!DOCTYPE html> <html lang="en"> </html> 双击这个文件打开预览,什么都没有 好的,从现在开始我们给它加一些内容 根据html语法规定,html标签里的直系子标签有head body等 所以你的脑海中应该想着我们的页面变成了这样 <!DOCTYPE html> <html lang="en"

Web前端从入门到精通-2 关于html和开发工具

上节课呢,我们说到了html源文件在浏览器中打开就是一个网页了,那么html源文件是怎么来的呢? 很多教程为了让大家很快入门,就直接告诉大家说先创建一个记事本文件,然后把它的扩展名改成html,双击就会发现在浏览器中打开了 之后就对记事本里面怎么写html开始大讲特讲 但是个人认为,这样说忽略了初学者的感受 第一次接触html的朋友如果看到上面这样的讲解的话很容易会提出疑问 你为什么新建了一个txt改成了html就可以了?我新建一个别的文件比如word文件(扩展名为doc)改成html可不可以呢