响应式开发

article/2025/9/29 2:05:48

一、网页布局方式响应式开发

1、固定宽度布局:为网页设置一个固定的宽度,通常以px做为长度单位,常见于PC端网页。
2、流式布局:为网页设置一个相对的宽度,通常以百分比做为长度单位。
3、栅格化布局:将网页宽度人为的划分成均等的长度,然后排版布局时则以这些均等的长度做为度量单位,通常利用百分比做为长度单位来划分成均等的长度。
4、响应式布局:通过检测设备信息,决定网页布局方式,即用户如果采用不同的设备访问同一个网页,有可能会看到不一样的内容,一般情况下是检测设备屏幕的宽度来实现。
注:以上几种布局方式并不是独立存在的,实际开发过程中往往是相互结合使用的。

二:响应式布局
Responsive design,意在实现不同屏幕分辨率的终端上浏览网页的不同展示方式。通过响应式设计能使网站在手机和平板电脑上有更好的浏览阅读体验。

如上图所示,屏幕尺寸不一样展示给用户的网页内容也不一样,我们利用媒体查询可以检测到屏幕的尺寸(主要检测宽度),并设置不同的CSS样式,就可以实现响应式的布局。
我们利用响应式布局可以满足不同尺寸的终端设备非常完美的展现网页内容,使得用户体验得到了很大的提升,但是为了实现这一目的我们不得不利用媒体查询写很多冗余的代码,使整体网页的体积变大,应用在移动设备上就会带来严重的性能问题。
响应式布局常用于企业的官网、博客、新闻资讯类型网站,这些网站以浏览内容为主,没有复杂的交互。

一般我们会对常见的设备尺寸进行划分后,再分别确定为不同的尺寸的设备设计专门的布局方式,如下图所示

以上是我们对常见的尺寸进行分类后的结果,下图是与之对应的媒体查询条件。

三:响应式开发

  1. 什么是响应式开发
    a) 在移动互联日益成熟的时候,桌面浏览器上开发的网页已经不能满足移动端的设备的展示和阅读
    b) 之前,通常的做法是对移动端单独开发一套特定的版本
    c) 但是,如果移动终端设备起来越多的时候赋发成本太大,是因为需要做所有屏幕的适配
    d) 响应式开发的目的就是:一个网站能够兼容多种终端
    e) 在新建的网站上一般都会使用响应式开发
    f) 移动web开发和响应式开发是必须具备的技能
    g) 演示响应者页面

  2. 响应式开发和移动web开发的区别

  3. 响应式开发的原理:媒体查询:
    a) 查询媒介,查询到当前屏幕(媒介媒体)的宽度,针对不同的屏幕宽度设置不同的样式来适应不同屏幕。当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面。简单说,你可以设置 不同屏幕下面的不同的样式,达到适配不同的屏幕的目的。
    b) 实现方式:通过查询screen的宽度来指定某个宽度区间的网页布局。
    超小屏幕 (移动设备) w<768px
    小屏设备 768px-992px 768 <= w <992
    中等屏幕 992px-1200px 992 =< w <1200
    宽屏设备 1200px以上 w>=1200

  4. 媒体查询的基本实现方式:常用属性设置: http://www.runoob.com/cssref/css3-pr-mediaquery.html
    a) CSS 语法
    @media mediatype and|not|only (media feature) {
    CSS-Code;
    }
    你也可以针对不同的媒体使用不同 stylesheets :

b) 媒体类型 值 描述 all 用于所有设备 print 用于打印机和打印预览 screen 用于电脑屏幕,平板电脑,智能手机等。 speech 应用于屏幕阅读器等发声设备 c) 媒体功能 值 描述 device-height 定义输出设备的屏幕可见高度。 device-width 定义输出设备的屏幕可见宽度。 max-device-height 定义输出设备的屏幕可见的最大高度。 max-device-width 定义输出设备的屏幕最大可见宽度。 min-device-width 定义输出设备的屏幕最小可见宽度。 min-device-height 定义输出设备的屏幕的最小可见高度。 max-height 定义输出设备中的页面最大可见区域高度。 max-width 定义输出设备中的页面最大可见区域宽度。 min-height 定义输出设备中的页面最小可见区域高度。 min-width 定义输出设备中的页面最小可见区域宽度。 d) 简单案例说明:控制不同屏幕尺寸下的屏幕背景色

四:CSS框架
随着Web应用变的越来越复杂,在大量的开发过程中我们发现有许多功能模块非常相似,比如轮播图、分页、选项卡、导航栏等,开发中往往会把这些具有通用性的功能模块进行一系列封装,使之成为一个个组件应用到项目中,可以极大的节约开发成本,将这些通用的组件缩合到一起就形成了前端框架。

  1. Bootstrap
    简洁、直观、强悍的前端开发框架,让web开发更迅速、简单。
    来自 Twitter,粉丝众多,是目前最受欢迎的前端框架。
    开始使用吧!
  2. Amaze UI
    Amaze ~ 妹子UI,国人开发,后起之秀!
    开始使用吧!
  3. Framework7
    Framework7 是一个开源免费的框架可以用来开发混合移动应用(原生和HTML混合)或者开发 iOS & Android 风格的WEB APP。
    开始使用吧!

五:Bootstrap框架

  1. Bootstrap框架:提高web开发效率
    e) Bootstrap简介:当前最流行的前端UI框架(有预制界面组件), Bootstrap 是最受欢迎的 HTML、CSS 和 JS 框架,用于开发响应式布局、移动设备优先的 WEB 项目
    i. Bootstrap,来自 Twitter,是目前很受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷
    ii. Bootstrap是基于HTML5和CSS3开发的,它在jQuery的基础上进行了更为个性化和人性化的完善,形成一套自己独有的网站风格,并兼容大部分jQuery插件
    f) 为什么 使用Bootstrap:
    i. 有自己的生态圈,不断的更新迭代
    ii. 提供一套简洁,直观,强悍的组件
    iii. 标准化的html+css编码规范
    iv. 让开发更简单,提高了开发效率
    v. 可以进行自定义扩展
    g) BootStrap的版本了解
    i. 2.x.x:兼容性好 / 代码不够简洁,功能不够完善
    ii. 3.x.x:稳定性好,放弃了IE6-IE7,对IE8的支持一般 /偏向于响应式布局开发,移动设备优先的web项目开发
    iii. 4.x.x:测试阶段,偏向于响应式,移动设备
    h) BootStrap基本模板
Bootstrap 101 Template i) Bootstarp全局css样式 i. HTML5 文档类型 ... ii. 移动设备优先 iii. Normalize.css:为了增强跨浏览器表现的一致性,使用了 Normalize.css j) BootStrap版心容器—布局容器. i. 分类: 1. .container 类用于固定宽度并支持响应式布局的容器。 2. .container-fluid 类用于 100% 宽度,占据全部视口(viewport)的容器。 ii. 针对.container,当屏幕宽度>992px的时候,布局容器宽度为1170px iii. 否则,当宽度>768px的时候,布局容器宽度为970px iv. 当宽度<768px的时候,布局容器宽度为100%(750px) k) BootStrap栅格系统 i. 概念:Bootstrap 提供了一套响应式、移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列。栅格系统用于通过一系列的行(row)与列(column)的组合来创建页面布局,你的内容就可以放入这些创建好的布局中 ii. “行(row)”必须包含在 .container (固定宽度)或 .container-fluid (100% 宽度)中,以便为其赋予合适的排列(aligment)和内补(padding)。 iii. 你的内容应当放置于“列(column)”内,并且,只有“列(column)”可以作为行(row)”的直接子元素。 iv. 类似 .row 和 .col-xs-4 这种预定义的类,可以用来快速创建栅格布局。Bootstrap 源码中定义的 mixin 也可以用来创建语义化的布局。 v. 通过为“列(column)”设置 padding 属性,从而创建列与列之间的间隔(gutter)。通过为 .row 元素设置负值 margin 从而抵消掉为 .container 元素设置的 padding,也就间接为“行(row)”所包含的“列(column)”抵消掉了padding。 vi. 栅格系统中的列是通过指定1到12的值来表示其跨越的范围。例如,三个等宽的列可以使用三个 .col-xs-4 来创建。 vii. 如果一“行(row)”中包含了的“列(column)”大于 12,多余的“列(column)”所在的元素将被作为一个整体另起一行排列。 viii. 栅格参数:

l) 实例:从堆叠到水平排列: 使用单一的一组 .col-md-* 栅格类,就可以创建一个基本的栅格系统,在手机和平板设备上一开始是堆叠在一起的(超小屏幕到小屏幕这一范围),在桌面(中等)屏幕设备上变为水平排列。所有“列(column)必须放在 ” .row 内。
i. 效果:

ii. 代码:

.col-md-1
.col-md-1
.col-md-1
.col-md-1
.col-md-1
.col-md-1
.col-md-1
.col-md-1
.col-md-1
.col-md-1
.col-md-1
.col-md-1
------------------------------------------------
.col-md-8
.col-md-4
------------------------------------------------
.col-md-4
.col-md-4
.col-md-4
------------------------------------------------
.col-md-6
.col-md-6
简单说:栅格系统就是规范了你的column占据的宽度,只不过这个宽度是bootstrap事先规范好了。 m) 栅格系统的意义:移动设备和桌面屏幕:它可以规范在不同尺寸的屏幕下,当前的列占据的宽度。或者说一行可以放置几个列。 i. 效果:

ii. 代码:

.col-xs-12 .col-md-8
.col-xs-6 .col-md-4
.col-xs-6 .col-md-4
.col-xs-6 .col-md-4
.col-xs-6 .col-md-4
.col-xs-6
.col-xs-6
细节: 1. 栅格系统是往上兼容的:意味着小屏幕上的效果在大屏幕上也是可以正常显示的人,但是大屏幕上的设置在小屏幕上却无法正常显示。 2. Row可以再次嵌套在列中。如果不能填满整列,则默认从左排列,如果超出,则换行展示 n) 栅格系统扩展说明: i. 嵌套列 1. 效果
  1. 代码:

ii. 列偏移

  1. 说明:使用 .col-md-offset-* 类可以将列向右侧偏移。这些类实际是通过使用 * 选择器为当前元素增加了左侧的边距(margin)。例如,.col-md-offset-4 类将 .col-md-4 元素向右侧偏移了4个列(column)的宽度。

  2. 注意:如果偏移前面的列,那么会将当前列后面所有的列都往后偏移

  3. 效果:

  4. 代码:

1
2
3

iii. 排序

  1. 后推:push

  2. 前拉:pull

  3. 效果:

  4. 代码:

1
2

o) BootStrap文档查看:可以利用bootstrap提供好的一些组件或者js效果来帮助我们快速的完成页面的开发,提高开发的效果。

五:LESS
LESS 是动态的样式表语言,通过简洁明了的语法定义,使编写 CSS 的工作变得非常简单,本质上,LESS 包含一套自定义的语法及一个解析器。
安装
1、安装Nodejs环境 Node Package Manager (验证 node -v npm -v) npm:node packge manager
2、打开控制台(cmd),执行npm install -g less (验证 lessc -v) node packet manager
3、命令行编译 lessc path/xxx.less path/xxx.css
编译
浏览器只能识别CSS,LESS只是用来提升CSS可维护性的一个工具,所最终需要将LESS编译成CSS,然而通过命令行编译效率比较低下,一般都会借助于编辑器来完成编译,以sublime_text为例,sublime_text默认并不支持LESS的编译操作,需要安装插件实现。
1、执行npm install -g less-plugin-clean-css(使用sublime_text才用)
2、ctrl+shit+p打开命令面板
3、输入install package然后回车
4、安装 LESS、lessc、Less2Css三个插件
5、alt+s快捷键即可实现编译
语法
1、变量
格式:@变量名: 值,定义完成后可以重复使用

见代码示例6-1.less
2、混合
我们可以像使用函数一样来使用CSS

见代码示例6-2.less
3、嵌套
嵌套可以非常方便的管理我们的CSS层级关系

见代码示例6-3.html
浏览器中使用
了解了LESS基本语法后,可以用LESS写编写CSS代码了,但是需要实时的将LESS编译成CSS浏览器才能识别,利用编辑器能够编译,但是效率相对较低。
我们可以引入一个less.js文件,实现实时的解析,而不必每次修改都要编译,最后完成所有开发任务后,再通过编辑器编译成css文件。
1、下载然后引入less.js
2、引入xx.less文件,如:

注意:rel属性必须指定成stylesheet/less,并且styles.less要先于less.js引入。 必须以服务器方式访问,webstrom自带服务器功能也可以使用ghostlab调试工具的服务器。

六:案例:微金所页面的完成

  1. 效果图

  2. 整体页面结构块

<!—合作伙伴-->
3. 顶部通栏的制作: a) 效果: b) 分析: i. 这是一个通栏的结构,需要添加内容版心 ii. 它需要实现响应式功能,在不同屏幕下显示的内容和样式不一样,所以使用响应式布局进行完成 iii. 通栏块的宽度分布

c) 结构:

d) 结构块代码:

e) 样式:
i. 全局公共样式
/公共css样式/
body{
font-family: “Microsoft YaHei”,sans-serif;
font-size: 14px;
color: #333;
}
a{
text-decoration: none;
color: #333;
}
a:hover{
text-decoration: none;
color: #333;
}
.m_l10{
margin-left: 10px;
}
.m_r10{
margin-right: 10px;
}
/定义字体图标/
@font-face {
font-family: ‘wjs’;
src: url(’…/fonts/MiFie-Web-Font.eot’); /* IE9*/
src: url(’…/fonts/MiFie-Web-Font.eot’) format(‘embedded-opentype’), /* IE6-IE8 /
url(’…/fonts/MiFie-Web-Font.woff’) format(‘woff’), /
chrome、firefox /
url(’…/fonts/MiFie-Web-Font.ttf’) format(‘truetype’), /
chrome、firefox、opera、Safari, Android, iOS 4.2+/
url(’…/fonts/MiFie-Web-Font.svg’) format(‘svg’); /
iOS 4.1- */
}
/自定义字体图标/
.wjs_font_icon{
font-family: wjs;
}
/手机图标对应的编码/
.wjs_font_icon_phone::before{
content: “\e908”;
}
/电话图标对应的编码/
.wjs_font_icon_tel::before{
content: “\e909”;
font-size: 14px;
}

ii. 顶部通栏样式
.wjs_header{
height: 50px;
line-height: 50px;
border-bottom: 1px solid #ccc;
.row{
height: 100%;
text-align: center;
> div:nth-of-type(-n+3){
border-right: 1px solid #ccc;
> .wjs_code{
position: relative;
display: block;
> img{
display: none;
border: 1px solid #ccc;
border-top: none;
position: absolute;
left: 50%;
top:49px;
transform:translateX(-50%);
z-index: 999;
}
&:hover{
>img{
display: block;
}
}
}
}
> div:last-of-type{
> .btn-danger{
background-color: @color;
}
> .btn{
padding:3px 15px;
}
> .btn-link{
color: #333;
}
}
}
}
f) 细节说明:
i. 字体图标的使用:自定义字体图标
ii. 公共样式的建立
iii. Bootstrap提供的默认样式的使用(按钮和图标)
iv. 在sm和xs屏幕下顶部通栏不需要显示
4. 导航栏的制作
a) 使用bootstrap预制的导航条:

b) 删除没有用的部分,如下拉列表和表单等元素
c) 添加相应数量的导航,修改文本内容
d) 对其进行定义样式修改设置
i. 修改版心容器的宽度:


ii. 修改导航的高度和行高
iii. 修改a标签的高度和行高
iv. 去掉a标签的默认背景色
v. 添加a标签激活状态和hover状态下的底部边框
vi. 字义字体图标
vii. 设置网页logo及文字,设置垂直居中对齐
viii. 设置超小屏幕下右侧“个人中心”的垂直居中对齐
ix. 设置不同屏幕下的响应式操作
e) 效果:

  1. 轮播图的制作
    a) 使用bootstrap的预制组件—carousel
    b) Carousel预制组件的说明

.pc_imgBox{
height: 410px;
width: 100%;
display: block;
background-repeat: no-repeat;
background-position: center;
background-size: cover;
}

iv. 静态式的轮播图完成之后的问题

  1. 在移动端也会加载非移动端的图片资源
  2. 在非移动端也会加载移动端的图片资源
  3. 数据固定,不方便动态扩展
    v. 更好的实现方式:
  4. 通过后台数据请求,动态的加载资源:前台发送数据请求,后台处理,返回json数据,前台进行解析并显示
  5. 实现过程
    a) 使用json文件来模拟后台数据-index.json
    [
    {
    “pc”:"…/images/slide_01_2000x410.jpg",
    “mb”:"…/images/slide_01_640x340.jpg"
    },
    {
    “pc”:"…/images/slide_02_2000x410.jpg",
    “mb”:"…/images/slide_02_640x340.jpg"
    },
    {
    “pc”:"…/images/slide_03_2000x410.jpg",
    “mb”:"…/images/slide_03_640x340.jpg"
    },
    {
    “pc”:"…/images/slide_04_2000x410.jpg",
    “mb”:"…/images/slide_04_640x340.jpg"
    }
    ]

b) 创建模板
i. 点模板

ii. 图片模板

c) 创建js文件,添加ajax请求
d) Underscore.js的介绍:Underscore.js是一个很精干的库,压缩后只有4KB。它提供了几十种函数式编程的方法,弥补了标准库的不足,大大方便了JavaScript的编程。MVC框架Backbone.js就将这个库作为自己的工具库。除了可以在浏览器环境使用,Underscore.js还可以用于Node.js。
e) 整体js代码:
$(function(){
banner();
});
/ajax数据请求处理/
function banner(){
/*
1.拿到数据 ajax
2.判断设备类型 >=768 --非移动设备 <768=移动设备
3.根据设备解析对应的数据 (读取json 1.字符串拼接 2.模板引擎–underscorejs.template)
4.渲染到html页面
5.当屏幕的尺寸发生变化的时候,动态的加载数据 on resize
* */
//1.通过ajax获取数据
var getData=function(callback){
KaTeX parse error: Expected 'EOF', got '}' at position 241: … }); }̲; //2.整个渲染过…(window).width();
//2.标记是否是移动端
var isMoblie=false;
//3.判断是否是移动端
if(width < 768 ){ //是移动端
isMoblie=true;
}
//4.获取数据
getData(function(data){
//1.数据已经读取
//2.读取模板,转换为模板对象
var templateIndicator= _.template($("#bannerIndicator").html());
//3.传入数据,生成展示的html代码
var htmlIndicator=templateIndicator({model:data});
//4.展示
( " . c a r o u s e l − i n d i c a t o r s " ) . h t m l ( h t m l I n d i c a t o r ) ; / / 操 作 图 片 模 板 v a r t e m p l a t e I m g B o x = . t e m p l a t e ( (".carousel-indicators").html(htmlIndicator); //操作图片模板 var templateImgBox= _.template( (".carouselindicators").html(htmlIndicator);//vartemplateImgBox=.template(("#bannerImgBox").html());
var htmlImgBox=templateImgBox({model:data,isMoblie:isMoblie});
$(".carousel-inner").html(htmlImgBox);
});
}
//当屏幕大小发生改变的时候,监听,并实时渲染
$(window).on(“resize”,function(){
render();
}).trigger(“resize”);
}
e) 使用bootstarp实现移动端的图片滑动:
//使用bootstarp实现轮播图手势滑动操作
var startX=0;
var moveX=0;
var distanceX=0;
var isMove=false;
//1,获取需要进行滑动的图片盒子
$(".carousel-inner").on(“touchstart”,function(e){
startX= e.originalEvent.touches[0].clientX;
});
$(".carousel-inner").on(“touchmove”,function(e){
isMove=true;
moveX= e.originalEvent.touches[0].clientX;
distanceX=moveX-startX;
});
$(".carousel-inner").on(“touchend”,function(e){
/指定最小滑动的距离/
if(Math.abs(distanceX) > 50 && isMove){
if(distanceX >0){
/上一张/
$(".carousel").carousel(‘prev’);
}
else {
/下一张/
$(".carousel").carousel(‘next’);
}
}
//重置参数
isMove=false;
});
f) 补充说明
i. 当一张很大的图片显示在较小容器上的时候,如果设置了宽度,那么高度在默认情况下会等比例缩放
ii. 轮播图通过键盘的左右键也能进行操作
iii. 如果图片不需要说明,可以将说明块的div结构删除
iv. 使用underscore模板的大致步骤

  1. 准备数据
  2. 读取模板,生成模板对象
  3. 将数据传递给模板对象,生成html代码,进行展示
  4. 信息块的制作
    a) 效果:

b) 结构说明:栅格系统的使用

c) Div代码:注意字体图标的使用

b) Div结构:

c) 样式: .wjs_reverse{ height: 60px; line-height: 60px; border-top: 1px solid #ccc; .wjs_icon{ font-size: 18px; } .wjs_now{ color: @color; border-bottom: 1px dashed @color; } a:hover{ color: @color; } } 8. 产品信息块标签页的制作:bootstrap标签页的使用 a) 效果

b) 使用bootstrap提供的标签页,进行自定义的扩展修改
i. 添加版心
ii. 设置背景色,底部边框,内间距
iii. 拷贝样式到当前页面做自定义修改(如:去除标签页的边框,背景等)
iv. 添加li标签的下边框,设置背景色在不同状态下一致(#e92322)
c) 标签栏的补充操作:隐藏及滑动
i. 在拖动屏幕缩小的时候,标签栏会自动换行,影响美观
ii. 我们可以将父容器设置为overflow:hidden.

iii. 实现标签栏的左右滑动效果

  1. 使用js计算出ul的实际宽度(所有li宽度的和)
  2. 添加滑动效果
    //动态的计算wjs_product_nav的宽度
    function initProduct(){
    var nav=$(".wjs_product_nav");
    //获取里面所有li标签
    var lis=nav.find(“li”);
    var width=0;
    KaTeX parse error: Expected '}', got 'EOF' at end of input: … */ width+=(this).innerWidth();
    console.log($(this));
    });
    //将宽度设置给nav
    nav.width(width);
    //使用小插件实现滑动效果
    itcast.iScroll({
    swipeDom:document.querySelector(".wjs_product_nav_parent"),
    swipeType:“x”,
    swipeDistance:50
    });
    }
  3. 产品信息块详细产品信息的制作
    a) 栅格系统的使用(lg:3列 md/sm:2列 xs:1列)
    b) 单一信息块的结构

c) 单一信息块样式
.wjs_product{
.tabParent{
overflow: hidden;
border-bottom: 1px solid #ddd;
}
background-color: #eee;
clear: both;
border-top:1px solid #ccc;
padding: 20px;
.nav-tabs{
border-bottom: none;
> li{
margin-bottom: 0px;
padding:0px 15px;
border-bottom: none;
>a{
background-color: #eee;
line-height: 45px;
border-radius: 0;
border-bottom: none;
}
>a:hover{
background-color: #eee;
border-bottom: 2px solid @color;
box-sizing: border-box;
border-radius: 0;
}
&.active{
>a,a:hover,a:focus{
border: none;
background-color: #eee;
border-bottom: 3px solid @color;
border-radius: 0;
}
}
}
}

/产品详细信息块/
.wjs_pBox{
height: 150px;
background-color: #fff;
box-shadow: 1px 1px 1px #ddd;
margin-top: 20px;
> .wjs_Pleft{
height: 100%;
overflow: hidden;
padding-top:10px;
font-size: 12px;
color: #666;
>p{
width: 100%;
text-align: center;
font-size: 14px;
}
> .row{
margin-left:-10px;
margin-right:-10px;
> div:nth-of-type(even){
text-align: right;
}
}
}
> .wjs_Pright{
width: 100px;
height: 100%;
float: right;
border-left:1px dashed #ccc;
position: relative;
text-align: center;
padding-top:30px;
> .wjs_tip{
position: absolute;
left: 50%;
top:20px;
width: 100%;
transform:translateX(-50%);
>span{
font-size: 13px;
cursor: pointer;
}
>span:nth-of-type(1){
color: @color;
border: 1px solid @color;
}
>span:nth-of-type(2){
color: @blueColor;
border: 1px solid @blueColor;
}
}
> b{
font-size: 40px;
color: @color;
}
>sub{
color: @color;
bottom: 0;
}
> p{
font-size: 12px;
}
&::before,&::after{
content: “”;
width: 10px;
height: 10px;
border-radius: 50%;
background-color: #eee;
position: absolute;
left:-5px;
}
&::before{
top:-5px;
box-shadow: 0px -1px 1px #ddd inset;
}
&::after{
bottom:-5px;
box-shadow: 0px 1px 1px #ddd inset;
}
}
/第一块样式:注意将这块样式添加到最后,防止被 其它样式覆盖/
&.active{
background-color: @color;
/在相同权重的情况下进行样式的覆盖/
>.wjs_Pright{
> b,sub,p{
color: #fff;
}
}
>.wjs_Pleft{
color: #fff;
position: relative;
/不回左上角图标/
&::before{
content: “\e915”;
/一定要指定字体/
font-family: wjs;
font-size: 25px;
position: absolute;
left: 0;
top: -6px;
}
}
}
}
}
d) 工具提示:
i. Div代码:

ii. 一定要自己进行工具提示的初始化: //初始化工具 $('[data-toggle="tooltip"]').tooltip(); e) 进度条的添加 i. 使用bootstrap提供的组件-进度条 ii. 放置到合适的位置 iii. 修改样式: /*进度条*/ .wjs_product_box > .box_left .progress{ height: 10px; line-height:10px; } .wjs_product_box > .box_left .progress > .progress-bar{ line-height:10px; } f) 注意事项: i. 渲染顺序的问题:先放置浮动块 ii. 栅格系统可以嵌套 iii. 通过右侧块的伪类来实现两个半圆效果 10. 新闻的制作 a) Bootstrap页签的使用 b) 新闻标题的制作 i. 整体结构块:

ii. 全部新闻块

全部新闻

iii. 标签块
iv. 新闻内容块

v. 样式
.wjs_news{
padding: 20px;
.wjs_nTitle{
line-height: 50px;
font-size: 25px;
border-bottom: 1px solid #ccc;
text-align: center;
position: relative;
&::before{
content: “”;
width: 8px;
height: 8px;
border-radius: 4px;
border: 1px solid #ccc;
position: absolute;
right: -8px;
bottom: -4px;
}
}
.wjs_news_line{
position: absolute;
width: 1px;
height: 100%;
border-left:1px dashed @color;
left: 45px;
top: 0;
}
.nav-tabs{
border-bottom: none;
position: relative;
>li{
margin-bottom:60px;
> a{
background-color: #eee;
width: 60px;
height: 60px;
border-radius: 50%;
}
> a:hover{
background-color: @color;
}
&.active{
>a,a:hover,a:focus{
background-color: @color;
border: none;
}
}
.wjs_icon{
color: #fff;
font-size: 30px;
}
}
> li:last-of-type{
margin-bottom: 0px;
}
@media screen and (min-width: 768px) and (max-width: 992px){
>li{
margin:20px 30px;
}
}
@media screen and (max-width: 768px){
>li{
margin:20px 0px;
width: 25%;
}
}
}
.wjs_newslist{
list-style: none;
> li{
line-height: 60px;
}
}
}
11. 合作伙伴块的制作
a) 效果:

b) 结构:

c) 样式:
.wjs_partner{
padding:20px;
background-color: #eee;
text-align: center;
h3{
width: 100%;
text-align: center;
line-height: 50px;
}
ul{
list-style: none;
display: inline-block;
> li{
float: left;
margin-left:20px;
}
}
.wjs_icon{
font-size: 80px;
}
}


http://chatgpt.dhexx.cn/article/mpmsXYOm.shtml

相关文章

css进阶

1 选择器的进阶 1.1 后代选择器 根据HTML的嵌套关系&#xff0c;选择父元素后代中满足条件的元素 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"…

linux 升级php 5.3,Linux PHP5.3升级PHP5.5.33 (CentOS)

由于要使用了laravel5.1&#xff0c;php要升级到5.5以上。具体环境是Aliyun Cent OS 7.0。由于阿里的yum源lastest只有5.4&#xff0c;laravel5.1必须php5.5&#xff0c;加了几个网上的yum源&#xff0c;各种各样的问题&#xff0c;所以只能麻烦的编译安装了。 首先网上这类的文…

BAT三巨头之云产品角逐

前言 BAT是中国互联网公司百度公司(Baidu)、阿里巴巴集团(Alibaba)、腾讯公司(Tencent)三大巨头首字母缩写。早期BAT三巨头都有各自的产品定位和势力范围而且是各自领域的老大&#xff0c;百度提供LBS基于位置&#xff08;map&#xff09;和探索(探索引擎)的服务&#xff0c;阿…

北大软微学院计算机金融方向考研,北大软微金服方向2016年考研经验贴---初试410分...

2016-3-29 08:50:55 上传 2016考研经验贴 ---北京大学软件与微电子学院金融信息服务方向 请大家重点看贾晓鸣学长的经验帖和刘洋学长的导学视频&#xff0c;我定位这篇经验贴是我的一些心得补充&#xff01;我先介绍自己的情况&#xff0c;我今年的初试总分是410&#xff0c;专…

BootStrap---day02、03微金所项目

BootStrap---day02、03微金所项目 前两天没有更新&#xff0c;主要是因为做项目做得没有心情来写博客了&#xff08;真的很菜&#xff09;&#xff0c;今天的任务都做完了&#xff0c;就来写一写这几天使用BootStrap写项目的总结和心得。 一、实现功能 1、模态框 2、响应式…

个人练习小览---《微金所仿站》

这个2016年12月份的联系,主要使用了bootstrap来进行练习,熟悉bootstrap怎么操作。 这个网站未完成全部,主要就是熟悉bootstrap的模块操作。 index.html <!DOCTYPE html> <html lang="zh-cn"> <head><meta charset="utf-8">&…

案例——微金所页面

1.效果图 2.整体页面结构块 <!--顶部通栏--> <header class"wjs_header"></header> <!--导航--> <nav class"wjs_nav"></nav> <!--banner轮播图--> <div class"wjs_banner"></div> <…

干货|软件测试简历的编写以及注意事项

小编热衷于收集整理资源&#xff0c;记录踩坑到爬坑的过程。希望能把自己所学&#xff0c;实际工作中使用的技术、学习方法、心得及踩过的一些坑&#xff0c;记录下来。也希望想做软件测试的你一样&#xff0c;通过我的分享可以少走一些弯路&#xff0c;可以形成一套自己的方法…

软件测试简历,这一点你是否漏掉

几乎所有的测试简历都在长篇大论谈如何做测试&#xff0c;参加过多少项目的测试&#xff0c;测试过程是怎么样的&#xff0c;测试如何管理&#xff0c;会黑盒、白盒、灰盒、彩盒.....、会写方案、测试用例。从这些内容中我无法看出你会什么&#xff0c;技术上哪些是你的强项&am…

前端开发_开发软件Hbuilder简介

一、Hbuilder简介 (1):软件简介 HBuilder是DCloud&#xff08;数字天堂&#xff09;推出的一款支持HTML5的Web开发IDE。 HBuilder的编写用到了Java、C、Web和Ruby。HBuilder本身主体是由Java编写&#xff0c; 它基于Eclipse&#xff0c;所以顺其自然地兼…

程序员,你的简历应该这样弄

原文地址&#xff1a;http://www.devstore.cn/essay/essayInfo/5557.html 这个可以帮助一些比较纠结的人改善下简历。 特别说明&#xff1a; - 本文写于2015年11月&#xff0c;当时我在找工作&#xff0c;据此优化简历&#xff0c;每投必中。当时我还写了求职相关的其它文章&a…

Docker部署程序员简历

特色&#xff1a; 1.轻量&#xff0c;无需数据库。 2.支持密码验证访问&#xff0c;避免完全公开简历。 3.直接使用 Markdown 编写简历&#xff0c;实时解析页面。 4.简历所有图标、文字、排版均在 Markdown 中设置&#xff0c;无需修改代码。 5.支持 Docker 一键部署&#xff…

软件测试和软件开发之间的关系及模型

目录 前言 瀑布模型 V模型 W模型&#xff1a; H模型 结语 前言 软件测试和软件开发一样&#xff0c;都遵循软件工程原理&#xff0c;遵循管理学原理&#xff0c;测试专家通过实践总结出了很好很多的测试模型&#xff0c;这些模型将测试活动进行了抽象&#xff0c;明确了…

软件测试VS软件开发哪个好?怎么选择

在IT行业&#xff0c;我经常会看到很多人纠结是做软件开发还是软件测试&#xff0c;其实这个问题是没有很标准的答案的。所谓&#xff1a;三百六十行&#xff0c;行行出状元&#xff01;没有最好的工作&#xff0c;只有适合自己的工作&#xff0c;选择适合自己的岗位才是最重要…

如何介绍简历中的项目呢?请看软件测试老师的分享

项目经验与工作经验是相辅相成的&#xff0c;但较之于工作经验&#xff0c;项目经验更侧重于表现求职者在某个专业领域内的技能水平&#xff08;技能水平决定了工资水平&#xff09;。因而&#xff0c;技术类岗招聘的时候&#xff0c;更注重项目经验。项目介绍是有套路的&#…

软件测试简历模板【功能测试,自动化测试,测试开发】简历模板

前言&#xff1a; 软件测试是软件开发过程中至关重要的一环&#xff0c;它可以保证软件质量、提高用户体验、增强产品竞争力。因此&#xff0c;在软件测试领域从事职业发展的人员需要具备扎实的基础知识、丰富的实践经验和优秀的沟通能力。而在求职过程中&#xff0c;一份清晰…

第1讲 几种密码技术的简要介绍——《图解密码技术》

最近上密码学的课&#xff0c;听不懂老师上课讲的内容&#xff0c;也不理解密码学到现在学的是个什么东西&#xff0c;所以就自己找资料开始啃&#xff0c;我会将我自己学到的加上自己的理解做个记录&#xff0c;以便于复习。本人才疏学浅&#xff0c;如果有理解不对的地方&…

程序员睡前发「73 76 79 86 85」,女孩熬夜破解发现竟是表白密码!

在大家心目中程序员形象可能会是很呆、较木讷、不擅言词、不懂如何讨女生欢心。其实不然&#xff0c;程序员也有浪漫一面呢&#xff0c;现在有位程序员和妹子聊天时&#xff0c;选择用代码表达爱意&#xff0c;一句费解的「73 76 79 86 85」&#xff0c;让人看见不同的趣味与浪…

密码密钥硬编码检查

摘要&#xff1a;本文重点讲述通过静态检查工具有效的防止密码密钥的泄露。 本文分享自华为云社区《密码密钥硬编码检查》&#xff0c;作者&#xff1a; Uncle_Tom。 Verizon《2022数据泄露调查报告&#xff08;DBIR&#xff09;》指出&#xff0c;61%的数据泄露涉及凭证数据&…

(D)TLS1.3大揭秘之密码技术

信息安全CIA 当今信息技术高速发展&#xff0c;信息安全越来越重要。信息安全是指保护完整可靠的数据仅能被授权访问&#xff0c;其包含三要素CIA&#xff1a;机密性&#xff08;Confidentiality&#xff09;、完整性&#xff08;Integrity&#xff09;、可用性&#xff08;Av…