最近由于工作原因以及自己的懈怠,已经很久都没有更新过博客了。通过这段时间,我发现坚持一件事情是真的很难,都说万事开头难,但是在放弃这件事上好像开头了后面就顺理成章的继续下去了。中间即使不怎么情愿也在努力的每周更新博客,但是自从9月份以来,第一次因为工作需要加班而断更之后,后面好像很容易找到理由断更。从这件事上我学到了一点:在坚持一件事的时候千万要坚持,只要中间放弃一次,后续就可以心安理得的将其抛之脑后。这次在这里也是希望自己能够再次坚持之前的每周至少一更。即使没有内容。。。。

感想就这么多,现在进入真正的主题——HTML+CSS相关内容的整理,因为网上针对HTML+CSS的相关知识已经很多了,而且都是很零碎的点,大多是对应的代码,也可以说是应用性极强的,我本人是不太喜欢大段大段的帖代码的。学习的过程中我喜欢从理论或者从实践开始,根据需求或者理论来写代码,需求清楚了,流程出来了,代码就是水到渠成的事。所以这次就根据具体的一个网页项目来梳理一下我这段时间学习这些东西的成果。

最终的效果图如下:

我希望自己通过对Web开发的学习能够自己独立的开发一套博客系统,因此我在选择练手项目的时候主要找的是博客的相关页面。这是从站长之家上找的一个博客网站模板的首页,它相对其他的模板来说显的比较中规中矩,而且对初学者来说实现起来更加简单。

基本布局

从大体上看,它可以分为几个部分:

大体上分为3个部分,头部、内容部分,以及下方的页脚部分。

头部可以分为上面的标题以及下方的导航部分,内容部分又可以分为左边和右边两个部分。然后根据区域的划分,可以写下大体的代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>CSS + HTML项目博客首页</title> <meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
<!--顶部-->
<div class = "header">
<div class = "title">
</div>
<div class = "nav">
</div>
</div> <div class = "container">
<div class = "left">
</div>
<div class = "right">
</div>
</div> <!--底部-->
<div class = "footer"> </div>
</body>
</html>

然后再使用CSS的样式规定具体的布局颜色:

*{
margin:auto; /*只有设置了对应的宽度,才会默认居中*/
padding:0px;
font-family: "Microsoft YaHei","微软雅黑","Lantinghei SC","Open Sans",Arial,"Hiragino Sans GB","STHeiti","WenQuanYi Micro Hei",SimSun,sans-serif;
} .header{
margin-top:15px;
} .title{
height: 20px;
line-height: 15px;
width:1200px;
color:#999;
} .nav{
width:1200px;
margin-top:8px;
} .container{
width:1200px;
margin-top:15px;
} .left{
float:left;
width:820px;
} .right{
float:left;
margin-left:20px;;
} .footer{
height:60px;
width:100%;
background-color:#fff;
text-align: center;
padding-top:24px;
font-size:12px;
color:#999;
}

这里有一个问题,我当时一直以为margin:auto;这个会直接将对应的元素居中,但是我在实践中发现它好像并没有,原来当时我忘记了设置元素的宽度,而元素默认的宽度是与父元素相同的,这样就导致margin:auto这个属性认为不需要给外边距,所以也就没有居中,只有给了宽度,它才会将元素相对于父元素居中。

导航栏的实现

这里导航栏使用无序列表 + a链接来实现,我们先写上对应的HTML代码

<ul>
<li><a href="index.html">首页</a></li>
<li><a href="index.html">列表页</a></li>
<li><a href="index.html">详细页</a></li>
<li><a href="index.html">404</a></li>
<li><a href="index.html">MZ-NetBlog主题</a></li>
<li><a href="index.html">IT技术笔记</a></li>
<li><a href="index.html">源码分享</a></li>
<li><a href="index.html">靠谱网赚</a></li>
<li style = "margin-right: 0px;"><a href="index.html">资讯分享</a></li>
</ul>

然后通过CSS样式来调整

/*先去掉列表前的小圆点*/
.nav ul {
list-style-type: none;
} /*让列表项左浮动,以便导航项可以横向排列,同时设置右外边距,让各项可以分割开来*/
.nav ul li{
float:left;
margin-right:34px;
} /*上述内容已经有了导航栏的雏形,剩下的就是设置导航项的字体、颜色、以及点击的相关属性*/
.nav ul li a{
text-decoration:none;
color:#999;
font-size:18px;
} .nav ul li a:hover{
color:lightskyblue;
} .nav ul li a:active{
color:lightskyblue;
}

通过上述的简单的CSS就可以制作对应的导航栏了

左上角标签页的制作

从原始的网页效果图来看,标签页可以看成上下两个部分,上方是一个导航栏,而下方则是一个div,这个div根据点击导航上的具体项来显示不同的内容。因此它的大致内容结构可以用下面的HTML来定义

<div class = "about">
<!--上方是一个导航栏-->
<div class = "tab-header">
<ul>
<li><a href = "#" style = "color:lightskyblue;background-color:#fff;">统计信息</a></li>
<li><a href = "#">联系站长</a></li>
</ul>
</div> <!--下方是用来显示具体的内容-->
<div class = "info">
<p>日志总数:888篇</p>
<p>网站运行:88天</p>
</div>
</div>

上方的导航可以沿用之前的导航栏的CSS代码,而下方只需要设置对应的北京颜色即可,这里就不再贴出了

文章列表

文章列表采用的仍然是列表的方式,我们可以针对列表的每个项设置对应的边框,以及长度和宽度即可。下面只贴出对应的CSS代码

/**列表本身属性**/
.article-list{
width:820px;
height:960px;
background-color:#fff;
margin-top:15px;
} /**列表项属性**/
.article{
width:820px;
height: 192px;
border-top: solid 1px rgb(234,234,234);
}

文章项的制作

文章列表中有具体的文章项,这个文章项可以简单的分为几个部分:图片、标题、文章属性等等内容、文章的摘要;在这里我将它们都作为同级元素,然后调整浮动以及大小,它自然就会按照这样的布局进行排列。

<div class ="article">
<a class = "article-img"><img src = "images/article.jpg"></a> <div class = "label">
<div class = "rect"><span>MZ-NetBlog主题</span></div>
<div class = "arrow"></div>
<a href = "#">用DTcms做一个独立博客网站(响应式模板)</a>
</div> <div class = "time-watch-comment">
<span class = "time"><img src = "images/clock.jpg"><span>2018-11-06</span></span>
<span class = "watch"><img src = "images/eye.jpg"><span>666</span></span>
<span class = "comment"><img src = "images/comment.jpg"><span>4</span></span>
</div> <p>用DTcms做一个独立博客网站(响应式模板),采用DTcms V4.0正式版(MSSQL)。开发环境:SQL2008R2+VS2010。DTcms V4.0正式版功能修复和优化:1、favicon.ico图标后台上传。(解决要换图标时要连FTP或者开服务器的麻烦)</p>
</div>

这个部分我感觉最需要提出来的是对标签的制作,这里的标签是文章标题前面的那个蓝色背景,白色字体的矩形后带有箭头的东西,这个的制作我采用的是前方一个

标签,而后方利用另一个div 来制作的小箭头。

想要制作小箭头首先需要回归一下CSS中讲到的border属性,我们知道border表示的是边框,我们可以通过设置border的值来规定边框的大小颜色等等属性,那么当我们在四个边上都规定边框的时候,边框是如何来显示的呢,我们写下如下的实例

<div class = "div1"></div>
.div1{
width:100px;
height:100px;
background: orange;
float: left;
border-top:10px solid black;
border-bottom:12px solid green;
border-left:15px solid red;
border-right:20px solid blue;
border-style: solid;
}

刷新浏览器,我们发现它产生的是这样的一个效果



之前在学习的时候我一直实验的是border为1个像素,但是没想到给边框加粗后能产生这样的效果,它能够产生这样一种像话框的效果,随着边框的加粗,中间的内容越小,而这个画框的边框就越大。这个时候很容易就产生一种想法,随着边框的加粗,最终上下或者左右边框完全占据元素的所有空间,而另一侧为空,那么就可以产生一个类似于箭头的效果,根据这个想法,我们再修改一下上面的CSS代码

.div1{
width:0px;
height:0px;
border-top:50px solid black;
border-bottom:50px solid green;
border-left:15px solid red;
border-style: solid;
}

这个时候它的效果如下:



这样我们把上下两个边框的眼色设置为父元素的背景色,左边框设置为需要的颜色,就可以做一个小的箭头了。而要调整它的宽度、角度等等只需要调整上下边框的宽度即可。下面是箭头最终的CSS代码

/*方向向右的小箭头*/
.arrow{
float:left;
background-color:#fff;
width:0;
height:0;
border-top:5px solid transparent;
border-bottom: 5px solid transparent;
border-left: 6px solid #3399CC;
margin-top: 31px;
}

搜索框的实现

这个搜索框我简单的使用了一个带边框的文本输入框加一个按钮。它的HTML代码如下:

<input class = "search-box" type = "text" value = "请输入关键字"/>
<input class = "search-submit" type = "submit" value = "搜索"/>

对应的CSS代码如下:

.search-box{
width:258px;
height:34px;
border:solid 1px rgb(51, 153, 204);
margin-top:7px;
margin-left:22px;
margin-right:0px;
color:#999;
padding-left:9px;
} .search-submit{
width:52px;
height:36px;
background-color:rgb(51, 153, 204);
border-style:none;
margin-left:-4px;
color:#fff;
}

项目后记

这个页面虽然说完成了,但是也是有一些不足的地方:

  • 页面中几乎每一个元素写了它的属性,而且有的属性是几乎类似的,代码只是简单的完成了页面没有考虑到重用
  • 页面是静态的,简单的利用HTML+CSS来做展示,没有交互的东西,而原始的模板是有的,交互这个的部分我想学习了JavaScript 和 JQuery之后再来加

虽然我主要用C/C++ 与Python做过一些服务程序和其他的Web程序,但是对于前端的相关内容也仅仅是会用HTML,关于布局和CSS的东西几乎不懂,而这次我想抽点时间学习一下这方面的内容。

为什么会想要学习前端呢?之前不知道在哪看到这么一句话: "黑客一定是程序员,而程序员不一定是黑客", 作为一个初步迈入Web安全大门的我来说,想要深入Web安全就必须学会Web开发,而Web开发是绕不开前端的。虽然不要求有很高的前端水平,但是基本的布局、css、JavaScript、jQuery还是得会的,所以我想先抽点时间好好补一下这方面的内容。


从项目中学习HTML+CSS的更多相关文章

  1. create-react-app 搭建的项目中,使用 CSS Modules

    create-react-app 搭建的项目中,使用 CSS Modules: 修改config目录下 webpack.config.dev.js 和 webpack.config.prod.js 文 ...

  2. springboot项目中js、css静态文件路径访问

    springboot静态文件访问的问题,相信大家也有遇到这个问题,如下图项目结构. 项目结构如上所示,静态页面引入js.css如下所示. 大家肯定都是这样写的,但是运行的话就是出不来效果,图片也不显示 ...

  3. vue项目中引入animate.css和wow.js

    本文转自:https://blog.csdn.net/liyunkun888/article/details/85003152 https://www.zhuimengzhu.com/content/ ...

  4. 【从业余项目中学习2】C# 实现调用Matlab函数(Visual Studio:2008, Matlab:R2009a)

    最近正在给客户做的个人项目,要求实现C#与Matlab之间的调用,即C# winform界面收集用户输入的参数,将参数传递给Matlab的算法计算,Matlab函数返回的结果显示在winform界面上 ...

  5. 【从业余项目中学习1】C# 实现XML存储用户名密码(MD5加密)

    最近在写一个C#的项目,用户需求是实现Winform的多文档界面与Matlab算法程序之间的交互.做了一段时间发现,这既能利用业余时间,实战中也可学习一些技术,同时刚毕业也增加一份收入.所以后面会不断 ...

  6. [冲昏头脑]IDEA中的maven项目中学习log4j的日志操作

    第一,你要有log4j的对应的包,由于我用的maven,所以直接在pom.xml文件依赖下载则可,如你尚为有此包,请自行百度下载导入,或上http://www.mvnrepository.com/搜索 ...

  7. 项目中学习ReactiveCocoa的使用方法

    一.注册控制器 控制器上的一个属性 @property (weak, nonatomic) IBOutlet UIBarButtonItem *signInBtn; 在 viewDidLoad 方法中 ...

  8. 在项目中遇到关于 CSS Overflow Hidden在iPhone & Safari不起作用

    调试了半天 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <m ...

  9. 转:如何在Vue项目中使用vw实现移动端适配

    https://www.w3cplus.com/mobile/vw-layout-in-vue.html 有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flex ...

随机推荐

  1. centOS 自动锁屏 解决办法

    System-->preferences --> Screensaver中 找到 Lock screen when screensaver is active 把前面的钩去掉

  2. SharedFile System Master Slave(共享文件系统)做ActiveMQ集群

    WINDOWS环境下:http://www.apache.org/dyn/closer.cgi?path=/activemq/apache-activemq/5.9.0/apache-activemq ...

  3. Linux中MySQLl单实例源码编译安装

    MySQL5.5以后源码安装要用cmake 1.3 安装相关包(cmake) 1.3.1 cmake软件 cd /home/Public/tools/ tar xf cmake-2.8.8.tar.g ...

  4. JAVA并发编程学习笔记------结构化并发应用程序

    1. Executor基于生产者-消费者模式,提交任务的操作相当于生产者,执行任务的线程相当于消费者,如果要在程序中实现一个生产者-消费者的设计,最简单的方式通常就是使用Executor 2. Exe ...

  5. 怎么在eclipse中访问webservice

    在eclipse创建webservice的方法: 1.在Eclipse的菜单栏中,Window --> Preferences --> Web Service --> Axis2 P ...

  6. 五:MyBatis学习总结(五)——实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  7. Nginx安装、配置和使用

    Nginx 1. 什么是nginx 是一个使用c语言开发的高性能的http服务器及反向代理服务器. Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器. ...

  8. day 44 django 学习入门

    前情提要: 终于学到了Django  ...古川小姐姐好流b .....7天学完.....脑壳疼..为了出了这个小火箭.. 详细参考官网. https://www.django.cn/ 中文网站 一: ...

  9. 【bzoj2422】 Times 前缀和

    本来想练一下树状数组的,看到网上某人的blog后点了进来. 第一眼发现不会,出去上了个厕所发现离散化后不是一道简单前缀和题吗. 考虑到每一个人出现且仅出现一次,且出现的时间是在一个连续的区间内. 那么 ...

  10. JSON 字符串转换为JavaScript 对象.JSON.parse()和JSON.stringify()

    使用 JavaScript 内置函数 JSON.parse() 将字符串转换为 JavaScript 对象: var text = '{ "sites" : [' + '{ &qu ...