给我的cnblogs主页做一个响应式布局模板
在cnblogs,一直都是使用官方自带的那些模板,而且感觉也一直很良好!不过最近用手机搜索一些相关的技术资料,很多都来自cnblogs,有些博主的页面在和机端显得很好,有些则展示得不那么友好了……忽然想起了cnblogs可以完全自定义CSS,早上起来就开始整了。由于我一直都喜欢干净整洁且清晰的页面,能不用图就不用。这次干脆偷了个懒,一张图都没用上……
先把最终效果截出来:
情况一:屏幕宽度大于960px时,左侧自动伸缩,右侧固定320px
情况二:屏幕大于在768px,小于960px时,右侧缩小100px(即220px)
情况三:屏幕大于640px,小于768px时,整个页面变为一栏,但左文章列表中的日期与文章仍然呈左右显示。
情况四:当屏幕小640时,当做手机端处理
------------------------- 我是一条分隔线 ------------------------
开始工作:
第一步:了解cnblogs首页的结构
只有把DOM结构弄清楚了,才能有针对性的实施方案,下面是cnblogs首页的基本结构
<body>
<div id="home">
<!--页头-->
<div id="header"></div> <!--主体-->
<div id="main">
<!--主栏-->
<div id="mainContent">
<div class="forFlow">
</div>
</div> <!--侧边栏-->
<div id="sideBar"></div>
</div> <!--页尾-->
<div id="footer"></div>
</div>
</body>
结构还是麻清晰的,下面简单说一下:整个页面由id="home"的div包含起来。然后里面分别包括:
1、页头:id="header"
2、主本:id="main"
3、页尾:id="footer"
这时注意:main包括了mainContent和sideBar两个部分,上面我将它称为主栏和侧边栏,而主栏又包含了一个forFlow。这种结构看似多了很多层,但其实这样的结构能适用于多种不同的布局的实现,具体不详细解说了。
把结构搞清楚了,就可以开始实现页面的整体框架了,接着看。
第二步:header的实现
这个部分很简单,不设置宽度即可,这样就能适用各种不同的屏幕了。连媒体查询部分的CSS都不用(当然这也是我的要求简单的原因),下面是CSS
#header {
margin-bottom:20px;
overflow:hidden;
background:#000;
position:relative;
}
由于本篇只讲如何实现这个大框架,具体header内部的细节就不解说了。
第三步:实现footer
这个部分与header的实现没多大区别,请直接看CSS
#footer {
padding:30px 0;
text-align:center;
font-size:16px;
border-top:solid 1px #ddd;
margin-top:20px;
margin-bottom:10px;
}
第四步:main的实现(重点)
1、先实现左右布局
左右布局一般都是用float:left和float:right来实现。但是这种不符合我的需求,因为我的右侧是固定大小的,但左侧是自动伸缩的。关键问题是:如何让左侧自动伸缩呢?默认情况下,div是自动继承父层的宽度的。试想:如果一个div Father的子div Son的有一个margin-right:320px属性会怎样呢?(没错,不管怎样,大div的右侧总会空出320px的宽度来)。好了,到这里右侧的320px已经空出来了。根据cnblogs首页结构,我们可以定义出这样一个CSS来:
#mainContent {
width: 100%;
font-size: 14px;
}
#mainContent .forFlow {
margin-right: 350px;
}
这里#mainContent相当于div Father, #mainContent .forFlow相当于 div Son。接下的问题是:main的空间都被#mainContent给占完了,即使.forFlow把右侧空出320px来,也轮不到sideBar来占位,事实也是如此!那么解决的办法是:
让#mainContent浮动起来,让sideBar也浮动起来(并且给一个margin-left:-320px,这样会使sideBar会抢位到上面去与mainContent并排,这就是神奇的地方),最终代码如下:
#main { margin-left:10px; margin-right:10px; }
#mainContent {
width: 100%;
float: left;
font-size: 14px;
}
#mainContent .forFlow {
margin-right: 350px; //这里留出350px是为了和右边保持距离
}
#sideBar {
float: left;
width: 320px;
margin-left: -320px;
font-size: 14px;
}
2、实现屏幕在960px以下的布局:只改变右侧sideBar的宽度,同时.forFlow的右侧亦要留出足够的空间来,以免内容重合。
@media (max-width: 960px) { #mainContent .forFlow {
margin-right: 250px;
}
#sideBar {
width: 220px;
margin-left: -220px;
}
}
3、实现屏幕在768px以下的布局:768px下已经只分一栏了,所以不需要再浮动(注意float:none),同时它们的宽度都充满了父容器。
@media (max-width: 768px) {
#mainContent {
width: 100%;
float: none!important; //这是加important是为了覆盖cnblogs系统的768px像素的媒体查询
}
#mainContent .forFlow {
margin-right:;
}
#sideBar {
float: none;
width: 100%;
margin-left:;
}
}
至此,基本上的布局就已经实现了,至于其它一些细节上的实现,请根据喜好自拟!其实本文的重点是:两栏情况下,一栏固定宽度,另一栏自动伸缩是如何实现的?
为了各位一方便查看效果,可以扫描下面的二维码访问我的博客首页:
扫描二维码访问我的cnblogs博客主页
给我的cnblogs主页做一个响应式布局模板的更多相关文章
- 使用bootstrap做一个响应式的页面
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SharePoint 2013 的HTML5特性之响应式布局
今天偶然看到一本书<Pro SharePoint 2013 Branding and Responsive Web Development>,看到SharePoint 2013基于HTML ...
- SharePoint 2013的HTML5特性之响应式布局
今天偶然看到一本书<Pro SharePoint 2013 Branding and Responsive Web Development>,看到SharePoint 2013基于HTML ...
- css 响应式布局
移动端最让人闹心的就是在不同的手机要做错响应式布局适应各种手机,开始自己做这方面走了很多的弯路,响应式布局如果是部件,就按实际的大小单位px等设置,像宽可以按照百分比计算,长的可以百分比.auto 或 ...
- Bootstrap4响应式布局之栅格系统
前面说了Bootstrap4的下载和简单使用,现在我们接着往下学习,Bootstrap4的响应式布局主要依靠栅格系统来实现的.面老K先来讲解一下Bootstrap4的栅格系统,让你能够更快的了解Boo ...
- Power Apps 创建响应式布局
前言 我们都知道Power Apps作为低代码平台,最大的优势就是各个设备之间的兼容性,尤其是自带的响应式布局,非常好用. 这不,我们就为大家分享一下,如何使用Power Apps画布应用,创建响应式 ...
- 超 Nice 的表格响应式布局小技巧
今天,遇到了一个很有意思的问题,一名群友问我,仅仅使用 CSS,能否实现这样一种响应式的布局效果: 简单解析一下效果: 在屏幕视口较为宽时,表现为一个整体 Table 的样式 而当屏幕视口宽度较小时, ...
- 响应式布局中的CSS相对量
一个响应式布局,要能够根据设备屏幕尺寸的改变,动态的调整页面内容,展现不同的设计风格. 在进行响应式的 CSS 代码编写过程中,经常会用到一些相对尺寸,以达到相对定位的目的.例如,常见的响应式布局中需 ...
- IT兄弟连 HTML5教程 响应式布局实例
在学习Media Queries模块前,先通过一个响应式布局实例来了解一下响应式布局和Media Queries模块的简单应用.在本例中,使用HTML5的结构元素定义了5个盒子.当浏览器窗口尺寸不同时 ...
随机推荐
- 每天一个Linux命令(14)--head命令
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然的就是查看档案的结尾啦. 1.命令格式: h ...
- Struts2学习第一天——struts2基本流程与配置
struts2框架 什么是框架,框架有什么用? 框架 是 实现部分功能的代码 (半成品),使用框架简化企业级软件开发 ,提高开发效率. 学习框架 ,清楚的知道框架能做什么? 还有哪些工作需要自己编码实 ...
- 循环神经网络(RNN)模型与前向反向传播算法
在前面我们讲到了DNN,以及DNN的特例CNN的模型和前向反向传播算法,这些算法都是前向反馈的,模型的输出和模型本身没有关联关系.今天我们就讨论另一类输出和模型间有反馈的神经网络:循环神经网络(Rec ...
- 用JavaScript实现图片剪切效果
学会如何获取鼠标的坐标位置以及监听鼠标的按下.拖动.松开等动作事件,从而实现拖动鼠标来改变图片大小. 还可以学习css中的clip属性. 一.CSS实现图片不透明及裁剪效果. 图片剪切三层结构 1.第 ...
- apicloud上传图片
//定义api $("#photo").change(function(){ //获取图片 api.getPicture({ sourceType: 'library', enco ...
- C#:判断100--999之前的水仙花数
//判断100--999之前的水仙花数.水仙花数举例:153=13+53+33. using System;public class Program { public static void ...
- Select的逻辑处理顺序(Transact-SQL)
1. Select 语句基本写法 2. Select的逻辑处理顺序 SQL与其他编程语言不同的明显特征就是代码的处理顺序.在其他编程语言中,常见是按编写代码的先后顺序(从上之下)来处理.但在SQL中, ...
- 百度地图JavascriptApi Marker平滑移动及车头指向行径方向
相信只要是使用百度地图做实时定位服务的朋友都会遇到这个问题,在对坐标位置进行覆盖物展示的时候,会出现由于获取坐标数据时间或者两个坐标点相距过远,导致在视觉上看Marker移动就像"僵尸跳&q ...
- ehcache memcache redis 区别
之前用过redis 和 memcache ,没有ehcache 的开发经验,最近也查阅不少文档和博客,写一些总结,也有不少内容总结与诸多博客中的博主总结: Ehcache EhCache 是一个纯J ...
- 从 Spring 2.5 开始就可以使用注解来配置依赖注入,而不是采用 XML 来描述一个 bean。
1.在 XML 注入之前进行注解注入,因此后者可以被前者重写. 2.在默认情况下注解在 Spring 容器中不打开,需要配置启动. <beans xmlns="http://www.s ...