目录
响应式布局的特点是页面会根据宽度的不同,从而有不同的元素排列方法
手机端
平板端
PC端
响应式布局可以划分为四个档,这四个档可以设置不同的布局方式
响应式布局首先需要一个布局容器,我们下面举个简单的例子
我现在有一个大盒子和三个小盒子,三个小盒子的宽度为200px
- html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Documenttitle>
- <style>
- @media screen and (min-width:700px) {
- .container {
- width: 610px;
- }
- }
-
- @media screen and (max-width:700px) {
- .container {
- width: 210px;
- }
- }
-
- div {
- display: inline-block;
- width: 200px;
- height: 200px;
- background-color: cyan;
- }
-
- .container {
- display: block;
- background-color: red;
- margin: 0 auto;
- }
- style>
- head>
-
- <body>
- <div class="container">
- <div>div>
- <div>div>
- <div>div>
- div>
-
- body>
-
- html>
当页面宽度大于600px的时候,我将大盒子的宽度设置为610px,那么三个小盒子就会横着排
当页面宽度小于600px的时候,我将大盒子的宽度设置为210px,那么三个小盒子就会横着排
在这三个盒子中我们可以放我们需要的元素,大盒子我们叫做响应式布局容器,一般会将其类名命名为container
Bootstrap是一个框架,可以帮我们快速搞定响应式布局,Bootstrap的官方中文网站地址 Bootstrap中文网
Bootstrap的简介可以看一下这个 05-Bootstrap简介_哔哩哔哩_bilibili
JS我们放在JS的专栏中讲,我们在这里只搞CSS
我当前Boootstrap已经更新到5,我们直接使用最新的
下载之后我们对其进行解压
解压后里面有css与js
如果你想快速使用Bootstrap中的样式,你可以下载这个
下载解压后会有很多的demo
我们打开headers,里面有html与css文件
打开其中的index.html,发现其中有很多的头部样式
这样你就可以直接拿去用了
我们可以讲Bootstrap的入门模板复制到我们的html文件中
部分BootStrap入门模板中有在模板中考虑到兼容性问题
在我这个版本中没有关于IE的判断
入门模板中主要就引入css与JS,我们下载好之后引入本地文件就可以了
我们自己使用的时候像以前一样引入就可以了
我们先搞一个按钮来看看
点击组建,Buttons,然后我们复制Danger这个按钮到html中
打开之后发现已经成功搞到了页面中
这里它是通过类名搞到的这种样式
这里就会涉及到一个问题,别的框架可能也会使用相同的类名,所以同一个网站,最好只使用一种框架
如果你再加一个div,使用相同的类,样式相同
如果你想对这个div进行小改动,那么你可以再加一个类对其进行修改
在Bootstrap5中是这样定义的
先看其中的两个,一个是.container多用于PC端布局,另一个.container-fluid这个是流式布局,多用于移动端布局
引入后在不同的页面中容器会有不同的宽度
栅格系统(grid systems)也叫网格系统,可以理解为把页面搞成一个一个的格子,然后往里面放元素
Bootstrap的栅格定义是这样的,无论是大屏幕还是小屏幕都把页面分成12列
我们下面简单用一下,在一行内搞四个小盒子,让其在大屏幕内一行占3份(一行占四个),让其在小屏幕内一张占6份(一行占两个)
在大屏幕中是这样的
每一列会有15px的padding,如果不想使用这个padding可以通过CSS取消掉padding,如果你想给格子一个间隙的话不要对格子使用margin,你让给每一个格子里放一个盒子,对里面的盒子设置margin,像下面这样就是格子中有一个小盒子
在小屏幕中是这样的
份数可以自定义,我们再搞一行
让第一个盒子占7份,第二个盒子占1份,最后的两个盒子格子占两份
如果没有设置小屏幕的情况,那么它就会按照div的原始属性(自己独占一行)来显示
如果一行内的元素份数加在一起不到12份,那么少了的那部分空间会放在末尾
我们把第一个元素搞成6份
剩的一份会在最后留出来
我们把第一个元素搞成8份
如果加下一个元素份数会超过12,那么下面的元素会自动折行
我想在第一个格子内再放两行,那么就可以这样写
在当前版本行列最好交替使用,如果不交替使用就会变成这样
相较于正常的行与列,连续使用行会明显向左移动一些
如果想再放两个列可以这样写
我现在想搞两个盒子,都占5分,然后放在两侧,那么我可以这样写
给第二个盒子偏移两份
用列偏移可以做水平居中
中间的份数必须是偶数
列偏移实际是做了一下盒子左侧的margin
使用order-序号进行列排序
我们简单用一下,让一号盒子只在md尺寸及以下中隐藏
列隐藏没有问题,隐藏行是有问题的
如果对行进行隐藏,在小的窗口下确实可以达到隐藏的效果
但当显示的时候,列之间的比例关系会被破坏
阿里百秀地址 阿里百秀
我们就做到热门推荐那里就可以了
它从大到小的变化是这样的
最大状态(xxl),左中右比例大致为2:7:3
较大状态(xl),结构不变,页面两侧的空间逐渐消失,这里我们得知xl与xxl的结构是相同的,所以不需要对xxl单独设置份数
大状态(lg)最右侧消失(要对右侧设置在lg以下消失),左侧与中侧大概3:9,其余无变化
中等状态(md)左侧横着放在了最上面
最小状态(sm)最上侧的一些信息消失,且不能够再进行缩小
最后我们看一下移动端的情况,跟最小的情况差不多,我门就不做修改了
我们制作的思路是这样的,先做大的,再一步一步修改小的
我项目的结构是这样的,bootstrap-5.1.3-dist是将bootstrap直接解压后放里面的,bootstrap5中没有字体图标功能,所以字体图标使用的是icomoon
一般来讲使用框架是不需要自己做初始化的,我习惯自己初始化一下,所以还是加上了
- html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport"
- content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0">
- <link rel="stylesheet" href="bootstrap-5.1.3-dist/css/bootstrap.css">
- <link rel="stylesheet" href="css/initialization.css">
- <link rel="stylesheet" href="css/index.css">
- <title>Documenttitle>
- <style>
- /* div[class*='row'] {
- border: 1px solid red;
- }
- div[class*='col'] {
- border: 1px solid red;
- }
- section[class*='row'] {
- border: 1px solid red;
- }
- section[class*='col'] {
- border: 1px solid red;
- } */
- style>
- head>
-
- <body>
- <div class="container">
- <div class="row">
- <section class="col-xl-2 left col-md-3">
- <div class="row head">div>
- <div class="link_row">
- <div class="row"><a href="#">📡 新闻a>div>
- <div class="row"><a href="#">📽 生活a>div>
- <div class="row"><a href="#">🌴 自然a>div>
- <div class="row"><a href="#">⌚️ 科技a>div>
- <div class="row"><a href="#">🎁 奇趣a>div>
- <div class="row"><a href="#">🍔 美食a>div>
- div>
-
- <form action="#" class="row">
- <input type="text" placeholder="输入关键字" class="col-md-8 d-none d-md-block">
- <input type="submit" value="搜索" class="col-md-4 d-none d-md-block">
- form>
- section>
-
-
- <section class="col-xl-7 col-md-9">
- <div class="middle">
- <div class="row middle_top">
- <div class="col-sm-6 d-none d-sm-block">
- <a href="#">
- <img src="upload/百科营销.jpg" alt="">
- <div class="one_line_mask">同步赞百科营销服务正式发布div>
- a>
- div>
- <div class="col-sm-3 d-none d-sm-block">
- <div class="row">
- <a href="#">
- <img src="upload/保安马云.jpg" alt="">
- <div class="two_line_mask">奇了 成都一小区护卫长得像马云 市民纷纷求合影div>
- a>
- div>
- <div class="row">
- <a href="#">
- <img src="upload/不雅照.jpeg" alt="">
- <div class="two_line_mask">另类教育!外国老爸怒传女儿不雅照到Facebookdiv>
- a>
- div>
- div>
- <div class="col-sm-3 d-none d-sm-block">
- <div class="row">
- <a href="#">
- <img src="upload/蛇吃蜈蚣.jpeg" alt="">
- <div class="two_line_mask">震惊!巨型蜈蚣遭毒蛇吞噬 穿肚而出同归于尽div>
- a>
- div>
- <div class="row">
- <a href="#">
- <img src="upload/大熊猫.jpeg" alt="">
- <div class="two_line_mask">竹子真的是大熊猫最爱吗?NO,国宝也吃肉div>
- a>
- div>
- div>
- div>
- <div class="row">
- <p class="title">
- <span>一周热门排行span>
- p>
- <p>暂无文章!p>
- div>
- <div class="row middle_bottom">
- <p class="title">
- <span>热门推荐span>
- p>
-
- <div class="col-sm-3 col-6">
- <a href="#">
- <img src="upload/同步赞.jpg" alt="">
- <p>自助发稿融媒体平台赞传媒正式上线,赠免费写稿服务p>
- a>
- div>
- <div class="col-sm-3 col-6">
- <a href="#">
- <img src="upload/签约仪式.jpg" alt="">
- <p>鑫网传媒与万林在线战略合作仪式暨股东签约仪式在深举办p>
- a>
- div>
- <div class="col-sm-3 col-6">
- <a href="#">
- <img src="upload/保安马云.jpg" alt="">
- <p>奇了 成都一小区护卫长得像马云 市民纷纷求合影p>
- a>
- div>
- <div class="col-sm-3 col-6">
- <a href="#">
- <img src="upload/卫星拍地球.jpg" alt="">
- <p>世界真美 令人惊叹 卫星拍地球风景地貌p>
- a>
- div>
- div>
- div>
- section>
-
-
- <section class="col-xl-3 right d-none d-xl-block">
- <div class="row"><img src="upload/中国博客联盟.jpg" alt="">div>
- <div class="row hot">
- <div class="hot_title">热搜div>
- <h4>欢迎加入中国博客联盟h4>
- <p>这里收录国内各个领域的优秀博客,是一个全人工编辑的开放式博客联盟交流和展示平台......p>
- div>
- <div class="row">
- <p class="title">
- <span>最新文章span>
- p>
-
- <div class="col-xl-12 new_article_list">
- <a href="#" class="row">
- <div class="col-xl-8">
- <div class="row article_title">自助发稿融媒体平台赞传媒正式上线,赠免费写稿服务div>
- <div class="row">阅读(1905)div>
- div>
- <div class="col-xl-4">
- <div class="row"><img src="upload/同步赞.jpg" alt="">div>
- div>
- a>
-
- <a href="#" class="row">
- <div class="col-xl-8">
- <div class="row article_title">鑫网传媒与万林在线战略合作仪式暨股东签约仪式在深举办div>
- <div class="row">阅读(1650)div>
- div>
- <div class="col-xl-4">
- <div class="row"><img src="upload/签约仪式.jpg" alt="">div>
- div>
- a>
-
-
- <a href="#" class="row">
- <div class="col-xl-8">
- <div class="row article_title">奇了 成都一小区护卫长得像马云 市民纷纷求合影div>
- <div class="row">阅读(10295)div>
- div>
- <div class="col-xl-4">
- <div class="row"><img src="upload/保安马云.jpg" alt="">div>
- div>
- a>
-
-
- <a href="#" class="row">
- <div class="col-xl-8">
- <div class="row article_title">世界真美 令人惊叹 卫星拍地球风景地貌div>
- <div class="row">阅读(5397)div>
- div>
- <div class="col-xl-4">
- <div class="row"><img src="upload/卫星拍地球.jpg" alt="">div>
- div>
- a>
-
- div>
-
- div>
- section>
- div>
- div>
- body>
-
- html>
在布局的时候我们可以把网格画一下,这样哪里出了问题可以锁定要修改的位置
index.less
- // body {
- // font-size: 14px;
- // height: 3000px;
- // }
-
- // 左侧
- .left {
- background-color: #f6f6f6;
- .head {
- height: 120px;
- background-color: rgb(255, 94, 82);
- background-image: url(../images/阿里百秀_pc.png);
- background-repeat: no-repeat;
- background-position: center center;
- }
-
- .link_row {
- .row {
- &:hover {
- background-color: rgb(255, 255, 255)
- }
-
- a {
- height: 60px;
- line-height: 60px;
- font-size: 20px;
- text-indent: 15px;
- }
- }
-
- }
-
- form {
- font-size: 20px;
- margin-top: 50px;
- height: 40px;
- padding: 0px 5px;
-
- input[type='submit'] {
- color: white;
- background-color: rgb(254, 117, 107);
- border-color: transparent;
- text-align: center;
- }
- }
- }
-
- // 中部
- .middle {
- margin-left: 20px;
- margin-right: 20px;
- .middle_top {
- height: 300px;
- div[class*="col"] {
- height: 100%;
- .row {
- height: 50%;
- }
- a {
- width:100%;
- height:100%;
- .one_line_mask,
- .two_line_mask {
- position: relative;
- bottom: 34px;
- width: 100%;
- height: 34px;
- color: white;
- background-color: rgba(0, 0, 0, 0.7);
- z-index: 999;
- padding-left: 10px;
- padding-right: 10px;
- transition: all 0.3s;
- overflow: hidden;
- }
-
- .one_line_mask {
- font-size: 16px;
- line-height: 34px;
- }
-
- .two_line_mask {
- font-size: 12px;
-
- }
-
- img {
- width: 100%;
- height: 100%;
- }
-
- &:hover {
- .one_line_mask,
- .two_line_mask {
- background-color: rgb(254, 108, 95);
- }
- }
- }
- }
-
- }
-
- .middle_bottom {
- height: 200px;
- a {
- img {
- width: 100%;
- height: 50%;
- }
- p {
- width: 100%;
- height: 20%;
- font-size: 20px;
- overflow: hidden;
- }
-
- &:hover p {
- color:rgb(254, 108, 95);
- }
- }
- }
- }
-
- // 侧边栏部分
- .right {
- img {
- padding: 0px;
- width: 100%;
- height: 100%;
- }
-
- .hot {
- margin-top:20px;
- margin-bottom: 20px;
- border:1px solid gray;
- &:hover {
- border:1px solid red;
- }
- .hot_title {
- position: relative;
- left:15px;
- width:60px;
- height:30px;
- line-height: 30px;
- text-align: center;
- background-color: rgb(255,94,82);
- color:white;
- }
-
- h4 {
- margin-top: 20px;
- color:rgb(255,94,121);
- }
-
- p {
- color:gray;
- }
- }
-
- .new_article_list {
- a[class='row']{
- padding-top:10px;
- padding-bottom:10px;
- border-bottom:1px solid #eee;
-
- img {
- width:80px;
- height:60px;
- }
-
- &:hover .article_title {
- color:rgb(255,94,121);
- }
- }
- }
-
- }
-
- // 标题样式
- .title {
- border-bottom: 2px solid #eee;
- padding-left: 0px;
- span {
- display: inline-block!important;
- font-size: 25px;
- padding-left: 0px;
- border-bottom: 3px solid red;
- }
- }
-
- @font-face {
- font-family: 'icomoon';
- src: url('../fonts/icomoon/fonts/icomoon.eot?kzli16');
- src: url('../fonts/icomoon/fonts/icomoon.eot?kzli16#iefix') format('embedded-opentype'),
- url('../fonts/icomoon/fonts/icomoon.ttf?kzli16') format('truetype'),
- url('../fonts/icomoon/fonts/icomoon.woff?kzli16') format('woff'),
- url('../fonts/icomoon/fonts/icomoon.svg?kzli16#icomoon') format('svg');
- font-weight: normal;
- font-style: normal;
- font-display: block;
- }
-
- // 响应式媒体查询
- @media screen and (max-width:767px) {
- .left {
- .head {
- position: relative;
- height: 42px;
- background-image: url(../images/阿里百秀_m.png);
-
- &::after {
- position: absolute;
- right:10px;
- top: 8px;
- content: "\e986";
- font-family: 'icomoon';
- font-size:16px;
- color:white;
- }
- }
-
- .link_row {
- position: relative;
- &::after {
- position: absolute;
- right:0px;
- top: 15px;
- content: "\e9bd";
- font-family: 'icomoon';
- font-size:16px;
- color:black;
- }
- }
-
- }
-
- .link_row {
- display: flex;
- height: 0px;
- .row {
- a {
- text-indent:0px!important;
- font-size:14px!important;
- }
- }
- }
-
- form {
- height: 0px!important;
- }
- }
-
- @media screen and (max-width:575px) {
- .middle_top {
- height: 0px !important;
- }
- }
有些复杂样式的修改不能仅靠bootstrap解决,需要自己搞一下媒体查询