【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.rhkb.cn/news/429294.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat中BIO和NIO的区别(Tomcat)

BIO Tomcat中BIO的模型和理论很简单&#xff0c;例图如下 1.Acceptor线程死循环阻塞接收客户端的打过来的socket请求 2.接收到请求之后打包成一个SocketProcessor&#xff08;Runnable&#xff09;&#xff0c;扔到线程池中读取/写入数据 参数配置 1.Acceptor默认线程是1&#…

网络丢包定位记录(二)

网卡驱动丢包 查看&#xff1a;ifconfig eth1/eth0 等接口 1.RX errors: 表示总的收包的错误数量&#xff0c;还包括too-long-frames错误&#xff0c;Ring Buffer 溢出错误&#xff0c;crc 校验错误&#xff0c;帧同步错误&#xff0c;fifo overruns 以及 missed pkg 等等。 …

Cursor免费 GPT-4 IDE 工具的保姆级使用教程

Cursor免费 GPT-4 IDE 工具的保姆级使用教程 简介 Cursor 是一款基于人工智能技术的代码生成工具。 它利用先进的自然语言处理和深度学习算法&#xff0c;可根据用户的输入或需求&#xff0c;自动生成高质量代码。 不管是初学者&#xff0c;还是资深开发者&#xff0c;Curs…

uniapp 微信小程序 订阅消息功能实现

该网址 https://api.weixin.qq.com 上线后不可访问&#xff0c;调用该网址操作需在后端&#xff08; 重要&#xff01; 重要&#xff01; 重要&#xff01;&#xff09; 1.首先拿到的三个码 //微信公众平台 //https://mp.weixin.qq.com const wxappid "管理-开发管理-A…

Java语言程序设计基础篇_编程练习题***18.32 (游戏:骑士的旅途)

目录 题目&#xff1a;***18.32 (游戏:骑士的旅途) 习题思路 代码示例 输出结果 题目&#xff1a;***18.32 (游戏:骑士的旅途) 骑士的旅途是一个古老的谜题&#xff0c;它的目的是使骑从棋盘上的任意一个正方 形开始移动&#xff0c;经过其他的每个正方形一次&#xff0c;如…

Web_php_include 攻防世界

<?php show_source(__FILE__); echo $_GET[hello]; $page$_GET[page]; while (strstr($page, "php://")) { 以是否检测到php://为判断执行循环$pagestr_replace("php://", "", $page);//传入空值&#xff0c;替换 } include($page); ?&g…

单样本Cellchat(V2)细胞通讯分析学习和整理

细胞通讯分析是一种研究不同细胞类型之间如何通过信号分子&#xff08;如配体和受体&#xff09;进行相互交流和调控的分析方法。它在揭示细胞间相互作用的机制&#xff0c;理解组织和器官如何协调运作方面具有重要意义。 细胞通讯分析的主要内容如下&#xff1a; 配体-受体相…

连续数组问题

目录 一题目&#xff1a; 二思路&#xff1a; 三代码&#xff1a; 一题目&#xff1a; leetcode链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 二思路&#xff1a; 思路&#xff1a;前缀和&#xff08;第二种&#xff09;化0为-1hash&#xff1a; 这样可以把…

【深入学习Redis丨第六篇】Redis哨兵模式与操作详解

〇、前言 哨兵是一个分布式系统&#xff0c;你可以在一个架构中运行多个哨兵进程&#xff0c;这些进程使用流言协议来接收关于Master主服务器是否下线的信息&#xff0c;并使用投票协议来决定是否执行自动故障迁移&#xff0c;以及选择哪个Slave作为新的Master。 文章目录 〇、…

五种数据库特性对比(Redis/Mysql/SQLite/ES/MongoDB)

做后端开发的程序员基本都要学会数据库的相关知识。 1、关系型数据 今天就着这段时间了解大模型的事需要牵扯到是我们接触最多的、也是入门后端必学的关系型数据库。在关系型数据库中&#xff0c;数据以表的形式进行组织和存储&#xff0c;每个表就像一个 Excel 表格&#xf…

如何写一个自动化Linux脚本去进行等保测试--引言

#我的师兄喜欢给我的休闲实习生活加活&#xff0c;说是让我在实习期间写一个自动化脚本去进行等保测试。呵呵哒。 怎么办呢&#xff0c;师兄的指令得完成&#xff0c;师兄说让我使用Python完成任务。 设想如下&#xff1a; 1、将Linux指令嵌入到python脚本中 2、调试跑通 …

基于微信小程序的宠物寄养平台的设计与实现+ssm(lw+演示+源码+运行)

摘 要 随着科技和网络的进步&#xff0c;微信小程序技术与网络、生活贴和的更加紧密。需要依靠客户端的单机系统逐渐被淘汰&#xff0c;利用互联网可以处理大量数据的新型系统如雨后春笋般迅速发展起来。这类系统和信息化时代的同步发展对传统的办公管理方式造成了很大的压力。…

Linux入门学习:Git

文章目录 1. 创建仓库2. 仓库克隆3. 上传文件4. 相关问题4.1 git进程阻塞4.2 git log4.3 上传的三个步骤在做什么4.4 配置邮箱/用户名 本文介绍如何在Linux操作系统下简单使用git&#xff0c;对自己的代码进行云端保存。 1. 创建仓库 &#x1f539;这里演示gitee的仓库创建。…

华为全联接大会HUAWEI Connect 2024印象(一):OpenEuler

因为和华为有课程合作&#xff0c;此次应邀参加了华为全联接大会 &#xff08;HUAWEI Connect 2024&#xff09;&#xff0c;分几次分享一下自己的见闻。 HUAWEI Connect 2024的规模很大&#xff0c;不过主要面向的应该是企业市场&#xff0c;我比较关注的嵌入式系统的内容很少…

MTK zephyr平台:USB升级、枚举流程

一、USB升级流程 通过代码及log分析,当前平台升级过程在PL阶段进行 USB download相关代码 mtk/modules/hal/boot/preloader/platform/flashc/ mtk/modules/hal/boot/preloader/platform/board_name/flash/ mtk/modules/hal/boot/preloader/platform/board_name/src/drive…

Kubernetes从零到精通(11-CNI网络插件)

Kubernetes网络模型 Kubernetes的网络模型&#xff08;Kubernetes Networking Model&#xff09;旨在提供跨所有节点、Pod和服务的统一网络连接。它的核心理念是通过统一的网络通信规则&#xff0c;保证集群中的所有组件能够顺畅地相互通信。Kubernetes网络模型主要有以下几个关…

Java异常架构与异常关键字

1. Java异常简介 Java 异常是 Java 提供的一种识别及响应错误的一致性机制。 Java 异常机制可以使程序中异常处理代码和正常业务代码分离&#xff0c;保证程序代码更加优雅&#xff0c;并提高程 序健壮性。在有效使用异常的情况下&#xff0c;异常能清晰的回答 what, where,…

RabbitMQ:交换机详解(Fanout交换机、Direct交换机、Topic交换机)

♥️作者&#xff1a;小宋1021 &#x1f935;‍♂️个人主页&#xff1a;小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识&#xff0c;和大家一起努力呀&#xff01;&#xff01;&#xff01; &#x1f388;&#x1f388;加油&#xff01; 加油&#xff01…

ftp服务的管理及安全优化

1.ftp介绍 ftp : file transfer proto 互联中最老牌的文件传输协议 2.vsftpd安装及启用 环境 #server 主机 &#xff1a; # R3 # 192.168.10.130 # selinux 关闭 # 火墙开启 # dnf 安装设定完成 # #client 主机 &#xff1a; # R4 # 192.168.10.131 # selinux 关闭 …

【Elasticsearch系列四】ELK Stack

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…