百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

HTML+CSS基础训练之实现一个“真实”的网页

liuian 2025-01-11 15:10 17 浏览

一、任务介绍:

高保真的完成下图布局:

二、分析布局

首先要分析一下各个模块的布局

我们依旧使用的盒子模型。

首先先分为两个大盒子(红色边框)header 盒子和 content 盒子。

其中content中相对对来说比较简单,就需要添加需要的内容文字就好啦。

header相对于基本作业要复杂一些。

在header中首先要分为两个盒子(绿色边框)第一个盒子head装的是标题,下面的盒子info_box装了三个盒子。包括信息盒子info、评论盒子comment_box评论盒子、分享盒子share_box。

评论盒子comment_box中 分为 join div元素和 comment div元素

分享盒子share_box中 分为sina (微博)qqzone(qq空间)wechat(微信)

大体的布局还是用div元素实现,其中信息盒子与评论盒子打算用p+span元素实现,分享盒子用div+“雪碧图”实现。

标题框和内容框的距离为40px。

三、完成html代码

根据我们上面对各个模块布局的分析,我们接下来就可以写html代码啦~其中在header的info盒子,其中信息盒子与评论盒子打算用p+span元素实现(语义化更好一点),分享盒子用div+“雪碧图”实现。

(这里还是有需要的改进的地方,比如行前面的空格我是使用的 空格键,应该还有更好的方法,请大佬指教嘿嘿~)

代码如下:

<html>

<head>
    <title>加分作业
    </title>

    <link rel="stylesheet" href="css/demo2.css">

</head>

<body>
    <div class="container">
        <div class="header">
            <p class="head">啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦</p>
            <div class="info_box">
                <p class="info">
                    <span>2020年5月21日 08:38:23</span><br>
                    <span class="text">来源:</span>
                    <span class="sourse">蜡笔小新酱</span>
                    <span class="icon_1"> </span>
                </p>
                <div class="comment_box">
                    <p class="join"><span>0</span>人参与</p>
                    <p class="comment"><span>0</span>人评论</p>
                    </p>
                </div>
                <div class="share_box">
                    <div class="sina"></div>
                    <div class="qqzone"></div>
                    <div class="wechat"></div>
                </div>
            </div>
        </div>
        <div class="content">
            <p><span>      我的名字是蜡笔小新,我今年五岁,我很快乐,我的妈妈是美牙,我的爸爸是广治
            </span><br>我的朋友有</span><br/>      阿呆<br/>      风间
                <br/>      正南<br/>      妮妮<br/>      小白<br/></p>

        </div>


    </div>
</body>

</html>

四、CSS美化

为了尽可能高保真,我们要测量一下各个模块之间的距离。

标题框和内容框的距离为40px

在整个标题盒子 header中,标题head和信息盒子info_box之间的距离30px

在信息盒子中,来源盒子info和评论盒子comment_box的距离是228px

评论盒子comment_box和分享盒子share_box之间的像素是30px

其中来源盒子info中的时间和来源之间的像素是10px

在评论盒子中的 参与和评论之间的像素为20px

在分享盒子中每个图片之间的距离为10px

css代码如下:

* {
    margin: 0px;
    padding: 0px;
}

.container {
    width: 670px;
    height: 800px;
    margin: auto;
}

.head {
    font: bold 24px Microsoft Yahei;
    margin-top: 40px;
}

.info {
    font: 12px Microsoft Yahei;
    color: #999;
    margin: 25px 0 5px 0;
    line-height: 20px;
    width: 350px;
}

.header {
    height: 142px;
    width: 655px;
    border-bottom: 1px solid #828181;
    display: flex;
    flex-direction: column;
}

.content p {
    line-height: 40px;
    font: Microsoft Yahei;
    color: #636363;
    margin-top: 40px;
}

.content p span {
    line-height: 15px;
}

.icon_1 {
    background: url("../img/icon_1.png") no-repeat 2px center;
    padding: 19px;
}

.info_box {
    display: flex;
}

.comment_box {
    display: flex;
    color: #999;
    margin: 40px 30px 5px 0;
}

.comment_box p {
    font: Microsoft Yahei;
    font-weight: lighter;
    font-size: 12px;
}

.share_box {
    display: flex;
    font-size: 12px;
    height: 40px;
    margin: 32px 0px 5px 0;
}

.join {
    margin: 0px 20px;
}

.qqzone {
    margin-left: 10px;
}

.wechat {
    margin-left: 10px;
}

.comment_box span {
    font-family: 'Georgia';
    font-size: 16px;
    font-style: normal;
    font-weight: bold;
    color: red;
}

.sina {
    background-position: 0px 0px !important;
}

.qqzone {
    background-position: 0px -32px !important;
}

.wechat {
    background-position: 0 -66px !important;
}

.share_box div {
    width: 40px;
    height: 30px;
    background: url(../img/icon_3.jpg);
}

五、CSS美化分析

1.使用行内元素span标签。作为行内元素span标签使用起来也很方便,作为一个小容器,可以把容器分为多个小容器,方便容器中个别部分应用样式,对于容器中其他部分实现特别的效果。其中在评论盒子中用到。如下图。我们可以看到 0人参与 0人评论 可以用p元素一行完成,但是有一个问题,“0”的字体和颜色和别的字不太一样。我们在实现的过程中可以再多写几个div 然后重新布局但是那样太麻烦了,直接使用行内元素就可以搞定。

html代码如下:

 <p class="join"><span>0</span>人参与</p>
 <p class="comment"><span>0</span>人评论</p>

css美化:

.comment_box {
    display: flex;
    color: #999;
    margin: 40px 30px 5px 0;
}
.comment_box span {
    font-family: 'Georgia';
    font-size: 16px;
    font-style: normal;
    font-weight: bold;
    color: red;
}

2.在分享盒子share_box中设置背景图片的时候使用雪碧图。

先来说一说雪碧图是怎么回事

首先把网页中一些背景图片整合到一张图片文件中(png格式)

再利用CSS的"background-image"引入图片,配合"background- repeat"禁止平铺

最后利用css的"background-position"进行背景精确的定位出背景图片的位置(默认起始位置为background-position:0% 0%;如果background-position属性值之设置一个,那么另一个默认为center。

我们需要加载的图片素材是这样的

而我们最后要的效果是这样的,是三张分开的图片,但是都是上面图片的一部分

此时我们就可以用雪碧图啦~先设置 sina wechat qqzone 这三个盒子的大小并使这三个盒子都以这张雪碧图为背景:

.share_box div {
    width: 40px;
    height: 30px;
    background: url(../img/icon_3.jpg);
}

后在各个div中使用background-position进行定位。就是定位到我们想要的部分。

.sina {
    background-position: 0px 0px !important;
}
.qqzone {
    background-position: 0px -32px !important;
}
.wechat {
    background-position: 0 -66px !important;
}

特别要注意一点 在给div添加定位时,要写!important提升指定样式规则的应用优先权。这样才可以定位到不同图片的坐标。

使用雪碧图的优点:如果图片来源于网页的话,就可以减少http请求的次数,提高页面加载速度。方便修改。

六、优化

根据我们以上的效果,我们可以进行一下优化。比如添加背景图片~或者添加鼠标悬停的效果。

在这里,我(突发奇想)设计了此页面的一个深色模式(其实就是把白底黑字换成暗底白色来)还有一些鼠标悬停的效果。

添加背景图片的css代码如下:

.container {
    width: 670px;
    height: 500px;
    margin: auto;
    background-position: center;
    background-image: url(../img/bgimg.jpg);
    background-repeat: no-repeat;
    background-size: 100%;
}

添加鼠标悬停效果css代码如下:

.sourse:hover {
    color: red;
    cursor: pointer;
    text-decoration: underline;
}
.comment_box p:hover {
    cursor: pointer;
    text-decoration: underline;
    color: red;
}
.share_box div {
    cursor: pointer;
}

七:效果展示

高保真:

优化图:

总结和反思:

1,添加css时,一定要写这句:

* {
    margin: 0px;
    padding: 0px;
}

否则会页面的内容不会贴顶,就是总是和页面顶部有一些距离。

2,通过这次实验我更进一步的体会到了盒子模型的一些特点,对boder margin padding 有了更深一步的理解。可以把盒子模型想成一个装在快递盒子里新手机盒。新手机是我们的内容,手机和手机盒的泡沫就是padding(内边框),手机盒子的纸壳就是border(边框),最后手机盒子和快递盒子之间的距离就是margin(外边距)。


相关推荐

vue怎么和后端php配合

Vue和后端PHP可以通过HTTP请求进行配合。首先,前端Vue可以使用axios库或者Vue自带的$http对象来发送HTTP请求到后端PHP接口。通过axios库发送POST、GET、PUT等请求...

Ansible最佳实践之 AWX 使用 Ansible 与 API 通信

#头条创作挑战赛#API简单介绍红帽AWX提供了一个类似Swagger的RESTful风格的Web服务框架,可以和awx直接交互。使管理员和开发人员能够在webUI之外控制其...

PHP8.3 错误处理革命:Exception 与 Error 全面升级

亲爱的小伙伴,好久没有发布信息了,最近学习了一下PHP8.3的升级,都有哪些优化和提升,把学到的分享出来给需要的小伙伴充下电。技术段位:高可用性必修目标收益:精准错误定位+异常链路追踪适配场景...

使用 mix/vega + mix/db 进行现代化的原生 PHP 开发

最近几年在javascript、golang生态中游走,发现很多npm、gomod的优点。最近回过头开发MixPHPV3,发现composer其实一直都是一个非常优秀的工具,但是...

15 个非常好用的 JSON 工具

JSON(JavaScriptObjectNotation)是一种流行的数据交换格式,已经成为许多应用程序中常用的标准。无论您是开发Web应用程序,构建API,还是处理数据,使用JSON工具可以大...

php8环境原生实现rpc

大数据分布式架构盛行时代的程序员面试,常常遇到分布式架构,RPC,本文的主角是RPC,英文名为RemoteProcedureCall,翻译过来为“远程过程调用”。主流的平台中都支持各种远程调用技术...

「PHP编程」如何搭建私有Composer包仓库?

在前一篇文章「PHP编程」如何制作自己的Composer包?中,我们已经介绍了如何制作自己的composer包,以及如何使用composer安装自己制作的composer包。不过,这其中有...

WAF-Bypass之SQL注入绕过思路总结

过WAF(针对云WAF)寻找真实IP(源站)绕过如果流量都没有经过WAF,WAF当然无法拦截攻击请求。当前多数云WAF架构,例如百度云加速、阿里云盾等,通过更改DNS解析,把流量引入WAF集群,流量经...

【推荐】一款 IDEA 必备的 JSON 处理工具插件 — Json Assistant

JsonAssistant是基于IntelliJIDEs的JSON工具插件,让JSON处理变得更轻松!主要功能完全支持JSON5JSON窗口(多选项卡)选项卡更名移动至主编辑器用...

技术分享 | 利用PHAR协议进行PHP反序列化攻击

PHAR(“PhpARchive”)是PHP中的打包文件,相当于Java中的JAR文件,在php5.3或者更高的版本中默认开启。PHAR文件缺省状态是只读的,当我们要创建一个Phar文件需要修改...

php进阶到架构之swoole系列教程(一)windows安装swoole

目录概述安装Cygwin安装swoolephp7进阶到架构师相关阅读概述这是关于php进阶到架构之swoole系列学习课程:第一节:windows安装swoole学习目标:在Windows环境将搭建s...

go 和 php 性能如何进行对比?

PHP性能很差吗?每次讲到PHP和其他语言间的性能对比,似乎都会发现这样一个声音:单纯的性能对比没有意义,主要瓶颈首先是数据库,其次是业务代码等等。好像PHP的性能真的不能单独拿出来讨论似的。但其实一...

Linux(CentOS )手动搭建LNMP(Linux+Nginx+Mysql+PHP)坏境

CentOS搭建LNMP(Linux+Nginx+Mysql+PHP)坏境由于网上各种版本新旧不一,而且Linux版本也不尽相同,所以自己写一遍根据官网的提示自己手动搭建过程。看官方文档很重要,永远...

json和jsonp区别

JSON和JSONP虽然只有一个字母的差别,但其实他们根本不是一回事儿:JSON是一种数据交换格式,而JSONP是一种非官方跨域数据交互协议。一个是描述信息的格式,一个是信息传递的约定方法。一、...

web后端正确的返回JSON

在web开发中,前端和后端发生数据交换传输现在最常见的形式就是异步ajax交互,一般返回给js都是json,如何才是正确的返回呢?前端代码想要获取JSON数据代码如下:$.get('/user-inf...