Bootstrap响应式Web开发笔记01——基础入门
Bootstrap响应式Web开发笔记02——移动端页面布局
Bootstrap响应式Web开发笔记03——Bootstrap栅格系统
Bootstrap响应式Web开发笔记04——常用组件
移动端页面的常用布局方法包括流式布局、弹性盒子布局和Rem适配布局,具体介绍如下。
小提示:
上述几种布局并不是独立存在的,在实际开发过程中往往是互相结合使用的,多种方式融合在一起实现移动端的屏幕适配方法,称之为混合布局,目前很多工资采取这种布局方式。
目标元素宽度/父盒子宽度=百分比数宽度
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width user-scalable=no initial-scale=1.0 maximum=scale=1.0"/>
<title>Titletitle>
<link href="../css/normalize.css" type="text/css" rel="stylesheet">
<style>
* {
padding: 0;
box-sizing: border-box;
}
body > * {
width: 980px;
height: auto;
margin: 10px auto;
border: solid 1px black;
padding: 5px;
}
header {
height: 50px;
}
section {
height: 300px;
}
section > * {
height: 100%;
border: solid 1px black;
float: left;
}
aside {
width: 250px;
}
article {
width: 70px;
margin-left: 10px;
}
footer {
height: 30px;
}
style>
head>
<body>
<header>headerheader>
<nav>navnav>
<section>
<aside>asideaside>
<article>articlearticle>
section>
<footer>footerfooter>
body>
html>
替换像素宽度为百分比宽度
body > * {
width: 98%;
height: auto;
margin: 10px auto;
border: solid 1px black;
padding: 5px;
}
aside {
width: 25%;
}
article {
width: 70%;
margin-left: 3%;
}
弹性容器通过设置 display 属性的值为 flex 或 inline-flex将其定义为弹性容器。
flex-direction 属性指定了弹性子元素在父容器中的位置。
flex-direction的值有:
flex-wrap属性用于指定弹性盒子的元素换行方式。
所有弹性子元素整体水平方向排列方式
所有弹性子元素整体垂直方向排列方式
align-content
属性用于修改 flex-wrap
属性的行为。类似于 align-items
, 但它不是设置弹性子元素的对齐,而是设置各个行的对齐。 (自动换行后每行在该行内的 对齐方式)
stretch
- 默认。各行将会伸展以占用剩余的空间。flex-start
- 各行向弹性盒容器的起始位置堆叠。flex-end
- 各行向弹性盒容器的结束位置堆叠。center
-各行向弹性盒容器的中间位置堆叠。space-between
-各行在弹性盒容器中平均分布。space-around
- 各行在弹性盒容器中平均分布,两端保留子元素与子元素之间间距大小的一半。通过设置弹性子元素的order值来实现元素的排序
设置"margin"值为"auto"值,自动获取弹性容器中剩余的空间。所以设置垂直方向margin值为"auto",可以使弹性子元素在弹性容器的两上轴方向都完全居中。
align-self
属性用于设置弹性元素自身在纵轴方向上的对齐方式。
flex
属性用于指定弹性子元素如何分配空间。
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width user-scalable=no initial-scale=1.0 maximum-scale=1.0"/>
<title>Titletitle>
<style>
.box {
height: 60px;
display: flex; /*设置为弹性盒子容器*/
border: 1px solid black;
background-color: #ddd;
flex-flow: row nowrap; /*合并写法*/
/*分开写法*/
/*flex-direction: column; !*排列方向*!*/
/*flex-wrap: nowrap; !*子元素包裹形式,nowrap容器为单行子元素可能溢出容器*!*/
/*水平对齐方式*/
justify-content: space-around;
/*垂直对齐方式*/
align-items: center;
align-content:flex-end;
}
.box > div {
border: 1px solid black;
width: 100px;
background-color: #fff;
padding: 2px;
margin: 2px;
color: #000;
}
.a {
order: 2;/*排序的时候使用*/
flex-grow: 3;/*类似于权重*/
}
.b {
order: 3;
flex-grow: 0;
}
.c {
order: 1;
flex-grow: 1;
align-self: flex-start;/*元素自身对齐方式*/
}
style>
head>
<body>
<div class="box">
<div class="a">Adiv>
<div class="b">Bdiv>
<div class="c">Cdiv>
div>
body>
html>
根据使用者屏幕不同尺寸进行不同的布局宽高设置
<style>
@media screen and (min-width:640px){
css属性: css属性值;
}
style>
<link href="style.css" media="screen and (min-width:640px)" ref="stylesheet">
设备划分 | 尺寸区别 | 宽度设置 |
---|---|---|
超小设备(手机) | <576px | 100% |
平板 | ≥576px | 540px |
桌面显示器 | ≥768px | 720px |
大桌面显示器 | ≥992px | 960px |
超大桌面显示器 | ≥1200px | 1140px |
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width user-scalable=no initial-scale=1.0 maximum-scale=1.0"/>
<title>多媒体查询title>
<link rel="stylesheet" type="text/css" href="../css/normalize.css"/>
<style>
.container {
height: 50px;background: #ddd;margin: 0 auto;
}
@media screen and (min-width: 576px) {
.container {width:540px; }
}
@media screen and (min-width: 768px) {
.container {width: 720px;}
}
@media screen and (min-width: 992px) {
.container {width: 960px;}
}
@media screen and (min-width: 1200px) {
.container {width: 1140px;}
}
style>
head>
<body>
<div class="container">布局容器div>
body>
html>
使用Rem适配布局,可以实现根据不同设备的情况,按比例设置页面字体大小。在页面中,元素使用rem尺寸单位,当页面字体大小发生变化时,元素的宽度和高度也会发生变化,从而达到等比缩放的适配。
注:rem单位类似于em单位,em单位表示父元素字体大小,不同之处在于,rem的基准是相对于根结点的字体大小。
font-size:50px;
1rem=1*50=50px
2rem=2*50=50px
我们了解到CSS语言在实现页面的样式时,存在着些许不足。为了解决css在实际开发过程中存在的问题,我们可以使用Sass来实现页面的样式,Sass的特点如下。
Less(Leaner Style Sheets)是一门CSS扩展语言,也称为CSS预处理器。作为CSS的一种形式的扩展,Less并没有减少CSS的功能,而是在现有的CSS语法上,为CSS加入程序式语言的特性。Less与Sass的区别主要包括以下内容。
1.Less是基于JavaScript,是在客户端处理的。
2.Sass是基于Ruby的,是在服务器端处理的。
3.关于变量在Less和Sass中的唯一区别就是Less用@,Sass用$。
4.关于输出设置,Less没有输出设置,而Sass提供了4种输出选项,分别是nested、compact、compressed和expanded。
5.Sass支持条件语句,可以使用if{}else{}、for{}循环等,而Less不支持。
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0"/>
<title>登录title>
<link rel="stylesheet" href="bootstrap/bootstrap.min.css">
<style>
html, body {
height: 100%;
}
body {
display: flex; /* 设置为弹性盒子 */
align-items: center; /* 居中 */
padding-top: 40px;
padding-bottom: 40px;
border-color: #f5f5f5;
}
.form-signin {
width: 100%;
max-width: 330px;
padding: 15px;
margin: auto;
}
.form-signin .form-control {
position: relative;
box-sizing: border-box;
height: auto;
padding: 10px;
font-size: 16px;
}
.form-signin .form-control:focus {
z-index: 2; /*设置焦点的堆叠值,让光标可以闪烁*/
}
.form-signin input[type="email"] {
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
margin-bottom: -1px; /*负值——设置相反方向的边距,能让两个控件重合*/
}
.form-signin input[type="password"] {
border-top-left-radius: 0; /*左上角边框形状*/
border-top-right-radius: 0; /*右上角边框形状*/
margin-bottom: 10px;
}
style>
head>
<body class="text-center">
<form class="form-signin" action="JavaScript:;">
<img src="images/timg.jpg" class="mb-4" width="72" height="72">
<h1 class="h3 mb-3">请登录h1>
<label for="inputEmail" class="sr-only">邮箱地址label>
<input type="email" id="inputEmail" class="form-control" placeholder="邮箱地址" required autofocus/>
<label for="inputPassword" class="sr-only">密码label>
<input type="password" id="inputPassword" class="form-control" placeholder="密码" required/>
<div class="mb-3">
<label>
<input type="checkbox" value="remember-me"/>记住密码
label>
div>
<button class="btn btn-lg btn-primary btn-block" type="submit">登录button>
<p class="mt-5 mb-3 text-muted">©2020-2025p>
form>
<script>
var email = document.querySelector('#inputEmail');
var password = document.querySelector('#inputPassword');
var btn = document.querySelector('button');
btn.addEventListener('click', function () {
if (email.value == '[email protected]' && password.value == '123456') {
document.location.href = 'https://www.baidu.com';
} else {
alert('账号或密码错误');
}
})
script>
body>
html>