当前位置: 首页 > news >正文

【H2O2|全栈】关于CSS(5)如何制作一个搜索网页的首页?

目录

CSS基础知识

前言

准备工作

简单网页的组成部分

案例

浏览器的窗口大小

划分主要部分

固定定位

头部导航(左侧)

头部导航(右侧)

LOGO

​编辑搜索框

热搜标题

热搜内容

文字简介 

资源

预告和回顾

后话


CSS基础知识

前言

本系列博客将分享层叠样式表(CSS)有关的知识点。

本期补充网页布局的相关内容,以及网页的基本组成部分。我会演示如何制作一个简单的百度搜索首页出来。

因为现在的网页还比较简单,所以本期暂时用不着定位的知识,我会使用一些其他的技巧来弥补没有定位属性带来的问题。

不是专业的科普博主,主打一个分享知识,写的不好,多多包涵(嘿嘿)。

准备工作

软件:参考版本Visual Studio Code

推荐VS插件(扩展包):Open in browser, Live Preview, Live Server

浏览器版本:Chrome

系统版本: Win10/11/其他非Windows版本

*我的电脑是Win10的版本,仅供参考*

简单网页的组成部分

一个简单的网页通常由头部(header)、主体(main)以及底部(footer)组成。头部中通常还会包含头部导航(head-nav)和轮播图(banner),主体也会按照功能划分不同的模块,而底部可能会有一些文字简介链接

虽然,现在制作网页一般使用模版来制作,但是在这里我们还是需要了解一下基本的网页制作过程。

案例

浏览器的窗口大小

想要获取浏览器的窗口大小,可以利用浏览器的控制台,输入指定代码实现。

右键打开检查,找到控制台:

输入下面两行代码,分别对应浏览器窗口的宽和高;

screen.widthscreen.height

以我的电脑为例,在Chrome浏览器的控制台输入上面的代码,显示的窗口尺寸如下:

 知道这个尺寸之后,我们对自己制作的页面的最大边界就心中有数了。 

划分主要部分

今天我们的案例是仿照百度的首页制作一个简单的搜索首页,最简单的百度首页如下:

*其实完全做的一样也不是不可能,但是我们做的稍微简单一点~*

这个网页简单到只有三个最基础的部分,也就是下面图示的三个部分:

那么,在HTML中首先就要对应下面这一段代码:

<div class="header-wrap"></div>
<div class="main-wrap"></div>
<div class="footer-wrap"></div>

wrap是组成的网页的大盒子的最外层,它不设置宽度和高度,因此它默认的宽度为100%,高度由内容撑开。它的作用是帮助我们的内容水平居中

接下来,我们来设置和内容占据的宽高一致的盒子,用来确定内容的具体位置

对应的HTML代码如下:

<div class="header-wrap"><div class="header"></div>
</div>
<div class="main-wrap"><div class="main"></div>
</div>
<div class="footer-wrap"><div class="footer"></div>
</div>

这里有一个思想,那就是相同功能的代码,我们可以使用同一个选择器包起来,也就是代码复用的思想。

来到CSS部分,首先,使用通配符预设样式,这里暂时先将margin和padding的默认值都设置为0,便于后面调整元素的边距参数:

* {margin: 0;padding: 0;}

然后,创建居中和初始宽度格式化的选择器format:

.format {margin: 0 auto;width: 654px;}

可能有朋友会有疑问,这个宽度的初始值是什么呢?

其实,它是你自己认为合适的内容宽度大小,一般是设计好的。我这里用的是像素,当然最好是用em(依据父元素字体大小设置)。

然后,把这个选择器加到我们的内容盒子中:

<div class="header-wrap"><div class="header format"></div></div><div class="main-wrap"><div class="main format"></div></div><div class="footer-wrap"><div class="footer format"></div></div>

现在,内容盒子的宽度已经被格式化选择器设定好了,我们还需要设置每个内容盒子自己的高度

特别的,对于我们头部和底部部分的宽度,它和其他主体部分的宽度明显不同,我们还需要单独给它设置自己的宽度,即自动填满整个浏览器的宽度。

参考数值如下:

.header {width: 100%;min-width: 1000px;min-height: 60px;}.main {height: 2000px;}.footer {width: 100%;height: 40px;}

其中主体的内容高度暂时随意设置就好,只要能容下所有的内容即可。

设置最小尺寸实际上是为了保证在缩放页面发生变形的时候,盒子缩到一定大小之后就不会被压缩了,保证了其中的内容不会被盒子的变形而“挤出去”。

需要注意的是,其实这里有一个东西我们不得不用到定位的知识,那就是我们的底部区域。所以这里扩展一下固定定位的知识。

固定定位

定位使用的属性是position,直译为位置,用于设置指定元素所处的位置。

还记得我们在HTML入门章节中说的书签的实现吗,里面就用到了定位。

固定定位的属性值为fixed,它可以让特定内容固定在窗口的某个位置,而不是随滚动条的滚动而改变位置。

此外,我们还需要知道和定位相关的四个属性:

属性含义
top到父元素顶部的距离
bottom到父元素底部的距离
left到父元素左侧的距离
right到父元素右侧的距离

对于固定定位而言,所谓父元素就是整个可视窗口。因此,无论怎么拉动滚动条,设置了固定定位的元素总是相对窗口静止的。

=========================================================================

在了解了固定定位有关的知识后,我们将底部的文字简介内容区域添加如下设置:

position: fixed;
bottom: 0;
left: 0;

为了方便观看每个区域的大小,可以暂时给各个部分添加背景色,在该区域内容全部完成之后,再将背景色去除或更改为实际需要的背景色。

目前的界面效果如下:

然后,就是具体地看每一个内容对应的小盒子里面的内容了。 

头部导航(左侧)

参考的最小尺寸为580px*60px。

由于盒子里的链接离左侧边界还有一点距离,所以加入一个左侧内边距24px。

最重要的是,盒子是始终靠左的,所以还要加入一个向左浮动的效果。

头部导航左侧盒子的HTML代码如下(记得放在header盒子里):

<div class="header-nav-left"></div>

CSS代码如下:

.header-nav-left {min-width: 580px;min-height: 60px;padding-left: 24px;background: #d1339f;float: left;}

然后就是放置我们的锚链接标签了。

设置所有a标签的默认文字装饰为none,用于去除下划线。

然后设置所有a标签(等下右侧盒子还要用到)在访问前访问后的字体颜色都为#222,鼠标悬浮时激活时字体颜色为#315efb(这个随意,我用的是百度的字体颜色)。

a标签的字体大小设置为13px,行高统一设置为23px。

设置a标签的CSS代码如下:

a {line-height:23px;font-size: 13px;text-decoration: none;}a:link,
a:visited {color: #222;}a:hover,
a:active {color: #315efb;}

然后,为每一个a标签的外侧都分别套一个盒子,用于给a标签确定具体的位置。这个盒子需要被设置为inline-block。

参考的尺寸为margin-top:19px,margin-right:24px。

特别的,还要单独为“更多”所在的盒子设置一个padding-bottom,用于把下方内容撑开。

设置锚链接盒子的CSS代码如下:

.header-nav-left div {display: inline-block;margin-top: 19px;margin-right: 24px;background: #2cc868;}.more {padding-bottom: 19px;}

这下我们就可以运行起来看看效果了,如果诸位的步骤与我相同,那么出来的应该是这个效果:

链接到的具体网页自己复制一下就好,至于“更多”的悬浮菜单效果,在未来的补充章节里会实现,这里只把总体效果做出来即可。

头部导航(右侧)

接下来制作头部导航右侧的部分,这里包含一个设置的链接和一个登录的按钮。

如法炮制,先把右侧的大盒子的样式设置好。不过注意这一次的盒子左侧还有一个padding,用于给盒子撑起一个最小的宽度

CSS代码如下:

.header-nav-right {min-width: 370px;min-height: 60px;padding-left: 200px;padding-right: 24px;background: #d1339f;float: right;}

然后,还是要把右侧大盒子里的wrap盒子都设置为inline-block。

对于“设置”的锚链接,样式大致与左边的那十个锚链接样式相同,只不过链接外包裹的盒子需要调节为左侧外边距。

对应的CSS代码如下:

.setting-wrap {margin-top: 19px;margin-left: 24px;}

登录按钮本身的尺寸为48px*24px,设置为块标签向右浮动。激活前底色设置为#4e6ef2激活后底色设置为#315efb。按钮的边框可以设置为none。

这里需要用到border-radius给按钮四个角都设置一个向内移动5px的圆角。

然后给按钮的外面套上一个盒子用于给按钮定位,这个盒子的外边距为上18px,左32px。

不要忘记使用cursor属性为鼠标悬浮设置一个小手图标的效果,属性值为pointer。

最后使用clear盒子(一个设置了clear:both的盒子)把浮动样式给清除即可。

对应的CSS代码如下:

.login-btn-wrap {margin-top: 18px;margin-left: 32px;}.login-btn {display: inline-block;width: 48px;height: 24px;background-color: #4e6ef2;border: none;border-radius: 5px;color: #fff;font-size: 13px;}.login-btn:hover {background-color: #315efb;cursor: pointer;}

到此,我们就可以把除了按钮颜色以外的所有顶部背景色去除了,效果如下:

这个部分相对来说比较简单,相对定位、图片链接等暂时先不做。

注意,还是要用一个大盒子top-logo来包住图片logo,只不过这个大盒子和外面的main内容盒子等宽,作用主要是限定缩放大小图片居中

实现的CSS代码如下:

.top-logo {min-height: 130px;max-height: 150px;text-align: center;}.logo {content: url("https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png");width: 270px;height: 129px;}

这一步实现之后的效果如下:

搜索框

接下来就是制作搜索框了,搜索框其实也分三个部分,输入框、小相机图标和搜索按钮,搜索按钮的搜索功能暂时不实现,这里只实现样式效果。

输入框的尺寸为512px*16px,内部填充为上下12px,左右16px。圆角程度为左上和左下10px。边框粗细为2px,实线,颜色为#c4c7ce

去掉输入框的右侧,即右边框设置为none。

特别的,在选中这个输入框时,我们还需要让它变为蓝色,设置outline-color属性值为#4e6ef2

在鼠标悬浮到输入框的上方时,设置颜色为#a7aab5。 

然后设置小相机图标,它的雪碧图如下:

利用雪碧图找到灰色小相机,调整图片大小为24px*20px,外边距为上下0,左-40px,右20px,显示出来。并且在鼠标悬浮时,切换为蓝色小相机。

最后是搜索按钮,关于按钮的设置方式其实和上面的登录按钮差不多,就不展开讲了。

完整的搜索框的CSS代码如下:

.search-wrap {text-align: center;padding-top: 10px;}.search-wrap div {display: inline-block;}.sl-text {width: 512px;height: 16px;vertical-align: middle;padding: 12px 16px;border: 2px solid #c4c7ce;border-right: none;border-radius: 10px 0 0 10px;outline-color: #4e6ef2;}.sl-text:hover {border-color: #a7aab5;}.camera {width: 24px;height: 20px;margin: 0 20px 0 -40px;vertical-align: middle;background-image: url("camera.png");background-position: 0 -48px;}.camera:hover {background-position: 0 -72px;}.sr-btn {width: 108px;height: 44px;line-height: 45px;margin-left: -15px;vertical-align: middle;background-color: #4e6ef2;border: none;border-radius: 0 10px 10px 0;color: #fff;font-size: 17px;font-weight: 400;cursor: pointer;}

这里盒子可能有点多,所以也给出完整的搜索框HTML代码:

<div class="search-wrap"><div class="search-left"><input class="sl-text" type="text"></div><div class="camera"></div><div class="search-right"><input class="sr-btn" type="button" value="百度一下"></div></div>

到目前位置,我们的百度网页的样子如下:

热搜标题

热搜的那个字体其实可以在字体库里面找,感兴趣的可以自己去找一下。字体大小为14px,如果使用默认字体最好设置一下字体粗细为700。

看到左边标题的那个小箭头了吗,那其实是一个引入的字体图标,我们可以在阿里矢量图标库里面找到我们需要的向右箭头,按照网站提供的引入方式引入,这里就不详细说如何引入了。调整大小为15px*14px,或者按照字体大小直接调整为14px。

我使用的四个图标为:

我使用的是直接下载png的方式,这种方式兼容性比较好,注意要选择正确的颜色的图标。

至于悬浮上去改变颜色,就多下几个对应颜色的图标,然后用hover样式来做就好,这里就不做这个了。

对应的CSS代码为:

.hot-search-wrap {margin-top: 45px;}.hot-search-wrap span {display: inline-block;vertical-align: middle;font: 14px Arial, sans-serif;font-weight: 700;}.hot-search {float: left;}.change {color: #626675;float: right;}.my-icon {width: 16px;height: 16px;background-size: cover;}#right-arrow {background-image: url("images/右箭头-copy.png");}#change-circle {background-image: url("images/04转换-copy.png");}

对应的HTML代码为:

<div class="hot-search-wrap"><div class="hot-search"><span>百度热搜</span><span class="my-icon" id="right-arrow"></span></div><div class="change"><span class="my-icon" id="change-circle"></span><span>换一换</span></div><div class="clear"></div></div>

热搜内容

热搜内容这一块可以使用表格来做,制作一个4*3的表格,设置它的宽度为654px,不显示边框,然后调节一下每个单元格的边距即可。

对应的CSS代码如下:

table {width: 654px;}table,td {vertical-align: middle;border-collapse: collapse;border: 1px solid #fff;padding: 5px;}table img {width: 16px;height: 16px;text-align: center;vertical-align: middle;}.type {width: 16px;text-align: center;}.padding-line {padding-right: 40px;}

对应的表格HTML代码如下:

<table><tr><td class="type"><img src="./images/置顶.png" alt=""></td><td class="padding-line">置顶新闻</td><td class="type rank-3">3</td><td class="padding-line">新闻xxxxxx</td></tr><tr><td class="type rank-1">1</td><td class="padding-line">新闻xxxxxx<img class="hot-tag" src="./images/热搜疾病.png" alt=""></td><td class="type rank">4</td><td class="padding-line">新闻xxxxxx</td></tr><tr><td class="type rank-2">2</td><td class="padding-line">新闻xxxxxx</td><td class="type rank">5</td><td class="padding-line">新闻xxxxxx</td></tr></table>

到此,我们主体部分的内容就全部完成了,去除背景颜色,效果如下:

 

文字简介 

终于到了最后的部分,最底部的文字简介了,这里在缩放之后的效果和百度可能不太一样,但是基本实现就好了。

和顶部一样,同样是使用锚链接来做,不过这里的内容全部居中即可。

锚链接字体大小为12px,默认和访问后的字体颜色为#bbb,鼠标悬浮和激活时字体颜色为#222。

锚链接外侧套的盒子高度为39px,内容垂直居中,右侧外边距为14px。

我并没有把底部所有的标签都做了,想做的可以自己添加,不用更改样式。

底部的CSS代码如下:

.intro {margin: 0 17px;text-align: center;}.intro div {display: inline-block;height: 39px;margin-top: 8px;margin-right: 14px;}.intro a:link,.intro a:visited {color: #bbb;}.intro a:hover,.intro a:active {color: #222;}

对应的HTML代码如下:

<div class="intro"><div class="i-a"><a href="">关于百度</a></div><div class="i-a"><a href="">About Baidu</a></div><div class="i-a"><a href="">使用百度前必读</a></div><div class="i-a"><a href="">帮助中心</a></div><div class="i-a"><a href="">企业推广</a></div></div>

 至此,底部的工作也已经完成了,去除背景色,完整效果如下:

资源

本期的网页资源我已经上传在CSDN网站上了,后续可能会和其他项目一起分享到百度网盘中,分享完之后,我会给出下载地址。

预告和回顾

在下一期博客可能依然是对前面内容的补充,应该会专门把定位完整地讲一遍,然后再讲一下类似购物网站的页面制作。

对CSS感兴趣的朋友,可以看下面的CSS专栏,当前为第五期:

专栏 | CSS入门icon-default.png?t=O83Ahttp://t.csdnimg.cn/4bvCJ当然,也欢迎对全栈项目感兴趣的朋友查看我的其他专栏,有些专栏已经完结,可以放心查阅。

后话

在全栈领域,博主也只不过是一个普通的萌新而已。本系列的博客主要是记录一下自己学习的一些经历,然后把自己领悟到的一些东西总结一下,分享给大家。

文章全篇的操作过程都是笔者亲自操作完成的,一些定义性的文字加入了笔者自己的很多理解在里面,所以仅供参考。如果有说的不对的地方,还请谅解。

==期待与你在下一期博客中再次相遇==

——疑似有点缺氧的【H2O2】

 


http://www.mrgr.cn/news/29121.html

相关文章:

  • 【RabbitMQ】可靠性传输
  • 部分动态铜皮的孤岛无法删除。报错
  • 如何在运行时传递回调: 解锁动态事件处理
  • 电磁阀,线性电磁阀信号驱动隔离变送器
  • Java | Leetcode Java题解之第414题第三大的数
  • [强化你的LangChain工具创建技能:从基础到进阶]
  • 20240918 每日AI必读资讯
  • npm安装时候报错certificate has expired
  • 从HTML到LangChain:如何高效加载和解析HTML文件
  • 在Ubuntu 18.04上安装R的方法
  • 『功能项目』靠近Npc显示可对话标识【60】
  • 在Ubuntu上安装Rails和nginx与Passenger的方法
  • C++第七节课 运算符重载
  • Linux:用户账号管理和组账号管理
  • stm32开发之串口空闲中断和环形数组的最简单的组合使用
  • 【ShuQiHere】算法分析:揭开效率与复杂度的神秘面纱
  • goctl安装失败
  • oracle 11g SYSAUX表空间清理
  • 408算法题leetcode--第七天
  • Java中的OOM与SOF:详解内存溢出与栈溢出