目标:
pc端常见浏览器:
360浏览器、谷歌浏览器、火狐浏览器、QQ浏览器、百度浏览器、搜狗浏览器、IE浏览器。
移动端常见浏览器:
UC浏览器、QQ浏览器、欧朋浏览器、百度手机浏览器、360安全浏览器、谷歌浏览器、搜狗浏览器、猎豹浏览器以及其他杂牌浏览器。
国内的uc和QQ,百度等手机浏览器都是根据webkit修改过来的内核,国内尚无自主研发的内核,就像国内的手机操作系统都是基于Android修改开发的一样。
总结:兼容移动端主流浏览器,处理webkit内核浏览器即可。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SjGASXW8-1577092574364)(image/ym/1.png)]
注:以上数据均参考自https://material.io/devices/
注意:作为前端开发,不建议大家去纠结dp,dpi,pt,ppi等单位。
视口(viewport)就是浏览器显示页面内容的屏幕区域。视口可以分为布局视口、视觉视口和理想视口。
字面意思,它是用户正在看到的网站的区域。注意:是网站的区域。
我们可以通过缩放去操作视觉视口,但不会影响布局视口,布局视口仍保持原来的宽度。
<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0">
属性 | 解释说明 |
---|---|
width | 宽度设置的是viewport宽度,可以设置device-width特殊值 |
initial-scale | 初始缩放比,大于0的数字 |
maximum-scale | 最大缩放比,大于0的数字 |
minimum-scale | 最小缩放比,大于0的数字 |
user-scalable | 用户是否可以缩放,yes或no(1或0) |
3-1 物理像素&物理像素比
对于一张50px * 50px的图片,在手机retina屏中打开,按照刚才的物理像素比会放大倍数,这样就会造成图片模糊。
在标准的viewport设置中,使用倍图来提高质量,解决在高清设备中的模糊问题
通常通用二倍图,因为iphone6/7/8的影响,但是现在还是存在3倍图4倍图的情况,这个看实际开发公司需求
背景图片注意缩放问题
img{
/*原始图片100 * 100px*/
width:50px;
height:50px;
}
.box{
/*原始图片100 * 100px*/
background-size:50px 50px;
}
background-size属性规定背景图像的尺寸
background-size:背景图片宽度 背景图片高度
单独制作移动端页面(主流):京东商城手机版、淘宝触屏版、苏宁易购手机版
响应式页面兼容移动端(其次):三星手机官网
通常情况下,网址域名前加m(mobile)可以打开移动端,如果是移动设备打开,则跳到移动端页面。如:m.taobao.com、m.jd.com、m.suning.com
4-3响应式兼容pc移动端
三星电子官网:www.samsung.com/cn/,通过判断屏幕宽度来改变样式,以适应不同终端。
缺点:制作麻烦,需要花很大精力去调兼容性问题。
4-4 总结
现在市场常见的移动端开发有单独制作移动端页面和响应式页面两种方案,现在市场主流选择还是单独制作移动端页面
移动端浏览器基本以webkit内核为主,因此我们就考虑webkit兼容性问题。
我们可以放心使用h5标签和css3样式。
同时我们浏览器的私有前缀我们只需要添加webkit即可。
移动端css初始化推荐使用normalize.css/
官网地址:http://necolas.github.io/noramlize.css/
传统模式宽度计算: 盒子的宽度=css中设置的width+border+padding
css3盒子模型:盒子的宽度=css设置的宽度width里面包含了border和padding,也就是说,我们的css3中的盒子模型,padding和border不会撑大盒子。
/*css3盒子模型*/
box-sizing:border-box
/*传统盒子模型*/
box-sizing:content-box
注意:
5-4 特殊样式
/*css3盒子模型*/
box-sizing:border-box;
-webkit-box-sizing:border-box;
/*点击高亮我们需要清除 a*/
-webkit-tap-highlight-color:transparent;
/*在移动端浏览器默认的外观在ios上加上这个属性才能个按钮和输入框自定义样式 input*/
-webkit-appearance:none;
/*禁用长按页面时的弹出菜单*/
img,a{-webkit-touch-callout:none}
移动端技术选型
移动端布局和以前我们学习的pc端有所区别:
1.单独制作移动端页面(主流)
2.响应式页面兼容移动端(其次)
6-1 流失布局(百分比布局)
1 技术选型
方案:我们采取单独制作移动页面方案
技术:布局采取流式布局
2 搭建相关文件夹结构
css、img、upload、index.index
3.设置视口标签以及引入初始化样式
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/index.css">
4.常用初始化样式
body{
width:100%;
max-width:640px;
min-width: 320px;
margin:0 auto;
background: #fff;
font-size: 14px;
font-family: -apple-system,Helvetica,sans-serif;
line-height: 1.5;
color: #666;
}
5.二倍精灵图的做法
在firework里面把精灵图等比例缩放为原来的一半
之后根据大小测量坐标
注意代码里面background-size也要写:精灵图原来宽度的一半
background-size:50% auto;
6.图片格式
DPG图片压缩技术:
京东自主研发推出dpg图片压缩技术,经测试该技术,可直接节省用户近50%的浏览流量,极大的提升了用户的网页打开速度。能够兼容jpeg,实现全平台、全部浏览器的兼容支持,经过内部和外部上万张图片的人眼浏览测试后发现,压缩后的图片和webp的清晰度对比没有差距。
webp图片格式:
谷歌开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有jpeg的2/3,并能节省大量的服务器宽带资源和数据空间。
<html>
<head>
<meta charset="UTF-8">
<title>title>
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/index.css">
<script src="js/jquery.min.js">script>
<script src="js/index.js">script>
head>
<body>
<header class="app">
<ul>
<li>
x
li>
<li>
<img src="img/logo.png" style="width:30px;height:30px;margin-top:8px">
li>
<li>打开京东App,购物更方便li>
<li>立即打开li>
ul>
header>
<div class="search-wrap">
<div class="search-btn">
<span>span>
div>
<div class="serch">
<div class="jd-icon">div>
<div class="sou">div>
div>
<div class="search-login">登录div>
div>
<div class="main-container">
<div class="slider">
<img src="upload/banner.png">
div>
<nav>
<a href="#">
<img src="upload/nav-1.webp">
<span>京东超市span>
a>
<a href="#">
<img src="upload/nav-2.webp">
<span>京东超市span>
a>
<a href="#">
<img src="upload/nav-3.webp">
<span>京东超市span>
a>
<a href="#">
<img src="upload/nav-4.webp">
<span>京东超市span>
a>
<a href="#">
<img src="upload/nav-5.webp">
<span>京东超市span>
a>
<a href="#">
<img src="upload/nav-6.webp">
<span>京东超市span>
a>
<a href="#">
<img src="upload/nav-7.webp">
<span>京东超市span>
a>
<a href="#">
<img src="upload/nav-8.webp">
<span>京东超市span>
a>
<a href="#">
<img src="upload/nav-9.webp">
<span>京东超市span>
a>
<a href="#">
<img src="upload/nav-10.webp">
<span>京东超市span>
a>
nav>
<div class="brand">
<div>
<a href="#">
<img src="upload/pc1.png">
a>
div>
<div>
<a href="#">
<img src="upload/pc2.png">
a>
div>
<div>
<a href="#">
<img src="upload/pc3.png">
a>
div>
div>
div>
body>
html>
css如下:
body{
width:100%;
max-width:640px;
min-width: 320px;
margin:0 auto;
background: #fff;
font-size: 14px;
font-family: -apple-system,Helvetica,sans-serif;
line-height: 1.5;
color: #666;
height:2000px;
}
a{
color:#666;
text-decoration: none;
}
a:hover{
text-decoration: none;
}
.app{
height:45px;
background-color: #333;
}
ul {
padding:0;
margin:0;
list-style: none;
}
img{
vertical-align: top;
}
.app ul li{
float: left;
height:45px;
line-height: 45px;
color:#fff;
text-align: center;
}
.app ul li:nth-child(1){
width:8%;
color:#ccc;
}
.app ul li:nth-child(2){
width:10%;
}
.app ul li:nth-child(3){
width:57%;
}
.app ul li:nth-child(4){
width:25%;
background-color: #F63515;
}
/*搜索*/
.search-wrap{
width:100%;
height:40px;
position:absolute;
min-width:320px;
max-width:640px;
background-color: #F70000;
overflow: hidden;
}
.search-btn{
width:44px;
height:40px;
position: absolute;
top:0;
left:0;
}
.search-btn span{
display: block;
width:20px;
height:18px;
background:url(../img/btn-img.png) no-repeat;
background-size:20px 18px;
position: absolute;
top:12px;
left:10px;
}
.search-login{
width:44px;
height:40px;
position: absolute;
top:0;
right:0;
line-height: 40px;
text-align: center;
color:#fff;
}
.serch{
height:30px;
margin:0 50px;
margin-top:7px;
border-radius: 15px;
position: relative;
border:1px solid #ccc;
background-color: #fff;
}
.jd-icon{
width:20px;
height:15px;
background: url(../img/icon1.png) no-repeat;
position: absolute;
top:8px;
left:13px;
background-size:20px 15px;
}
.jd-icon::after{
content: "";
display: block;
width:1px;
height:15px;
background-color: #ccc;
position: absolute;
top:0;
right:-8px;
}
.sou{
width:18px;
height:15px;
background-color: pink;
position: absolute;
top:8px;
left:50px;
background:url(../img/sprite1.png) no-repeat -80px 0;
background-size:200px auto;
}
.slider img{
width:100%;
}
.brand div{
width:33.33%;
float: left;
}
.brand div img{
width:100%;
}
nav{
height:190px;
background: -webkit-linear-gradient(top,#F9DAD8 0%,#F6E8E7 30%,#fff 80%);
}
nav a{
float: left;
width:20%;
text-align: center;
/*background-color: #F9D7D5;*/
}
nav a img{
width:40px;
margin:12px 0;
}
nav a span{
display: block;
margin-bottom:10px;
}
.change{
position: fixed;
top:0;
}
/*.news{
width:100%;
background-color: pink;
}
.news a{
float: left;
}
.news a img{
width:100%;
height:200px;
}
.news a:nth-child(1){
width:50%;
}
.news a:nth-child(2){
width:25%;
}
.news a:nth-child(3){
width:25%;
}*/
还有一点js:
$(function(){
$(window).scroll(function(){
var mainTop=$(".main-container").offset().top;
console.log(mainTop+"---"+$(document).scrollTop())
if($(document).scrollTop()>=mainTop){
/*$(".search-wrap").css("position" , "fixed")
$(".search-wrap").css("top" , "0px")*/
$(".search-wrap").addClass("change")
}else{
/*$(".search-wrap").css("position" , "relative")*/
$(".search-wrap").removeClass("change")
}
})
})
目标:
传统布局:
flex弹性布局
建议:
1.如果是pc端页面布局,我们还是传统布局
2.如果是移动端或者不考虑兼容性问题的pc端页面布局,我们还是使用flex弹性布局
flex是flexible box的缩写,意为弹性布局,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为flex布局。
采用flex布局的元素,称为flex容器(flex container),简称"容器"。他的所有子元素自动成为容器成员,称为flex项目(flex item),简称"项目"。
总结flex布局原理:就是通过给父盒子添加flex属性,来控制子盒子的位置和排列方式
以下有6个属性是对付父元素设置的
主轴与侧轴
在flex布局中,是分为主轴和侧轴两个方向,同样的叫法有:行和列、x轴和y轴
属性值
flex-direction属性决定主轴的方向(即项目的排列方向)
注意:主轴和侧轴是会变化的,就看flex-direction设置谁为主轴,剩下的就是侧轴。而我们的子元素是跟着主轴来排列的。
属性 | 说明 |
---|---|
row | 默认值从左到右 |
row-reverse | 从右到左 |
column | 从上到下 |
column-reverse | 从下到上 |
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Documenttitle>
<style>
div{
width:80%;
height:200px;
background-color:pink;
/*给父亲添加flex属性*/
display: flex;
/*默认的主轴是x轴 ,行row*/
/*flex-direction: row;*/
/*把主轴设置为y轴*/
flex-direction: column;
}
div span{
width:150px;
height:100px;
background-color: purple;
margin-right:5px;
}
style>
head>
<body>
<div>
<span>1span>
<span>2span>
<span>3span>
div>
body>
html>
jusify-content属性定义了项目在主轴上的对齐方式
注意:使用这个属性之前一定要确定好主轴是哪个
属性值 | 说明 |
---|---|
flex-start | 默认值从头部开始,如果主轴是x轴,则从左到右 |
flex-end | 从尾部开始排列 |
center | 在主轴居中对齐(如果主轴是x轴则水平居中) |
space-around | 平分剩余空间 |
space-between | 先两边贴边,再平分剩余空间(重要) |
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Documenttitle>
<style>
div{
/*width:800px;
height:300px;
background-color:pink;
display: flex;
flex-direction: row;*/
/*justify-content: ;根据主轴方向设置子元素的排列方式*/
/*justify-content: flex-start;*//*默认靠左排列*/
/*justify-content: flex-end;*//*靠右排列*/
/*子元素靠中间排列*/
/*justify-content: center;*/
/*平分剩余空间*/
/*justify-content: space-around;*/
/*两边贴边,中间平分剩余空间*/
/*justify-content: space-between;*/
}
div{
width:800px;
height:300px;
background-color:pink;
display: flex;
flex-direction: column;
/*justify-content: ;根据主轴方向设置子元素的排列方式*/
justify-content: flex-start;/*默认靠上排列*/
justify-content: flex-end;/*靠下排列*/
/*子元素靠中间排列*/
justify-content: center;
/*平分剩余空间*/
justify-content: space-around;
/*两边贴边,中间平分剩余空间*/
justify-content: space-between;
}
div span{
width:150px;
height:50px;
background-color: purple;
}
style>
head>
<body>
<div>
<span>1span>
<span>2span>
<span>3span>
<span>4span>
div>
body>
html>
默认情况下,项目都排在一条线(又称"轴线")上。flex-wrap属性定义,flex布局默认是不换行的。
属性值 | 说明 |
---|---|
nowrap | 默认值,不换行 |
wrap | 换行 |
flex布局中,默认的子元素是不换行的,如果装不开,会缩小子元素的宽度,放在父元素里面
该属性是控制子项在侧轴(默认是y轴)上的排列方式,在子项为单项的时候使用。
属性值 | 说明 |
---|---|
flex-start | 从上到下 |
flex-end | 从下到上 |
center | 挤在一起居中(垂直居中) |
stretch | 拉伸(默认值) |
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Documenttitle>
<style>
div{
width:800px;
height:300px;
background-color:pink;
display: flex;
/*默认的主轴是x轴*/
justify-content: center;
/*侧轴居中*/
align-items:center;
}
div span{
width:150px;
height:100px;
background-color: purple;
margin:10px;
}
style>
head>
<body>
<div>
<span>1span>
<span>2span>
<span>3span>
div>
body>
html>
设置子项在侧轴上的排列方式并且只能用于子项出现换行的情况(多行),在单行下是没有效果的。
属性值 | 说明 |
---|---|
flex-start | 默认值在侧轴的头部开始排列 |
flex-end | 在侧轴的尾部开始排列 |
center | 在侧轴中间显示 |
space-around | 子项在侧轴平分剩余空间 |
space-between | 子项在侧轴先分布在两头,再平分剩余空间 |
stretch | 设置子项元素高度平分父元素高度 |
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Documenttitle>
<style>
div{
width:600px;
height:400px;
background-color:pink;
display: flex;
flex-wrap: wrap;
justify-content: center;
align-content: flex-start;
/*因为换行了,控制子元素的对齐方式要用align-content*/
align-content: flex-end;
align-content: center;
align-content: space-around;
align-content: space-between;
/*没有高度的时候,拉伸高度的*/
align-content: stretch;
}
div span{
width:150px;
/*height:100px;*/
background-color: purple;
margin:10px;
}
style>
head>
<body>
<div>
<span>1span>
<span>2span>
<span>3span>
<span>1span>
<span>2span>
<span>3span>
div>
body>
html>
这个属性是flex-direction和flex-wrap属性的复合属性
flex-flow:row wrap
flex属性定义子项目分配剩余空间,用flex来表示占多少份数
.item{
flex:<number>;/*default 0*/
}
align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。
默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
span:nth-chidren(2){
/*设置自己在侧轴上的排列方式*/
align-self:flex-end;
}
数值越小,排列越靠前,默认为0.
注意:和z-index不一样
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Documenttitle>
<style>
p{
width:800px;
height:400px;
background-color: pink;
margin:0 auto;
display: flex;
}
p span{
width:150px;
height:150px;
background-color: purple;
margin:5px;
}
p span:nth-child(2){
/*默认为0,越小就越靠前*/
order: -1;
}
p span:nth-child(3){
align-self: flex-end;
}
style>
head>
<body>
<p>
<span>1span>
<span>2span>
<span>3span>
p>
body>
html>
案例:携程网移动端首页
访问地址:m.ctrip.com
技术选型:
方案:我们采取单独制作移动页面方案
技术:布局采取flex布局
常见的布局思路:
背景渐变:
语法1:
backgound:linear-greadient(起始方向,颜色1,颜色2,...)
backgound: -webkit-linear-gradient(left,red,blue);
backgound:-webkit-liner-gradient(left top,red,blue)
背景渐变必须添加浏览器私有前缀
起始方向可以是访问名词或者度数,如果省略默认就是top
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/index.css">
<title>携程在手,想走就走title>
head>
<body>
<div class="search-index">
<div class="search">搜索:目的地/酒店/景点/航班号div>
<a href="#" class="user">我 的a>
div>
<div class="focus">
<img src="img/f1.png">
div>
<div class="nav-item">
<ul class="local-nav">
<li>
<a href="#">
<span class="nav-icon">span>
<span class="nav-text">攻略.景点span>
a>
li>
<li>
<a href="#">
<span class="nav-icon two">span>
<span class="nav-text">门票.玩乐span>
a>
li>
<li>
<a href="#">
<span class="nav-icon three">span>
<span class="nav-text">美食林span>
a>
li>
<li>
<a href="#">
<span class="nav-icon four">span>
<span class="nav-text">周边游span>
a>
li>
<li>
<a href="#">
<span class="nav-icon five">span>
<span class="nav-text">一人游span>
a>
li>
ul>
<nav>
<div class="nav-common">
<div class="nav-items">
<a href="#" >海外酒店a>
div>
<div class="nav-items">
<a href="#">海外酒店a>
<a href="#">特价酒店a>
div>
<div class="nav-items">
<a href="#">海外酒店a>
<a href="#">特价酒店a>
div>
div>
<div class="nav-common">
<div class="nav-items">
<a href="#" >海外酒店a>
div>
<div class="nav-items">
<a href="#">海外酒店a>
<a href="#">特价酒店a>
div>
<div class="nav-items">
<a href="#">海外酒店a>
<a href="#">特价酒店a>
div>
div>
<div class="nav-common">
<div class="nav-items">
<a href="#">海外酒店a>
div>
<div class="nav-items">
<a href="#">海外酒店a>
<a href="#">特价酒店a>
div>
<div class="nav-items">
<a href="#">海外酒店a>
<a href="#">特价酒店a>
div>
div>
nav>
<ul class="subnav-entry">
<li>
<a href=#>
<span class="subnav-entry-icon icon1">span>
<span>自由行span>
a>
li>
<li>
<a href=#>
<span class="subnav-entry-icon icon2">span>
<span>wifi电话卡span>
a>
li>
<li>
<a href=#>
<span class="subnav-entry-icon icon3">span>
<span>保险.签证span>
a>
li>
<li>
<a href=#>
<span class="subnav-entry-icon icon4">span>
<span>换钞.购物span>
a>
li>
<li>
<a href=#>
<span class="subnav-entry-icon icon5">span>
<span>当地向导span>
a>
li>
<li>
<a href=#>
<span class="subnav-entry-icon icon6">span>
<span>特价机票span>
a>
li>
<li>
<a href=#>
<span class="subnav-entry-icon icon7">span>
<span>礼品卡span>
a>
li><li>
<a href=#>
<span class="subnav-entry-icon icon8">span>
<span>申卡.借钱span>
a>
li>
<li>
<a href=#>
<span class="subnav-entry-icon icon9">span>
<span>旅拍span>
a>
li>
<li>
<a href=#>
<span class="subnav-entry-icon icon10">span>
<span>更多span>
a>
li>
ul>
div>
<div class="sales-box">
<div class="sales-hd">
<h2>热门活动h2>
<a href="#" class="more">获得更多福利a>
div>
<div class="sale-bd" style="padding:15px; padding-top:0">
<div class="row">
<a href="#">
<img src="img/row1.png">
a>
<a href="#">
<img src="img/row2.png">
a>
div>
<div class="row">
<a href="#">
<img src="img/row3.png">
a>
<a href="#">
<img src="img/row4.png">
a>
div>
<div class="row">
<a href="#">
<img src="img/row5.png">
a>
<a href="#">
<img src="img/row6.png">
a>
div>
div>
div>
<div class="sales-box" id="tehui">
<div class="sales-hd" style="border-bottom: 0;">
<h2>特卖惠h2>
<a href="#" class="more">更多a>
div>
<div class="tehui-sale-bd">
<div class="sales-items">
<a href="#">
<div class="sales-img">
<img src="img/sales1.png">
div>
<p class="sales-text">
三亚5日自由行(5钻)避寒热销【高星度假型酒
店合辑·4晚...
p>
<div class="sales-price">¥ 2169起 div>
a>
div>
<div class="sales-items bg">
<div class="sales-list-one">
<a href="#">
<div class="sales-list-title">
<dl>
<dt>千款特价dt>
<dd>不要错过dd>
dl>
div>
<div class="sales-list-img">
<img src="img/pic-tmh-02.png">
div>
a>
div>
<div class="sales-list-two bj" style="padding:0;">
<div class="sales-list-row">
<a href=#>
<div class="sales-row-title">
<dl>
<dt>境外精选dt>
<dd>限时抢购dd>
dl>
div>
<div class="sales-row-img">
<img src="img/tu1.png">
div>
a>
div>
<div class="sales-list-row" style="border-right:0">
<a href=#>
<div class="sales-row-title">
<dl>
<dt style="color:#53CA72">周边玩乐dt>
<dd>欢乐度周末dd>
dl>
div>
<div class="sales-row-img">
<img src="img/tu2.png">
div>
a>
div>
div>
div>
div>
div>
<footer class="tool-box">
<div class="tool-cn">
<a class="tool-cn-list">
<span class="tool-icon">
<i class="glyphicon glyphicon-earphone" aria-hidden="true">i>
span>
<span>电话预定span>
a>
<a class="tool-cn-list">
<span class="tool-icon">
<i class="glyphicon glyphicon-arrow-down" aria-hidden="true">i>
span>
<span>客户端下载span>
a>
<a class="tool-cn-list">
<span class="tool-icon">
<i class="glyphicon glyphicon-user" aria-hidden="true">i>
span>
<span>我的span>
a>
div>
<p class="tool-ver">
<a href="#">网站地图a> |
<a href="#">
Language
<i class="glyphicon glyphicon-menu-down">i>
a> |
<a href="#">电脑版a>
p>
<p class="tool-copy">
©2019 携程旅行| 沪ICP备08023580号
p>
footer>
body>
html>
<style>
body{
max-width: 540px;
min-width: 320px;
font: 400 16px/1.5 PingFangSC-regular,Tahoma,"Lucida Grande",Verdana,"Microsoft Yahei",STXihei,hei;
overflow-x: hidden;
-webkit-tap-highlight-color: transparent;
margin: 0 auto;
background: #f2f2f2;
color:#000;
}
a{
text-decoration: none;
color:#222;
}
a:hover{
text-decoration: none;
}
div{
box-sizing: border-box;
}
ul{
padding:0;
margin:0;
list-style: none;
}
img{
vertical-align: top;
}
dl,dd,dt{
padding:0;
margin:0;
}
/*搜索模块*/
.search-index{
background-color: #fff;
width:100%;
height:44px;
position:fixed;
top:0;
left:50%;
transform: translateX(-50%);
max-width: 540px;
min-width: 320px;
display: flex;
border-top:1px solid #ccc;
border-bottom: 1px solid #ccc;
z-index: 999;
}
.search{
flex:1;
height: 26px;
margin:6px 10px ;
border:1px solid #ccc;
border-radius: 9px;
color:#666;
font-size:12px;
line-height: 24px;
padding-left:15px;
box-shadow:0 2px 4px rgba(0,0,0,0.2);
}
/*.search::after{
position: absolute;
content: "";
width:15px;
height:15px;
background: url(../img/search.png) no-repeat 17px 17px;
background-size:21px auto;
}*/
.user{
text-align: center;
width:44px;
height:44px;
font-size:12px;
color: deepskyblue;
}
.user::before{
content: "";
display: block;
width:23px;
height:23px;
background: url(../img/search.png) no-repeat 0px -78px;
background-size:21px auto;
margin:3px auto -3px;
}
.focus{
height: 150px;
margin-top:44px;
}
.focus img{
height:100%;
width:100%;
}
.nav-item{
height:300px;
/*background-color: pink;*/
margin:10px 0;
padding:0 7px;
position: relative;
}
.local-nav{
height:64px;
/*width:100%;*/
background-color: #fff;
border-radius: 8px;
display: flex;
position: relative;
top:-30px;
}
.local-nav li{
flex: 1;
}
.local-nav a{
display: flex;
flex-direction: column;
align-items: center;
font-size:12px;
}
.nav-icon{
width:32px;
height:32px;
background-color:pink;
margin-top:3px;
background: url(../img/sprite.png) no-repeat -7px 0px;
background-size:40px auto;
}
.local-nav .two{
background-position: -5px -38px;
}
.local-nav .three{
background-position: -6px -82px;
}
.local-nav .four{
background-position: -4px -120px;
}
.local-nav .five{
background-position: -4px -161px;
}
.nav-text{
margin-top:5px;
}
nav{
position: relative;
border-radius: 5px;
top:-20px;
overflow: hidden;
}
.nav-common{
height:88px;
background-color: pink;
flex: 1;
display: flex;
}
.nav-common:nth-child(2){
margin:4px 0;
}
.nav-items{
flex: 1;
display: flex;
flex-direction: column;
}
.nav-items a{
flex: 1;
text-align: center;
line-height:44px;
color:#fff;
font-size:14px;
text-shadow: 1px 1px rgba(0,0,0,0.2);
}
.nav-items a:first-child{
border-bottom: 1px solid #fff;
}
.nav-items:first-child a{
background: url(../img/items.png) no-repeat bottom center;
background-size: 70% auto;
border-bottom: 0;
}
.nav-items:nth-child(2){
border-left:1px solid #fff;
border-right:1px solid #fff;
}
.nav-common:nth-child(1){
background: -webkit-linear-gradient(left,#fa5956,#fb8650);
}
.nav-common:nth-child(2){
background: -webkit-linear-gradient(left,#4b8fed,#53bced);
}
.nav-common:nth-child(3){
/*background: linear-gradient(to right,#fa5956,#fb8650 54%);;*/
background: -webkit-linear-gradient(left,#34c2aa,#6cd557);
}
.subnav-entry{
top:-15px;
display: flex;
flex-wrap: wrap;
position: relative;
}
.subnav-entry li{
flex:20%;
display: flex;
flex-direction: column;
margin:5px 0;
}
.subnav-entry a{
display: flex;
flex-direction: column;
align-items: center;
font-size:14px;
color:#666;
}
.subnav-entry-icon{
width:28px;
height:28px;
background-color: purple;
background: url(../img/sicon.png) no-repeat;
background-size:28px auto;
margin-top:3px;
}
.icon2{
background-position: 0 -28px;
}
.icon3{
background-position: 0 -55px;
}
.icon4{
background-position: 0 -84px;
}
.icon5{
background-position: 0 -112px;
}
.icon6{
background-position: 0 -140px;
}
.icon7{
background-position: 0 -168px;
}
.icon8{
background-position: 0 -196px;
}
.icon9{
background-position: 0 -224px;
}
.icon10{
background-position: 0 -252px;
}
/*销售模块*/
.sales-box{
border-top:1px solid #bbb;
margin-top:145px;
background-color: #fff;
}
.sales-hd{
height:44px;
border-bottom: 1px solid #ccc;
position: relative;
}
.sales-hd h2{
text-indent: -999px;
overflow: hidden;
position: relative;
}
.sales-hd h2::after{
content: "";
width:75px;
height:15px;
position: absolute;
top:8px;
left:10px;
background: url(../img/home.png) no-repeat 0 -17px;
background-size:75px auto;
}
.more{
padding:3px 20px 3px 10px;
position:absolute;
top:0px;
right:5px;
color:#fff;
font-size:12px;
border-radius: 15px;
background: -webkit-linear-gradient(left,#ff4e63,#ff6cc9);
}
.more::after{
content: "";
position: absolute;
top:7px;
right:9px;
width:7px;
height:7px;
border-top:2px solid #fff;
border-right:2px solid #fff;
transform: rotate(45deg);
}
.sale-bd{
display: flex;
flex-direction: column;
}
.row{
flex:1;
display: flex;
}
.row a{
flex:1;
border-bottom: 1px solid #eee;
}
.row a:first-child{
border-right:1px solid #eee;
}
.row a img{
width:100%
}
#tehui{
margin-top:0px;
}
#tehui h2::after{
background: url(../img/home.png);
background-size:75px auto;
}
.tehui-sale-bd{
display: flex;
}
.sales-items{
flex: 1;
height:205px;
background-color: #F9F9F9;
}
.sales-items:first-child{
margin-right:5px;
}
.sales-img img{
width:100%;
height:117px;
}
p{
padding:0;
margin:0;
}
.sales-text{
padding-left: 5px;
width:100%;
font-size:13px;
color:#000;
height:36px;
overflow:hidden;
margin:10px 0 5px;
overflow: hidden;
}
.sales-price{
padding-left:5px;
color:#FF495E;
height:25px;
line-height: 25px;
}
.bg{
background-color: #fff;
}
.bg div{
width:100%;
background-color: #F9F9F9;
padding:8px;
}
.sales-list-one{
margin-bottom: 5px;
height:88px;
}
.sales-list-one a{
display: flex;
}
.sales-list-one a div{
flex:1;
}
.sales-list-img{
position: relative;
}
.sales-list-img img{
width:54px;
height:54px;
position: absolute;
right:0;
}
.sales-list-one dt{
color:#FF495E;
text-align: center;
}
.sales-list-one dd{
color:#444;
font-size:14px;
text-align: center;
}
.sales-list-title{
margin-top:10px;
}
.sales-list-two{
height:112px;
display: flex;
background-color: #fff;
}
.sales-list-two div{
background-color: #F9F9F9;
flex:1;
}
.bj .sales-list-row{
padding:0;
border-right:5px solid #fff;
}
.sales-list-row a{
display: flex;
flex-direction: column;
}
.sales-list-row a div{
flex:1;
}
.sales-row-img{
position: relative;
}
.sales-list-row a div:last-child img{
position: absolute;
left:50%;
transform: translateX(-50%);
top:-6px;
width:50px;
height:50px;
}
.sales-list-row .sales-row-title {
text-align: center;
padding-top:5px;
}
.sales-row-title dt{
color:#6ABCFD;
}
.sales-row-title dd{
color:#444;
font-size:14px;
}
/*底部开始*/
.tool-box{
margin-top:10px;
}
.tool-cn{
display: flex;
border-top:1px solid #bbb;
border-bottom: 1px solid #bbb;
background-color: #fff;
color:#333;
font-size:12px;
padding:5px 0;
}
.tool-cn-list{
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
}
.tool-cn-list span{
flex: 1;
text-align: center;
}
.tool-ver,.tool-copy{
color:#333;
font-size:12px;
text-align: center;
margin:10px 0 3px 0;
}
.tool-copy{
margin-top:0;
}
style>
目标:
思考问题:
rem单位
rem是一个相对单位,类似于em,em是父元素字体大小。
不同的是rem的基准是相对于html元素的字体大小。
比如:根元素(html)设置的font-size=12px;非根元素设置width:2rem,则换成px表示就是24px。
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>title>
<style>
html{
font-size:14px;
}
div{
font-size:12px;
}
p{
/*1.em是相对于父元素的字体大小来说的*/
/*width:10em;
height:10em;*/
/*2.rem相对于html元素字体大小来说的*/
width:10rem;
height:10rem;
background-color: pink;
/*3.rem的优点就是可以通过修改html里面的文字大小来改变页面中元素的大小可以整体控制*/
}
style>
head>
<body>
<div>
<p>p>
div>
body>
html>
媒体查询是css3新语法。
@media mediatype and|not|only (media feature) {
css-code;
}
1.mediatype查询类型
将不同的终端设备划分不同的类型,称为媒体类型
值 | 解释说明 |
---|---|
all | 用于所有设备 |
用于打印机和打印预览 | |
scree | 用于电脑屏幕,平板电脑,智能手机等 |
2.关键字
关键字将媒体类型或多个媒体特性连接到一起做为媒体查询的条件。
3.媒体特性
每种媒体类型都具有各自不同的特性,根据不同媒体类型的媒体特性设置不同的展示风格。我们暂时了解三个。注意他们要加小括号包括
值 | 解释说明 |
---|---|
width | 定义输出设备页面可见区域的宽度 |
min-width | 定义输出设备页面最小可见区域宽度 |
max-width | 定义输出设备页面最大可见区域宽度 |
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>title>
<style>
/*这句话的意思就是:在我们屏幕上并且最大的宽度是800像素,设置我们想要的样式
max-width 是 表示小于等于800
媒体查询可以根据不同的屏幕尺寸在改变不同的样式.*/
@media screen and (max-width:800px){
body{
background-color: pink;
}
}
@media screen and (max-width:600px) {
body{
background-color: purple;
}
}
style>
head>
<body>
body>
html>
案例:根据页面宽度改变背景变色
分析:
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>title>
<style>
/*1.媒体查询一般是按照从大到小或者从小到大的顺序来
2.小于540px,页面的背景颜色变为蓝色*/
@media screen and (max-width:539px){
body{
background-color: pink;
}
}
/*3.540-970 我们的页面颜色改为绿色*/
@media screen and (min-width:540px){
body{
background-color: green;
}
}
/*4.大于等于970px,我们页面的颜色改为红色*/
@media screen and (min-width:970px){
body{
background-color: blue;
}
}
/*5.screen还有and必须带上不能省略
6.我们的数字后面必须跟单位,px不能省略*/
style>
head>
<body>
body>
html>
rem单位是跟着html来走的,有了rem页面元素可以设置不同的大小尺寸
媒体查询可以根据不同的设备宽度来修改样式
媒体查询+rem就可以实现不同设备宽度,实现页面元素大小的动态变化
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>title>
<style>
@media screen and (min-width:320px){
html{
font-size:50px;
}
}
@media screen and (min-width:640px){
html{
font-size:100px;
}
}
.top{
height:1rem;
font-size:0.5rem;
color:#fff;
text-align: center;
line-height: 1rem;
background-color:pink;
}
style>
head>
<body>
<div class="top">购物车div>
body>
html>
当样式比较繁多的时候,我们可以针对不同的媒体使用不同stylesheets(样式表),原理:就是直接在link中判断设备的尺寸,然后引用不同的css文件
语法规范:
<link rel="stylesheet" media="mediatype and|not|only (media featrue)" href="mystylesheet.css">
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>title>
<link rel="stylesheet" href="style320.css" media="screen and (min-width:320px)">
<link rel="stylesheet" href="style640.css" media="screen and (min-width:640px)">
head>
<body>
<div>1div>
<div>2div>
body>
html>
css是一门非程序式语言,没有变量、函数、作用域等概念。
less是一门css扩展语言,也成为css预处理器。
作为css的一种形式的扩展,,他并没有减少css的功能,而是现有的css语法上,为csss加入程序式语言的特性。
它在css的语法基础之上,引入了变量,运算以及函数等功能,大大简化了css的编写,并且降低了css的维护成本,就像它的名称所说的那样,less可以让我们用更少的代码做更多的的事情。
less中文网址:http://lesscss.cn
常见的css预处理器:sass、less、stylus
一句话:less是一门css预处理器语言,它扩展了css的动态特性。
less使用:
我们首先新建一个后缀名为less的文件,在这个less文件里面里面书写less语句。
变量是指没有固定的值,可以改变的。因为我们css中的一些颜色和数值等经常使用
@变量:值;
变量命名规范:
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="my.css">
<title>title>
head>
<body>
<div>我是文字div>
<a href="#">我是小aa>
body>
html>
<less>
//定义一个粉色的变量
@color:pink;
//错误的变量名:@1color @color¥%
//变量名区分大小写 @color 和@Color 是两个不同的变量
//定义一个字体为14像素的变量
@font14:14px;
body{
background-color: @color;
}
div{
color: @color;
font-size:@font14;
}
a{
font-size:@font14;
}
less>
本质上,less包含一套自定义的语法以及一个解析器,用户根据这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成css文件。
所以,我们需要把我们的less文件,编译生成css文件,这样我们的html页面才能使用。
women经常用到的选择器的嵌套:
#header .logo{
width:300px;
}
less嵌套写法:
#header{
.logo{
width:300px;
}
}
如果遇见(交集|伪类选择器|伪元素选择器)
a:hover{
color:red;
}
less嵌套写法:
a{
&:hover{
color:red
}
}
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>title>
<link rel="stylesheet" href="nest.css">
head>
<body>
<div class="header">
<a href="#">我是文字a>
div>
<div class="nav">
<div class="logo">我是logodiv>
div>
body>
html>
<less>
.header{
width:200px;
height:200px;
background-color: pink;
//1.子元素在父元素里面写
a{
color:#fff;
//如果有伪类、伪元素、以及交集选择器都在前面加上&符号,如果不加就属于后代选择器
&:hover{
color:red;
}
}
}
.nav{
&::before{
content: "";
display: block;
width:50px;
height:50px;
background-color: deepskyblue;
}
.logo{
color:red;
}
}
less>
3-6 less运算
任何数字、颜色或者变量都可以参与运算。就是less提供了±*/算术运算。
/*less里面写*/
@width:10px + 5;
div{
border:@width solid red;
}
/*生成的css*/
div{
border:15px solid red;
}
/*less甚至还可以这样*/
width:(@width+5) * 2;
<less>
@baseFont:50px;
html{
font-size:@baseFont;
}
@border:5px + 10;
div{
width:200px - 50;
height:200px - 50;
border:@border solid red;
}
p{
width:80rem / @baseFont;
height:80rem / @baseFont;
background-color: pink;
}
//1.我们运算符的左右两侧一定要用空格隔开
//2.两个数参加运算,如果只有一个数有单位,则最后的结果就以这个单位为准
//3.两个数参加运算,如果两个数都有单位,那么就会以第一个数的单位为准
less>
rem适配方案
答案:
1.按照设计稿与设备宽度的比例,动态计算并设置html跟标签的font-size大小;
2.css中,设计稿元素的宽、高、相对位置等取值,按照同等比例换算为rem为单位的值。
技术方案1
技术方案2(推荐)
总结:
现在两种方案现在都存在。
方案2更简单,现阶段大家无需了解里面的js代码。
rem+媒体查询+less技术
1.设计稿常见尺寸宽度
设备 | 常见宽度 |
---|---|
ipone 4.5 | 640px |
iphone 678 | 750px |
android | 常见320px、360px、375px、384px、400px、414px、500px、720px 。大部分4.7-5寸的安卓设备为720px; |
一般情况下,我们以一套或两套效果图适应大部分的屏幕,放弃极端屏或对其优雅降级,牺牲一些效果,现在基本以750为准。
2.动态设置html标签font-size大小
3.元素大小取值方法
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>title>
<style>
@media screen and (min-width:320px){
html{
font-size: 21.33px;
}
}
@media screen and (min-width:750px){
html{
font-size:50px;
}
}
div{
width:2rem;
height:2rem;
background-color: pink;
}
/*1.首先我们选一套标准尺寸 750为准
2.我们用屏幕尺寸除以我们划分的份数,得到了html里面文字大小,但是我们知道不同屏幕下得到的文字大小是不一样的
3.页面元素的rem值=页面元素在750像素下的px值 /html 下的font-size值*/
style>
head>
<body>
<div>div>
body>
html>
案例:苏宁网移动端首页
访问地址:m.suning.com
1.技术选型:
方案:采取单独制作移动页面方案
技术:布局采取rem适配布局(less+rem+媒体查询)
设计图:本设计采用750px设计尺寸
2.搭建相关文件夹结构
3.设置视口标签以及引入初始化样式
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<link rel="stylesheet" href="css/normalize.css">
4.设置公共common.less文件
5.新建index.less文件
新建index.less 这里面写首页的样式
将刚才设置好的common.less引入到index.less里面,语法如下:
@import “common”
生成index.css引入到index.html里面
6.body样式
body{
min-width: 320px;
width:15rem;
margin:0 auto;
line-height: 1.5;
font-family: Arial, Helvetica;
background-color: #f2f2f2;
}
手机淘宝团队出的简洁高效 移动端适配库
我们再也不需要在写不同屏幕的媒体查询,因为里面js做了处理
它的原理是把当前的设备划分为10等份,但是不同的设备下,比例还是一致的。
我们要做的,就是确定好我们当前设备的html文字就可以了
比如当前设计稿是750px,那么我们需要把html文字大小设置为75px(750px/10)就可以
里面页面元素rem值:页面元素的px值/75
剩余的,让flexible.js来去算
github地址:https://github.com/amfe/lib-flexible
6-2 使用适配方案2制作苏宁移动端首页
1.技术选型
方案:我们采取单独制作移动页面方案
技术:布局采取rem适配布局2(flexible.js+rem)
设计图:本设计图采用750px设计尺寸
2.搭建相关文件夹结构
3.视口标签以及引入初始化样式还有js文件
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/index.css">
我们页面需要引入这个js文件
在index.html中引入flexible.js这个文件
<script src="js/flexible.js">script>
4.body样式
body{
min-width: 320px;
width:15rem;
margin:0 auto;
line-height: 1.5;
font-family: Arial, Helvetica;
background-color: #f2f2f2;
}
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/index.css">
<title>title>
head>
<body>
<div class="search-content">
<a href="#" class="classfy">a>
<div class="search">
<form action="">
<input type="search" value="箱包特卖每500减100">
form>
div>
<a href="#" class="login">a>
div>
<div class="banner">
<a href="#">
<img src="upload/banner.jpg">
a>
div>
<nav>
<a href="#">
<img src="upload/nav1.webp">
<span>限时抢购span>
a>
<a href="#">
<img src="upload/nav2.webp">
<span>苏宁超市span>
a>
<a href="#">
<img src="upload/nav3.webp">
<span>苏宁拼购span>
a>
<a href="#">
<img src="upload/nav4.webp">
<span>爆款手机span>
a>
<a href="#">
<img src="upload/nav5.webp">
<span>苏宁家电span>
a>
<a href="#">
<img src="upload/nav6.webp">
<span>免费兑好物span>
a>
<a href="#">
<img src="upload/nav7.webp">
<span>赚钱span>
a>
<a href="#">
<img src="upload/nav8.webp">
<span>签到有礼span>
a>
<a href="#">
<img src="upload/nav9.webp">
<span>领券中心span>
a>
<a href="#">
<img src="upload/nav10.webp">
<span>更多频道span>
a>
nav>
<div class="ad">
<a href="#">
<img src="upload/one.png">
a>
<a href="#">
<img src="upload/two.png">
a>
<a href="#">
<img src="upload/three.png">
a>
div>
<div class="items-container">
<div class="items">
<div class="zsq-area">
<a href="#">
<div class="title-wrapper">
<div class="title">限时抢购div>
<div class="count">
<span>01span> :
<span>26span> :
<span>55span>
div>
div>
<p class="desc">潮流好物限时抢p>
<ul>
<li>
<img src="upload/p1.jpg">
<p class="price">¥9.9p>
li>
<li>
<img src="upload/p2.jpg">
<p class="price">¥2.6p>
li>
ul>
a>
<div class="space">div>
<a href="#">
<div class="title-wrapper">
<div class="title">大聚会div>
div>
<p class="desc">好货一元秒p>
<ul>
<li>
<img src="upload/p3.webp">
<p class="price img-desc">清风p>
li>
<li>
<img src="upload/p4.webp">
<p class="price img-desc">小米p>
li>
ul>
a>
div>
<div class="zsq-area">
<a href="#">
<div class="title-wrapper">
<div class="title">苏宁国际div>
div>
<p class="desc">精选全球好物p>
<ul>
<li>
<img src="upload/p3.webp">
<p class="price img-desc">假一赔十p>
li>
<li>
<img src="upload/p4.webp">
<p class="price img-desc">每日抽奖p>
li>
ul>
a>
<div class="space">div>
<a href="#">
<div class="title-wrapper">
<div class="title">苏宁拼购div>
div>
<p class="desc">2人拼更优惠 全场包邮p>
<ul>
<li>
<img src="upload/p3.webp">
<p class="price img-desc">2人拼238p>
li>
<li>
<img src="upload/p4.webp">
<p class="price img-desc">2人拼445p>
li>
ul>
a>
div>
<div class="title-four">
<div class="four-title">
<a href="#">
<p>为您推荐p>
<p>精选频道p>
a>
div>
<div class="four-space">
<div class="four-items">
<a href="#" class="click-area">
<img src="upload/F1.png">
<p>生活家电p>
a>
div>
<div class="four-items">
<a href="#" class="click-area">
<img src="upload/f2.png">
<p>苏宁Outletsp>
a>
div>
<div class="four-items">
<a href="#" class="click-area">
<img src="upload/f3.gif">
<p>新品首发p>
a>
div>
<div class="four-items">
<a href="#" class="click-area">
<img src="upload/f4.png">
<p>0元试用p>
a>
div>
div>
div>
<div class="spacer">div>
<div class="tt-content">
<img src="upload/toutiao.png" class="logo">
<div class="list-wrapper">
<ul>
<li>
<a href="#">
<i>热门i>
<span>厨房小课堂,如何选择优质小麦粉span>
a>
li>
ul>
div>
div>
div>
<div class="ad hot">
<a href="#">
<img src="upload/d1.gif">
a>
<a href="#">
<img src="upload/d2.gif">
a>
<a href="#">
<img src="upload/d3.gif">
a>
div>
<div class="new-bd">
<div class="title-img">
<a href="#">
<img src="upload/title-img.png">
a>
div>
<div class="newbd-list">
<div class="bd-three">
<div class="bd-one-items">
<a href="#">
<img src="upload/bd-one-img-top.webp" class="one-top">
<img src="upload/bd-one-img.png" class="one-bottom">
<p class="three-name">
<span>人气榜span>
p>
<p class="three-title">畅销家用空调榜p>
<p class="three-container">卖爆2356件p>
a>
div>
<div class="bd-one-items">
<a href="#">
<img src="upload/bd-one-img-top2.webp" class="one-top">
<img src="upload/bd-one-img2.png" class="one-bottom">
<p class="three-name">
<span>人气榜span>
p>
<p class="three-title">畅销家用空调榜p>
<p class="three-container">卖爆2356件p>
a>
div>
<div class="bd-one-items">
<a href="#">
<img src="upload/bd-one-img-top3.webp" class="one-top">
<img src="upload/bd-one-img.png" class="one-bottom">
<p class="three-name">
<span>人气榜span>
p>
<p class="three-title">畅销家用空调榜p>
<p class="three-container">卖爆2356件p>
a>
div>
div>
<div class="bd-two">
<div class="items change">
<div class="zsq-area">
<a href="#">
<div class="title-wrapper">
<div class="title">便民生活服务榜div>
<span>人气榜span>
div>
<p class="desc">卖爆192件p>
<ul>
<li>
<img src="upload/a1.webp">
li>
<li>
<img src="upload/a2.webp">
li>
ul>
a>
<div class="space">div>
<a href="#">
<div class="title-wrapper">
<div class="title">潮流女上衣榜div>
<span>人气榜span>
div>
<p class="desc">卖爆340件p>
<ul>
<li>
<img src="upload/a3.webp">
li>
<li>
<img src="upload/a4.webp">
li>
ul>
a>
div>
<div class="zsq-area">
<a href="#">
<div class="title-wrapper">
<div class="title">休闲饼干零食榜div>
<span>趋势榜span>
div>
<p class="desc">本周趋势上升71%p>
<ul>
<li>
<img src="upload/a5.webp">
li>
<li>
<img src="upload/a6.webp">
li>
ul>
a>
<div class="space">div>
<a href="#">
<div class="title-wrapper">
<div class="title">人气手机榜div>
<span>人气榜span>
div>
<p class="desc">卖爆6869件p>
<ul>
<li>
<img src="upload/a7.webp">
li>
<li>
<img src="upload/a8.webp">
li>
ul>
a>
div>
div>
div>
div>
div>
<div class="bottom-img">
<a href="#">
<img src="upload/b-img.webp">
a>
div>
<div class="bottom-nav">
<a href="#">
<img src="img/i1.png">
<span style="color:#ffaa00">首页span>
a>
<a href="#">
<img src="img/i2.png">
<span>分类span>
a>
<a href="#">
<img src="img/i3.png">
<span>必抢清单span>
a>
<a href="#">
<img src="img/i4.png">
<span>购物车span>
a>
<a href="#">
<img src="img/i5.png">
<span>我的易购span>
a>
div>
body>
html>
@import "common";
body{
min-width: 320px;
width:15rem;
margin:0 auto;
line-height: 1.5;
font-family: Arial, Helvetica;
background-color: #f2f2f2;
}
//img{
// vertical-align:top;
//s}
p,ul,li{
padding:0;
margin:0;
}
li{
list-style: none;
}
input{
-webkit-appearance:none;
}
@baseFound:50;
.search-content{
z-index: 999;
display: flex;
position: fixed;
top:0;
left:50%;
transform: translateX(-50%);
width: 15rem;
height: 88rem / @baseFound;
background-color: #C61B17;
.classfy{
width:36rem / @baseFound;
height:60rem / @baseFound;
background: url(../img/classfy.png) no-repeat;
background-size:36rem / @baseFound 60rem / @baseFound;
margin: 18rem / @baseFound 25rem / @baseFound 8rem / @baseFound 27rem / @baseFound;
}
.login{
width:36rem / @baseFound;
height:60rem / @baseFound;
background: url(../img/user.png) no-repeat;
background-size:36rem / @baseFound 60rem / @baseFound;
margin: 18rem / @baseFound 25rem / @baseFound 8rem / @baseFound 27rem / @baseFound;
}
.search{
flex:1;
input{
width:100%;
height:64rem / @baseFound;
border-radius: 32rem / @baseFound;
background-color: #F4D1D1;
margin-top: 12rem / @baseFound;
border:0;
outline:none;
font-size:24rem / @baseFound;
padding-left:55rem / @baseFound;
line-height:64rem / @baseFound;
color:#858B95;
}
}
}
.banner{
width:750rem / @baseFound;
height:360rem / @baseFound ;
img{
width:750rem / @baseFound;
height:360rem / @baseFound ;
}
}
nav{
width: 750rem / @baseFound;
a{
width:150rem / @baseFound;
height: 142rem / @baseFound;
float: left;
text-align: center;
img{
display: block;
width: 84rem / @baseFound;
height:84rem / @baseFound;
margin:10rem / @baseFound auto -20rem / @baseFound;
}
span{
margin:5rem / @baseFound auto 0;
font-size:22rem / @baseFound;
color:#666;
}
}
}
.ad{
width:750rem / @baseFound;
height:210rem / @baseFound;
display: flex;
a{
flex:1;
img{
width: 100%;
}
}
}
.items-container{
.items{
width:701rem / @baseFound;
background-color: #fff;
margin:0 24rem / @baseFound;
border-radius: 15rem / @baseFound;
.zsq-area{
height:258rem / @baseFound;
display: flex;
.space{
width:1rem / @baseFound;
height:100%;
background-color: #f2f2f2;
}
a{
flex:1;
.title-wrapper{
height:58rem / @baseFound;
div{
float: left;
}
.title{
color:#000;
font-size:30rem / @baseFound;
margin:18rem / @baseFound 8rem / @baseFound 0 24rem / @baseFound;
font-weight: 700;
}
.count{
font-size:20rem / @baseFound;
margin:24rem / @baseFound 8rem / @baseFound 0 24rem / @baseFound;
span{
font-size:16rem / @baseFound;
padding:5rem / @baseFound;
height:28rem / @baseFound;
background-color: #ffaa00;
font-weight: 700;
border-radius: 8rem / @baseFound;
}
}
}
.desc{
font-size:24rem / @baseFound;
width:100%;
float: left;
padding-left:24rem / @baseFound;
color:#999;
}
ul{
margin-top:40rem / @baseFound;
margin-left:30rem / @baseFound;
li{
width:150rem / @baseFound;
height:150rem / @baseFound;
float:left;
position: relative;
img{
width:120rem / @baseFound;
height:120rem / @baseFound;
}
p{
//height:18rem / @baseFound;
font-size:20rem / @baseFound;
margin-top:-18rem / @baseFound;
color:orangered;
margin-left:40rem / @baseFound;
}
.img-desc{
width:150rem / @baseFound;
height:55rem / @baseFound;
background: url(../upload/b.png) no-repeat;
background-size:150rem / @baseFound 55rem / @baseFound;
position: absolute;
bottom: -7rem / @baseFound;
left:-50rem / @baseFound;
text-align: center;
line-height:75rem / @baseFound;
color:#333;
}
}
}
}
&:nth-child(2){
border-top:1rem / @baseFound solid #F2F2F2;
border-bottom:1rem / @baseFound solid #F2F2F2;
}
}
}
.title-four{
height:172rem / @baseFound;
display: flex;
.four-title{
width:172rem / @baseFound;
height:100%;
box-sizing: border-box;
a{
p{
color:#000;
font-size:30rem / @baseFound;
//margin:18rem / @baseFound 8rem / @baseFound 0 24rem / @baseFound;
padding-left:24rem / @baseFound;
padding-top:50rem / @baseFound;
font-weight: 700;
&:nth-child(2){
font-size:24rem / @baseFound;
color:#999;
padding-top:0;
font-weight: 400;
}
}
}
}
.four-space{
margin-right:30rem / @baseFound;
width:554rem / @baseFound;
height:100%;
display: flex;
.four-items{
flex:1;
text-align: center;
.click-area{
img{
width:100rem / @baseFound;
height:100rem / @baseFound;
margin-top:20rem / @baseFound;
}
p{
margin-top:-16rem / @baseFound;
font-size:22rem / @baseFound;
color:#333;
}
}
}
}
}
.spacer{
width:100%;
height:1rem / @baseFound;
background-color: #F2F2F2;
}
.tt-content{
height:66rem / @baseFound;
display: flex;
.logo{
width:112rem / @baseFound;
height:31rem / @baseFound;
margin:19rem / @baseFound 18rem / @baseFound 16rem / @baseFound;
}
.list-wrapper{
overflow: hidden;
width:530rem / @baseFound;
height:100%;
line-height: 50rem / @baseFound;
a{
display: block;
width:100%;
height:100%;
i{
font-size:18rem / @baseFound;
background-color: #f0ad4e;
color:#222;
padding:3rem /@baseFound 10rem /@baseFound ;
line-height: 66rem / @baseFound;
font-style:normal;
border-radius: 10rem / @baseFound;
margin-right:8rem /@baseFound;
}
span{
display: inline-block;
width:440rem / @baseFound;
height:36rem / @baseFound;
font-size:24rem / @baseFound;
color:#333;
line-height:36rem / @baseFound;
}
}
}
}
.hot{
margin-top:2rem / @baseFound;
}
.new-bd{
.title-img{
width:750rem / @baseFound;
height:60rem /@baseFound;
a{
display: block;
width:100%;
height:100%;
img{
width:100%;
height:100%;
}
}
}
.newbd-list{
.bd-three{
width:701rem / @baseFound;
height:266rem / @baseFound;
margin:0 auto 20rem / @baseFound;
.bd-one-items{
float:left;
background-color: #fff;
width:226rem / @baseFound;
height:266rem / @baseFound;
border-radius: 15rem / @baseFound;
overflow: hidden;
&:nth-child(2){
margin:0 12rem / @baseFound 0 11rem/ @baseFound;
}
a{
display: block;
width:100%;
height:100%;
position: relative;
.one-top{
position: relative;
top:0;
width:150rem / @baseFound;
height:150rem / @baseFound;
margin:15rem / @baseFound 38rem / @baseFound 0;
}
.one-bottom{
width:100%;
height:93rem / @baseFound;
position: absolute;
bottom: 0;
left:0;
}
p{
position:relative;
font-size:14rem / @baseFound;
color:#fff;
bottom: -10rem / @baseFound;
left:0;
text-align: center;
font-size:22rem / @baseFound;
}
.three-name{
width:226rem / @baseFound;
height:32rem / @baseFound;
bottom: 30rem / @baseFound;
span{
border-radius: 16rem / @baseFound;
display: block;
width:100rem / @baseFound;
height:100%;
text-align: center;
border:1px solid #f0ad4e;
background-color: #fff;
color: #f0ad4e;
line-height: 32rem / @baseFound;
left:50%;
margin-left:60rem / @baseFound;
}
}
.three-title{
height:32rem / @baseFound;
line-height:32rem / @baseFound;
bottom: 20rem / @baseFound;
font-size:26rem / @baseFound;
}
.three-container{
bottom: 20rem / @baseFound;
}
}
}
}
.bd-two{
.change{
a{
.title-wrapper{
position: relative;
span{
display: inline-block;
width:90rem / @baseFound;
height:28rem / @baseFound;
background-color: #f9f5ee;
color:burlywood;
font-size:22rem / @baseFound;
text-align: center;
line-height:30rem / @baseFound;
border-radius: 10rem / @baseFound;
position: absolute;
top:25rem / @baseFound;
right:20rem / @baseFound;
}
}
ul{
li{
img{
width:140rem / @baseFound;
height:140rem / @baseFound;
}
}
}
}
}
}
}
}
}
.bottom-img{
width:750rem / @baseFound;
height:150rem / @baseFound;
margin-bottom:100rem / @baseFound;
margin-top:10rem / @baseFound;
img{
width:750rem / @baseFound;
height:150rem / @baseFound;
}
}
.bottom-nav{
width:750rem / @baseFound;
height:100rem / @baseFound;
background-color: #fff;
display: flex;
border-top:1px solid #eee;
position:fixed;
bottom: 0;
a{
flex:1;
display: flex;
flex-direction: column;
align-items: center;
img{
margin-top:6rem / @baseFound;
width:56rem / @baseFound;
height:56rem / @baseFound;
}
span{
font-size:20rem / @baseFound;
color:#333;
}
}
}
附:公共样式
//设置常见的屏幕尺寸,修改里面的html文字大小
html{
font-size:50px;
}
a{
text-decoration: none;
}
//我们此次划分的分数为15
@no:15;
//320
@media screen and (min-width:320px){
html{
font-size: 320px / @no;
}
}
//360
@media screen and (min-width:360px){
html{
font-size: 360px / @no;
}
}
//375 iphone6/7/8
@media screen and (min-width:375px){
html{
font-size: 375px / @no;
}
}
@media screen and (min-width:384px){
html{
font-size: 384px / @no;
}
}
@media screen and (min-width:400px){
html{
font-size: 400px / @no;
}
}
@media screen and (min-width:414px){
html{
font-size: 414px / @no;
}
}
@media screen and (min-width:424px){
html{
font-size: 424px / @no;
}
}
@media screen and (min-width:480px){
html{
font-size: 480px / @no;
}
}
@media screen and (min-width:540px){
html{
font-size: 540px / @no;
}
}
@media screen and (min-width:720px){
html{
font-size: 720px / @no;
}
}
@media screen and (min-width:750px){
html{
font-size: 750px / @no;
}
}
目标:
设备划分 | 尺寸区间 |
---|---|
超小屏幕(手机) | <768px |
小屏设备(平板) | >=768px - <992px |
中等屏幕(桌面显示器) | >=992px - <1200px |
宽度设备(大桌面显示器) | >=1200px |
响应式需要一个父级作为布局容器,来配合子级元素来实现变化效果。
原理就是在不同的屏幕下,通过媒体查询来改变这个布局容器的大小,再改变里面的子元素的排列方式和大小,从而实现不同的页面布局和样式变化。
平时我们的响应式尺寸划分
但是我们也可以根据实际情况自己定义划分
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>title>
<style>
.container{
height:150px;
background-color: pink;
margin:0 auto;
}
/*超小屏幕下,小于768 布局容器的宽度为100%*/
@media screen and (max-width:767px){
.container{
width:100%;
}
}
/*小屏幕下,大于等于768 布局容器改为750px*/
@media screen and (min-width:768px){
.container{
width:750px;
}
}
/*中等屏幕下,大于等于992px 布局容器改为970px*/
@media screen and (min-width:992px){
.container{
width:970px;
}
}
/*大屏幕下,大于等于1200 布局容器修改为1170*/
@media screen and (min-width:1200px){
.container{
width:1170px;
}
}
style>
head>
<body>
<div class="container">div>
body>
html>
案例:响应式导航
需求分析:
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>title>
<style>
*{
padding:0;
margin:0;
}
li{
list-style: none;
}
.container{
text-align: center;
width:750px;
margin:0 auto;
color:#fff;
line-height: 30px;
}
.container ul li{
width:93.75px;
height:30px;
background-color:skyblue;
float: left;
}
@media screen and (max-width: 767px){
.container{
width:100%;
}
.container ul li{
width:33.33%;
}
}
style>
head>
<body>
<div class="container">
<ul>
<li>导航栏li>
<li>导航栏li>
<li>导航栏li>
<li>导航栏li>
<li>导航栏li>
<li>导航栏li>
<li>导航栏li>
<li>导航栏li>
ul>
div>
body>
html>
bootstrap来自Twitter(推特),是目前最受欢迎的前段框架。bootstrap是基于html、css、javascript的,它简介灵活,使得web开发更加快捷。
框架:顾名思义就是一套架构,它有一套比较完整的网页功能解决方案,而且控制权在框架本身,有预制样式库、组件和插件。使用者要按照所规定的某种规范进行开发。
1.优点:
2.版本
现阶段我们还没有接触js相关课程,所以我们只考虑使用它的样式库。
控制权在框架本身,使用者要按照框架所规定的某种规范进行开发。
bootstrap使用四部曲:1、创建文件夹结构 2、创建html骨架结构 3 、引入相关样式文件 4、书写内容
1.创建文件夹结构
2.创建html骨架结构
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=0">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/html5shiv.min.js">script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dest/respond.min.js">script>
<![endif]-->
3.引入相关样式文件
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
4.书写内容
bootstrap需要为页面内容和栅格系统包裹一个.container容器,bootstrap预先定义好了这个类,叫.container,它提供了两个作此用处的类。
1.container类
2.container-fluid类
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
<title>你好title>
head>
<body>
<div class="container">123div>
<div class="container-fluid">123div>
body>
html>
栅格系统英文为“girdsystems”,也有人翻译为“网格系统”,它是指页面布局划分为等宽的列,然后通过列数的定义来模块化页面布局。
bootstrap提供了一套响应式、移动设备优先的流式栅格系统,随着屏幕或视口尺寸的增加,系统会自动分为最多12列。
bootstrap里面container宽度是固定的,但是不同屏幕下,container的宽度不同,我们再把container划分为12等份
栅格系统用于通过一系列的行(row)与列(column)的组合来创建页面布局,你的内容就可以放入这些创建好的布局中。
超小屏幕(手机)<768px | 小屏设备(平板)>=768px | 中等屏幕(桌面显示器)>=992px | 宽屏(大桌面显示器)>=1200px | |
---|---|---|---|---|
.container最大宽度 | 自动(100%) | 750px | 970px | 1170px |
类前缀 | .col-xs- | .col-sm- | .col-md- | .col-lg- |
列数(column) | 12 | 12 | 12 | 12 |
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
<title>你好title>
<style>
[class^="col-lg"]{
border:1px solid #ccc;
}
.container .row div{
padding:0;
}
style>
head>
<body>
<div class="container">
<div class="row" style="background-color: pink;">
<div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">1div>
<div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">2div>
<div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">3div>
<div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">4div>
div>
div>
<div class="container">
<div class="row">
<div class="col-lg-6">1div>
<div class="col-lg-2">2div>
<div class="col-lg-2">3div>
<div class="col-lg-2">4div>
div>
div>
<div class="container">
<div class="row">
<div class="col-lg-6">1div>
<div class="col-lg-2">2div>
<div class="col-lg-2">3div>
<div class="col-lg-1">4div>
div>
div>
<div class="container">
<div class="row">
<div class="col-lg-6">1div>
<div class="col-lg-2">2div>
<div class="col-lg-2">3div>
<div class="col-lg-3">4div>
div>
div>
body>
html>
3-3 列嵌套
栅格系统内置的栅格系统将内容再次嵌套。简单理解就是一个列内再分成若干份小列。我们可以通过添加一个新的.row元素和一系列.col-sm-*元素到已经存在的.col-sm- * 元素内。
<div class="col-sm-4">
<div class="row">
<div class="col-sm-6">
1
div>
<div class="col-sm-6">
2
div>
div>
div>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
<title>你好title>
<style>
.row>div{
background-color:pink;
height:40px;
}
style>
head>
<body>
<div class="container">
<div class="row">
<div class="col-md-4">
<div class="row">
<div class="col-md-4">adiv>
<div class="col-md-8">bdiv>
div>
div>
<div class="col-md-4">2div>
<div class="col-md-4">3div>
div>
div>
body>
html>
使用.col-md-offset-* 类可以将列向右侧偏移。这些类实际是通过使用“选择器为当前元素增加了左侧的边距(margin)”
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
<title>列偏移title>
<style>
.row div{
height:50px;
background-color: pink;
}
style>
head>
<body>
<div class="container">
<div class="row">
<div class="col-md-4">左侧div>
<div class="col-md-4 col-md-offset-4">右侧div>
div>
<div class="row">
<div class="col-md-8 col-md-offset-2">中间div>
div>
div>
body>
html>
通过使用.col-md-push-* 和.col-md-pull-*类 就可以很容易的改变列(column)的排序
<div class="container">
<div class="row">
<div class="col-md-4 col-md-push-8">左侧div>
<div class="col-md-8 col-md-pull-4">右侧div>
div>
div>
为了加快对移动设备友好的页面开发工作,利用媒体查询功能,并使用这些工具类可以方便的针对不同设备展示隐藏页面内容。
类名 | 超小屏 | 小屏 | 中屏 | 大屏 |
---|---|---|---|---|
.col-hidden-xs | 隐藏 | 可见 | 可见 | 可见 |
.col-hidden-sm | 可见 | 隐藏 | 可见 | 可见 |
.col-hidden-md | 可见 | 可见 | 隐藏 | 可见 |
.col-hidden-lg | 可见 | 可见 | 可见 | 隐藏 |
与之相反的,是visible-xs visible-sm visible-md visible-lg是显示某个页面内容。
bootstrap其他(按钮、表单、表格),请参考bootstrap文档。
1.技术选型
2.页面布局分析
3.屏幕划分分析
4.结构
5.container的宽度修改
因为本效果图是采取1280的宽度,而bootstrap里面container最大为1170px,因此我们需要手动改下container宽度
@media scree and (min-width:1280px){
.container{
width:1280px;
}
}
阿里百秀案例代码验证
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="css/index.css">
<title>阿里百秀title>
head>
<body>
<div class="container">
<div class="row">
<header class="col-md-2">
<div class="logo">
<a href="#">
<img src="img/logo.png" class="hidden-xs">
<span class="visible-xs">阿里百秀span>
a>
div>
<div class="nav">
<ul>
<li><a href="#" class="glyphicon glyphicon-camera">生活馆a>li>
<li><a href="#" class="glyphicon glyphicon-picture">自然汇a>li>
<li><a href="#" class="glyphicon glyphicon-phone">科技潮a>li>
<li><a href="#" class="glyphicon glyphicon-gift">奇趣事a>li>
<li><a href="#" class="glyphicon glyphicon-glass">生活馆a>li>
ul>
div>
header>
<article class="col-md-7 ">
<div class="news clearfix">
<ul>
<li>
<a href="#">
<img src="upload/lg.png">
<p>阿里百秀p>
a>
li>
<li>
<a href="#">
<img src="upload/1.png">
<p>奇了 成都一小区护卫长长的像马云,市民纷纷求合影p>
a>
li>
<li>
<a href="#">
<img src="upload/2.png">
<p>奇了 成都一小区护卫长长的像马云,市民纷纷求合影p>
a>
li>
<li>
<a href="#">
<img src="upload/3.png">
<p>奇了 成都一小区护卫长长的像马云,市民纷纷求合影p>
a>
li>
<li>
<a href="#">
<img src="upload/4.png">
<p>奇了 成都一小区护卫长长的像马云,市民纷纷求合影p>
a>
li>
ul>
div>
<div class="publish">
<div class="row">
<div class="col-sm-9">
<h3>生活馆 关于指甲的10个健康知识 你知道几个h3>
<p class="text-muted hidden-xs">alibaixiu 发布于 2019-12-21p>
<p class="hidden-xs">
指甲是被人们hulve的身体部分,事实上从指甲的健康状况可以看出一个人的身体健康状况,快来看看10个暗藏在指甲里知识吧!
p>
<p class="text-muted">阅读(2417)评论(1)赞(18)标签:健康/感染/指甲/疾病/营养/趣味生活p>
div>
<div class="col-sm-3 pic hidden-xs">
<img src="upload/4.png">
div>
div>
<div class="row">
<div class="col-sm-9">
<h3>生活馆 关于指甲的10个健康知识 你知道几个h3>
<p class="text-muted hidden-xs">alibaixiu 发布于 2019-12-21p>
<p class="hidden-xs">
指甲是被人们hulve的身体部分,事实上从指甲的健康状况可以看出一个人的身体健康状况,快来看看10个暗藏在指甲里知识吧!
p>
<p class="text-muted">阅读(2417)评论(1)赞(18)标签:健康/感染/指甲/疾病/营养/趣味生活p>
div>
<div class="col-sm-3 pic hidden-xs">
<img src="upload/4.png">
div>
div>
<div class="row">
<div class="col-sm-9">
<h3>生活馆 关于指甲的10个健康知识 你知道几个h3>
<p class="text-muted hidden-xs">alibaixiu 发布于 2019-12-21p>
<p class="hidden-xs">
指甲是被人们hulve的身体部分,事实上从指甲的健康状况可以看出一个人的身体健康状况,快来看看10个暗藏在指甲里知识吧!
p>
<p class="text-muted">阅读(2417)评论(1)赞(18)标签:健康/感染/指甲/疾病/营养/趣味生活p>
div>
<div class="col-sm-3 pic hidden-xs">
<img src="upload/4.png">
div>
div>
<div class="row">
<div class="col-sm-9">
<h3>生活馆 关于指甲的10个健康知识 你知道几个h3>
<p class="text-muted hidden-xs">alibaixiu 发布于 2019-12-21p>
<p class="hidden-xs">
指甲是被人们hulve的身体部分,事实上从指甲的健康状况可以看出一个人的身体健康状况,快来看看10个暗藏在指甲里知识吧!
p>
<p class="text-muted">阅读(2417)评论(1)赞(18)标签:健康/感染/指甲/疾病/营养/趣味生活p>
div>
<div class="col-sm-3 pic hidden-xs">
<img src="upload/4.png">
div>
div>
<div class="row">
<div class="col-sm-9">
<h3>生活馆 关于指甲的10个健康知识 你知道几个h3>
<p class="text-muted hidden-xs">alibaixiu 发布于 2019-12-21p>
<p class="hidden-xs">
指甲是被人们hulve的身体部分,事实上从指甲的健康状况可以看出一个人的身体健康状况,快来看看10个暗藏在指甲里知识吧!
p>
<p class="text-muted">阅读(2417)评论(1)赞(18)标签:健康/感染/指甲/疾病/营养/趣味生活p>
div>
<div class="col-sm-3 pic hidden-xs">
<img src="upload/4.png">
div>
div>
article>
<aside class="col-md-3">
<a href="#" class="banner">
<img src="upload/aside.jpg">
a>
<a href="#" class="hot">
<span class="btn btn-primary">热搜span>
<h4 class="text-primary">欢迎加入中国博客联盟h4>
<p class="text-muted">
这里收录国内各个领域的优秀博客,是一个全人工编辑的开放式博客联盟交流和展示平台......
p>
a>
aside>
div>
div>
body>
html>
/*初始化样式*/
ul,li,span{
padding:0;
margin:0;
}
li{
list-style: none;
}
a{
color:#666;
text-decoration: none;
}
a:hover{
text-decoration: none;
}
body{
background-color: #f5f5f5;
}
.container{
background-color: #fff;
}
/*修改最大宽度1280px*/
@media screen and (min-width:1280px){
.container{
width:1280px;
}
}
header{
padding-left:0!important;
}
.logo{
background-color: #429ad9;
}
.logo img{
/*width:100%;*/
/*logo图片不需要缩放*/
max-width: 100%;
display: block;
margin:0 auto;
}
/*
1.我们如果进入了超小屏幕下,logo里面的图片就隐藏起来
2.我们事先准备好一个盒子,在logo里面,它平时是隐藏起来的,只有在超小屏幕下才显示出来
*/
.logo span{
display: block;
height:50px;
line-height: 50px;
text-align: center;
color:#fff;
font-size:18px;
}
.nav{
background-color: #eee;
border-bottom: 1px solid #ccc;
}
/*当我们进入小屏幕和超小屏幕时,我们nav里面的li浮动起来,并且宽度为20%*/
@media screen and (max-width:991px){
header{
padding:0!important;
}
.nav li{
float: left;
width:20%;
}
.nav li a{
padding-left:40px;
}
.nav li a:hover{
border-bottom:1px solid #ccc;
}
article{
margin-top:10px;
}
}
/*当我们进入超小屏幕时,我们nav里面的li的a的文字大小为14px*/
@media screen and (max-width:767px){
.nav li a{
font-size:14px;
}
/*当我们进入超小屏幕时,新闻模块第一个li宽度占100%,其他的小li的宽度为50%*/
.news li{
width:50%!important;
}
.news li:nth-child(1){
width:100%!important;
}
.publish h3{
font-size:18px;
}
}
.nav a{
display: block;
height:50px;
line-height:50px;
padding-left:30px;
font-size:16px;
}
.nav a:hover{
background-color: #fff;
color: #333;
}
.nav a::before{
vertical-align: middle;
padding-right:5px;
}
.news li{
float: left;
width:25%;
height:128px;
padding-right: 10px;
margin-bottom: 10px;
}
.news li a{
display: block;
width:100%;
height:100%;
position: relative;
}
.news li:nth-child(1){
width:50%;
height:266px;
}
.news li:nth-child(1) p{
font-size:20px;
line-height: 41px;
padding:0 10px;
}
.news li a img{
width:100%;
height:100%;
}
.news li a p{
margin:0;
width:100%;
height:41px;
background-color:rgba(0,0,0,0.5);
position: absolute;
bottom: 0;
left:0;
color:#fff;
font-size:12px;
padding:5px 10px;
}
.publish{
border-top:1px solid #ccc;
}
.publish .row{
border-bottom: 1px solid #ccc;
padding:10px 0;
}
.pic{
margin-top:10px;
}
.pic img{
width:100%;
}
.banner img{
width:100%;
}
.hot{
display: block;
border:1px solid #ccc;
margin-top:10px;
padding:0 20px 20px;
}
.hot span{
border-radius: 0;
margin-bottom: 10px;
}
.hot p{
font-size:12px;
}
1.单独制作移动端页面(主流)
2.响应式页面兼容移动端(其次)
三星手机官网
流式布局(百分比布局)
flex弹性布局(推荐)
rem适配布局(推荐)
响应式布局
阅读(2417)评论(1)赞(18)标签:健康/感染/指甲/疾病/营养/趣味生活
指甲是被人们hulve的身体部分,事实上从指甲的健康状况可以看出一个人的身体健康状况,快来看看10个暗藏在指甲里知识吧!
阅读(2417)评论(1)赞(18)标签:健康/感染/指甲/疾病/营养/趣味生活
指甲是被人们hulve的身体部分,事实上从指甲的健康状况可以看出一个人的身体健康状况,快来看看10个暗藏在指甲里知识吧!
阅读(2417)评论(1)赞(18)标签:健康/感染/指甲/疾病/营养/趣味生活
/*初始化样式*/
ul,li,span{
padding:0;
margin:0;
}
li{
list-style: none;
}
a{
color:#666;
text-decoration: none;
}
a:hover{
text-decoration: none;
}
body{
background-color: #f5f5f5;
}
.container{
background-color: #fff;
}
/*修改最大宽度1280px*/
@media screen and (min-width:1280px){
.container{
width:1280px;
}
}
header{
padding-left:0!important;
}
.logo{
background-color: #429ad9;
}
.logo img{
/*width:100%;*/
/*logo图片不需要缩放*/
max-width: 100%;
display: block;
margin:0 auto;
}
/*
1.我们如果进入了超小屏幕下,logo里面的图片就隐藏起来
2.我们事先准备好一个盒子,在logo里面,它平时是隐藏起来的,只有在超小屏幕下才显示出来
*/
.logo span{
display: block;
height:50px;
line-height: 50px;
text-align: center;
color:#fff;
font-size:18px;
}
.nav{
background-color: #eee;
border-bottom: 1px solid #ccc;
}
/*当我们进入小屏幕和超小屏幕时,我们nav里面的li浮动起来,并且宽度为20%*/
@media screen and (max-width:991px){
header{
padding:0!important;
}
.nav li{
float: left;
width:20%;
}
.nav li a{
padding-left:40px;
}
.nav li a:hover{
border-bottom:1px solid #ccc;
}
article{
margin-top:10px;
}
}
/*当我们进入超小屏幕时,我们nav里面的li的a的文字大小为14px*/
@media screen and (max-width:767px){
.nav li a{
font-size:14px;
}
/*当我们进入超小屏幕时,新闻模块第一个li宽度占100%,其他的小li的宽度为50%*/
.news li{
width:50%!important;
}
.news li:nth-child(1){
width:100%!important;
}
.publish h3{
font-size:18px;
}
}
.nav a{
display: block;
height:50px;
line-height:50px;
padding-left:30px;
font-size:16px;
}
.nav a:hover{
background-color: #fff;
color: #333;
}
.nav a::before{
vertical-align: middle;
padding-right:5px;
}
.news li{
float: left;
width:25%;
height:128px;
padding-right: 10px;
margin-bottom: 10px;
}
.news li a{
display: block;
width:100%;
height:100%;
position: relative;
}
.news li:nth-child(1){
width:50%;
height:266px;
}
.news li:nth-child(1) p{
font-size:20px;
line-height: 41px;
padding:0 10px;
}
.news li a img{
width:100%;
height:100%;
}
.news li a p{
margin:0;
width:100%;
height:41px;
background-color:rgba(0,0,0,0.5);
position: absolute;
bottom: 0;
left:0;
color:#fff;
font-size:12px;
padding:5px 10px;
}
.publish{
border-top:1px solid #ccc;
}
.publish .row{
border-bottom: 1px solid #ccc;
padding:10px 0;
}
.pic{
margin-top:10px;
}
.pic img{
width:100%;
}
.banner img{
width:100%;
}
.hot{
display: block;
border:1px solid #ccc;
margin-top:10px;
padding:0 20px 20px;
}
.hot span{
border-radius: 0;
margin-bottom: 10px;
}
.hot p{
font-size:12px;
}
1.单独制作移动端页面(主流)
2.响应式页面兼容移动端(其次)
三星手机官网
建议:我们选取一种主要技术选型,其他技术作为辅助,这种混合技术开发。