代码改变世界

后端顺带学点前端:CSS实现简单的响应式博客布局

2021-01-19 09:23  独孤残云  阅读(243)  评论(0编辑  收藏  举报

搭建一款产品原型时,萌生了学一点前端的想法,记录所学,备忘之用。

这里推荐一个很好的入门前端的站点:菜鸟教程

里面的内容很基础,适合入门之用,同时也支持在线编辑器,可以直接所见所得

 

先从一篇支持响应式的博客布局开始,代码来自菜鸟教程

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
<style>
* {
  box-sizing: border-box;
}
 
body {
  font-family: 微软雅黑;
  padding: 10px;
  background: #f1f1f1;
}
 
/* 头部标题 */
.header {
  padding: 30px;
  text-align: center;
  background: white;
}
 
.header h1 {
  font-size: 50px;
}
 
/* 导航条 */
.topnav {
  overflow: hidden;
  background-color: #333;
}
 
/* 导航条链接 */
.topnav a {
  float: left;
  display: block;
  color: #f2f2f2;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
}
 
/* 链接颜色修改 */
.topnav a:hover {
  background-color: #ddd;
  color: black;
}
 
/* 创建两列 */
/* Left column */
.leftcolumn {   
  float: left;
  width: 75%;
}
 
/* 右侧栏 */
.rightcolumn {
  float: left;
  width: 25%;
  background-color: #f1f1f1;
  padding-left: 20px;
}
 
/* 图像部分 */
.fakeimg {
  background-color: #aaa;
  width: 100%;
  padding: 20px;
}
 
/* 文章卡片效果 */
.card {
  background-color: white;
  padding: 20px;
  margin-top: 20px;
}
 
/* 列后面清除浮动 */
.row:after {
  content: "";
  display: table;
  clear: both;
}
 
/* 底部 */
.footer {
  padding: 20px;
  text-align: center;
  background: #ddd;
  margin-top: 20px;
}
 
/* 响应式布局 - 屏幕尺寸小于 800px 时,两列布局改为上下布局 */
@media screen and (max-width: 800px) {
  .leftcolumn, .rightcolumn {   
    width: 100%;
    padding: 0;
  }
}
 
/* 响应式布局 -屏幕尺寸小于 400px 时,导航等布局改为上下布局 */
@media screen and (max-width: 400px) {
  .topnav a {
    float: none;
    width: 100%;
  }
}
</style>
</head>
<body>

<div class="header">
  <h1>我的网页</h1>
  <p>重置浏览器大小查看效果。</p>
</div>

<div class="topnav">
  <a href="#">链接</a>
  <a href="#">链接</a>
  <a href="#">链接</a>
  <a href="#" style="float:right">链接</a>
</div>

<div class="row">
  <div class="leftcolumn">
    <div class="card">
      <h2>文章标题</h2>
      <h5>2019 年 4 月 17日</h5>
      <div class="fakeimg" style="height:200px;">图片</div>
      <p>一些文本...</p>
      <p>菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!</p>
    </div>
    <div class="card">
      <h2>文章标题</h2>
      <h5>2019 年 4 月 17日</h5>
      <div class="fakeimg" style="height:200px;">图片</div>
      <p>一些文本...</p>
      <p>菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!</p>
    </div>
  </div>
  <div class="rightcolumn">
    <div class="card">
      <h2>关于我</h2>
      <div class="fakeimg" style="height:100px;">图片</div>
      <p>关于我的一些信息..</p>
    </div>
    <div class="card">
      <h3>热门文章</h3>
      <div class="fakeimg"><p>图片</p></div>
      <div class="fakeimg"><p>图片</p></div>
      <div class="fakeimg"><p>图片</p></div>
    </div>
    <div class="card">
      <h3>关注我</h3>
      <p>一些文本...</p>
    </div>
  </div>
</div>

<div class="footer">
  <h2>底部区域</h2>
</div>

</body>
</html>

效果如下所示:

 

我的网页

重置浏览器大小查看效果。

文章标题

2019 年 4 月 17日
图片

一些文本...

菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!

文章标题

2019 年 4 月 17日
图片

一些文本...

菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!

关于我

图片

关于我的一些信息..

热门文章

图片

图片

图片

关注我

一些文本...

 

 

代码量有限,但是已经初具规模,页面会根据设备的屏幕宽度,自动调整为两列或是一列显示。

 

总结归纳一部分心得,因为笔者是CSS初学,内容难免过于浅显:

 

其实笔者之前一直都觉得html布局很神奇,不管css怎么写,各个元素总是能找到自己合适的位置,并且组合在一起有机的呈现出来(虽然很多时候不是我想要的样子 笑)。但是既然叫超文本标记语言,就说明html和我们平时写纯文字一样,存在某种关联。

就好比我们写文字是一行一行写,写完之后另起一行,整体看是从上而下的纵向布局——html其实同理。

从最上边的头部区域、菜单区域、内容区域再到底部区域,大致如下:

而后我们再来调整各个区域内部的细节。

 

float —— 浮动布局,实现纵向布局区域内的横向布局(一个曾经困扰了我很久的话题,😊)

用起来其实也很简单,float:left 就是各个元素靠左对齐,float:right 就是各个元素靠右对齐。

比如菜单部分的用法,最后一个使用局部样式控制为右对齐;

再比如中间内容使用float分离为左右两部分内容。

 

padding和margin —— 边距控制

网上可以查到相当多的关于两者区分的文章,并且配上了形象的配图来说明问题。其实在笔者看来,这两个很好区分:

举个例子,外边是A,里边是B,A使用padding来限制B和自己的距离,B使用margin来控制自己相对于A的位置,二者作用对象不同。

margin更适合子元素控制自己的相对位置。

 

footer —— 底部区域

用的应该算是比较多了,也相对简单,这里贴一篇footer永久固定在页面底部的方法:来源

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <meta charset="utf-8" />
    <style>
        body {
            padding-bottom: 50px;
        }
 
        .footer {
            position: fixed;
            left: 0px;
            bottom: 0px;
            width: 100%;
            height: 50px;
            background-color: #eee;
            z-index: 9999;
        }
    </style>
</head>
<body>
    内容,可以大量复制看效果<br />
 
    <div class="footer">固定在底部</div>
</body>
</html>

 

@media screen and (max-width: 800px){

  /*某些元素的属性重新赋值*/

} 

用于响应式布局,屏幕尺寸低于800时执行一个怎样的变更

 

:hover —— 鼠标悬停操作,用于实现高亮等效果