HTML5+CSS3的学习(五)

HTML5+CSS3的学习(五)

2018版李立超html+css基础 103集教程,哔哩哔哩链接:https://www.bilibili.com/video/BV1sW411T78k?spm_id_from=333.999.0.0

2019版李立超前端html5+css3 148集教程,哔哩哔哩链接:https://www.bilibili.com/video/BV1XJ411X7Ud?spm_id_from=333.999.0.0

八、表单的基本设置

1.表单

• 现实生活中的表单是用来提交信息的,比如:找工作填写的简历、入学时填写的个人信息表。这些都是表单的一种

• 网页中的表单是用来向服务器提交信息的,我们最常用到的表单就是baidu的搜索框

在搜索框填入关键字后,点击搜索按钮,关键字会提交到baidu的服务器,服务器根据用户输入的关键字进行检索,返回相应信息

• 表单可以将用户填写的信息提交的服务器

• 例子:

image-20200220174633639

2.表单项

image-20200220174707876

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>表单</title>
</head>

<body>
    <!-- 
        表单:
            - 在现实生活中表单用于提交数据
            - 在网页中也可以使用表单,网页中的表单用于将本地的数据提交给远程的服务器
            - 使用form标签来创建一个表单

     -->
    <!-- 
        form的属性
            action 表单要提交的服务器的地址
            method 提交表单的方法
                   get 方式,默认提交方式,会将参数拼接在连接后面,有大小限制,4k
                   post 方式,会将参数封装在请求体中,理论上来说大小没有限制
     -->
    <form action="target.html">
        <!--
           文本框
           注意:数据要提交到服务器中,必须要为元素指定一个name属性值
        -->
        文本框 <input type="text" name="username">
        <br><br>
        <!-- 
            密码框
         -->
        密码框 <input type="password" name="password">
        <br><br>

        <!--
             单选按钮
                - 像这种选择框,必须要指定一个value属性,value属性最终会作为用户的填写的值传递给服务器
                - checked 可以将单选按钮设置为默认选中,可以写为checked="任意值",但一般只写checked
           -->
        单选按钮 <input type="radio" name="hello" value="a">
        <input type="radio" name="hello" value="b" checked>
        <br><br>

        <!-- 
            多选框
         -->
        多选框 <input type="checkbox" name="test" value="1">
        <input type="checkbox" name="test" value="2">
        <input type="checkbox" name="test" value="3" checked>

        <br><br>

        <!-- 下拉列表   selected把某个选项设置为默认 -->
        <select name="haha">
            <option value="i">选项一</option>
            <option selected value="ii">选项二</option>
            <option value="iii">选项三</option>
        </select>

        <br><br>
        <!-- 
            提交按钮
         -->
        <input type="submit" value="注册">
        <!--
          textarea 表示多行文本输入框 (起始标签和结束标签中的内容是默认值)
                rows 属性设置可以显示几行的高度
                cols 属性设置每行可以显示几个字符宽度

         input type=file     是文件上传域
         input type=hidden   是隐藏域,主要用来存放页面上的一些id信息    
         当我们要发送某些信息,而这些信息,不需要用户参与,就可以使用隐藏域(提交的时候同时发送给服务器)
        -->
    </form>
</body>

</html>

image-20200324150454418

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>

    <form action="target.html">
<!-- 

    autocomplete="off" 关闭自动补全(即下方输入历史不会显示)
    readonly 将表单项设置为只读,不能修改 ,数据会提交
    disabled 将表单项设置为禁用,不能点击,数据不会提交
    autofocus 设置表单项自动获取焦点(即下方第二个input会自动获取焦点,不点击)
 -->
        <input type="text" name="username" value="hello" readonly>
        <br><br>
        <input type="text" name="username" autofocus>
        <br><br>
        <input type="text" name="b">

        <br><br>

        <!-- <input type="color">可以给用户选择颜色 -->
        <br><br>
        <!-- <input type="email"> email不正确会提示-->
        <br><br>
       <!-- 提交按钮 -->
        <input type="submit">
        <!-- 重置按钮 -->
        <input type="reset">
        <!-- 普通的按钮,用的多,通过js给它添加各种功能 -->
        <input type="button" value="按钮">

        <br><br>
        
        <button type="submit">提交</button>
        <button type="reset">重置</button>
        <button type="button">按钮</button>
    </form>    
</body>
</html>

image-20200324150542697

3.input

input是我们使用的最多的表单项,它可以根据不同的type属性呈现不同的状态。

type属性可选值:

  • text:文本框
  • password:密码框
  • submit:提交按钮
  • radio:单选按钮
  • checkbox:多选框
  • reset :重置按钮
  • file:上传文件
  • hidden:隐藏域
  • button:普通按钮

placeholder:指定默认的提示信息

name:在表单提交 的时候,用作参数的名称,要写

id: 给输入项取一个名字,以便后期操作它

4.select、option、optgroup

select用于创建一个下拉列表。

option表示下拉列表中的列表项。

optgroup用于为列表项分组。

5.textarea

textarea用来创建一个文本域,实际效果和文本框类似,只是可以输入多行数据。

• 可用属性:

cols:文本域的列数

rows:文本域的行数

6.fieldset、legend、label

fieldset用来为表单项进行分组。

legend用于指定每组的名字。

label标签用来为表单项定义描述文字。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<!-- 
			表单的作用就是用来将用户信息提交给服务器的
				比如:百度的搜索框 注册 登录这些操作都需要填写表单
		-->
				
		<!--
			使用form标签创建一个表单
				form标签中必须指定一个action属性,该属性指向的是一个服务器的地址
				当我们提交表单时将会提交到action属性对应的地址	
		-->
		<form action="target.html">
			<!-- 
				使用form创建的仅仅是一个空白的表单,
					我们还需要向form中添加不同的表单项
			-->
			
			<!-- 
				在表单中可以使用fieldset来为表单项进行分组,
				可以将表单项中的同一组放到一个fieldset中
			-->
			<fieldset>
				
				<!-- 在fieldset可以使用legend子标签,来指定组名 -->
				<legend>用户信息</legend>
								
				<!-- 
					使用input来创建一个文本框,它的type属性是text
						如果希望表单项中的数据会提交到服务器中,还必须给表单项指定一个name属性
						name表示提交内容的名字	
						
					用户填写的信息会附在url地址的后边以查询字符串的形式发送给服务器
						url地址?查询字符串
					格式:
						属性名=属性值&属性名=属性值&属性名=属性值&属性名=属性值
					在文本框中也可以指定value属性值,该值将会作为文本框的默认值显示	
				-->
				<!-- 
					在html中还为我们提供了一个标签,专门用来选中表单中的提示文字的
					label标签
					该标签可以指定一个for属性,该属性的值需要指定一个表单项的id值
				-->
				<label for="um">用户名</label>
				<input id="um" type="text" name="username"  /> <br /><br />
				
				<!--
					密码框
						- 使用input创建一个密码框,它的type属性值是password
				-->
				<label for="pwd">密码 </label>
				<input id="pwd" type="password" name="password" /> <br /><br />
			</fieldset>
			
			<fieldset >
				
				<legend>用户爱好</legend>
			
			<!--
				单选按钮
					- 使用input来创建一个单选按钮,它的type属性使用radio
					- 单选按钮通过name属性进行分组,name属性相同是一组按钮
					- 像这种需要用户选择但是不需要用户直接填写内容的表单项,
						还必须指定一个value属性,这样被选中的表单项的value属性值将会最终提交给服务器
						
					如果希望在单选按钮或者是多选框中指定默认选中的选项,
						则可以在希望选中的项中添加checked="checked"属性
			-->
			性别  <input type="radio" name="gender" value="male" id="male" /><label for="male"></label>
				<input type="radio" name="gender" value="female" checked="checked" id="female" /><label for="female"></label> 
				<br /><br />
			
			<!-- 
				多选框
					- 使用input创建一个多选框,它的type属性使用checkbox
			-->
			爱好 	<input type="checkbox" name="hobby" value="zq" />足球
				<input type="checkbox" name="hobby" value="lq" />篮球
				<input type="checkbox" name="hobby" value="ymq" checked="checked" />羽毛球
				<input type="checkbox" name="hobby" value="ppq" checked="checked"/>乒乓球
			<br /><br />
			
			</fieldset>
			
			<!-- 
				下拉列表
					- 使用select来创建一个下拉列表
					下拉列表的name属性需要指定给select,而value属性需要指定给option
					可以通过在option中添加selected="selected"来将选项设置为默认选中
					
					当为select添加一个multiple="multiple",则下拉列表变为一个多选的下拉列表
			-->
			你喜欢的明星 
				<select name="star">
					
					<!-- 
						在select中可以使用optgroup对选项进行分组
							同一个optgroup中的选项是一组
						可以通过label属性来指定分组的名字	
					-->
					<optgroup label="女明星">
						<!-- 在下拉列表中使用option标签来创建一个一个列表项 -->
						<option value="fbb">范冰冰</option>
						<option value="lxr">林心如</option>
						<option value="zw">赵薇</option>
					</optgroup>
					
					<optgroup label="男明星">
						<option value="zbs" selected="selected">赵本山</option>
						<option value="ldh">刘德华</option>
						<option value="pcj">潘长江</option>
					</optgroup>
					
				</select>
			
			<br /><br />
			
			<!--
				使用textarea创建一个文本域
			-->
			自我介绍  <textarea name="info"></textarea>
			
			<br /><br />
			
			<!-- 
				提交按钮可以将表单中的信息提交给服务器
				使用input创建一个提交按钮,它的type属性值是submit
				在提交按钮中可以通过value属性来指定按钮上的文字
			-->
			<input type="submit" value="注册" />
			
			<!--
				<input type="reset" />可以创建一个重置按钮,
					点击重置按钮以后表单中内容将会恢复为默认值
			-->
			<input type="reset" />
			
			<!-- 
				使用input type=button可以用来创建一个单纯的按钮,
					这个按钮没有任何功能,只能被点击
			-->
			<input type="button" value="按钮" />
			
			<!--
				除了使用input,也可以使用button标签来创建按钮
				这种方式和使用input类似,只不过由于它是成对出现的标签
					使用起来更加的灵活
			-->
			<br /><br />
			<button type="submit">提交</button>
			<button type="reset">重置</button>
			<button type="button">按钮</button>
			
		</form>
	</body>
</html>

image-20200313223727602

7.框架集

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
		<!-- 
			框架集和内联框架的作用类似,都是用于在一个页面中引入其他的外部的页面,
				框架集可以同时引入多个页面,而内联框架只能引入一个,
				在h5标准中,推荐使用框架集,而不使用内联框架
				
			使用frameset来创建一个框架集,注意frameset不能和body出现在同一个页面中
				所以要使用框架集,页面中就不可以使用body标签
			
			属性:
				rows,指定框架集中的所有的框架,一行一行的排列
				cols, 指定框架集中的所有的页面,一列一列的排列
				
				这两个属性frameset必须选择一个,并且需要在属性中指定每一部分所占的大小
				
				frameset中也可以再嵌套frameset
				
			frameset和iframe一样,它里边的内容都不会被搜索引擎所检索,
				所以如果搜索引擎检索到的页面是一个框架页的话,它是不能去判断里边的内容的
			使用框架集则意味着页面中不能有自己的内容,只能引入其他的页面,而我们每单独加载一个页面
				浏览器都需要重新发送一次请求,引入几个页面就需要发送几次请求,用户的体验比较差
			如果非得用建议使用frameset而不使用iframe	
				
		-->
		<frameset cols="30% , * , 30%">
			<!-- 在frameset中使用frame子标签来指定要引入的页面 
				引入几个页面就写几个frame
			-->	
			<frame src="01.表格.html" />
			<frame src="02.表格.html" />
			<!-- 嵌套一个frameset -->
			<frameset rows="30%,50%,*">
				<frame src="04.表格的布局.html" />
				<frame src="05.完善clearfix.html" />
				<frame src="06.表单.html" />
			</frameset>
		</frameset>
</html>

image-20200313223852811

8.图片

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			
			.box1{
				width: 200px;
				height: 200px;
				background-image: url(img/3.png);
				background-repeat: no-repeat;
			}
			.box2{
				width: 200px;
				height: 200px;
				background-image: url(img/4.png);
				background-repeat: no-repeat;
			}
			
		</style>
	</head>
	<body style="background-color: #bfa;">
		<!-- 
			在IE6中对图片格式png24支持度不高,
				如果使用的图片格式是png24,则会导致透明效果无法正常显示
			解决方法:
				1.可以使用png8来代替png24,即可解决问题,
					但是使用png8代替png24以后,图片的清晰图会有所下降
					
				2.使用JavaScript来解决该问题,需要向页面中引入一个外部的JavaScript文件
					然后在写一下简单的JS代码,来处理该问题
					
		-->
		<div class="box1"></div>
		<div class="box2"></div>
		<img src="img/3.png"/>
		
		<!-- 在body标签的最后引入外部的JS文件 -->
		<script type="text/javascript" src="js/DD_belatedPNG_0.0.8a-min.js"></script>
		<!--再创建一个新的script标签,并且编写一些js代码 -->
		<script type="text/javascript">
			DD_belatedPNG.fix("*");
		</script>
	</body>
</html>

image-20200313223954098

9.实践

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>POLO360练习</title>
		<!-- 引入reset.css用来清除浏览器的默认样式 -->
		<link rel="stylesheet" type="text/css" href="css/reset-min.css"/>
		<!-- 引入page-index -->
		<link rel="stylesheet" type="text/css" href="css/page-index.css"/>
	</head>
	<body>
		<!-- 
			id class和文件的命名规范
				- 命名时尽量使用英文,如果不会可以使用拼音
					但是不要英文和拼音混用
				- 命名格式
					- 驼峰命名法
						- 首字母小写,每个单词的开头字母大写
							例子:aaaBbbCcc helloWorld
					- 也可以所有的字母都小写,单词之间使用_或-链接
						aaa_bbb_ccc aaa-bbb-ccc
		-->
		
		<!--创建头部div header-->
		<!--header开始-->
		<div class="header w">
			
			<!-- 创建一个导航条 -->
			<ul class="nav">
				<li>
					<a href="#">HOME</a>
					<p>Back to home</p>
				</li>
				<li>
					<a href="#">PRODUCTS</a>
					<p>What we have for you</p>
				</li>
				<li>
					<a href="#">SERVICES</a>
					<p>Things we do</p>
				</li>
				<li>
					<a href="#">BLOG</a>
					<p>Follow our updates</p>
				</li>
				<li>
					<a href="#">CONTACT</a>
					<p>Ways to reach us</p>
				</li>
			</ul>
			<!-- 在div中设置logo -->
			<div class="logo">
				<a href="#" title="一个非常非常好的网站">
					<img src="img/logo.png" alt="网站的logo" />
				</a>
			</div>
		</div>
		<!--header结束-->
		
		<!--banner开始-->
		<div class="banner w">
			<img src="img/banner/banner01.png" alt="这是一个图片" />
			
			<!-- 创建一个div,用于放置导航按钮 -->
			<div class="pointerDiv">
				<a href="#"></a>
				<a class="active" href="#"></a>
				<a href="#"></a>
				<a href="#"></a>
				<a href="#"></a>
			</div>
		</div>
		<!--banner结束-->
		
		<!--content开始-->
		<div class="content w clearfix">
			<h1>Lorem ipsum dolor sit amet, consectetur adipisicing elit</h1>
			<!-- 放置内容的三个div -->
			<div class="pl">
				<h2>Perfect Logic</h2>
				<p class="p1">All you want your website to do.</p>
				<!-- 创建图片的div -->
				<div class="imgDiv">
					<img src="img/pic/pic1.jpg" alt="小男孩" />
				</div>
				
				<p class="p2">
					Sed ut perspiciatis unde omnis iste natus error sit 
                    voluptatem accusantium doloremque laudantium, totam rem 
                    aperiam, eaque ipsa quae ab illo inventore veritatis et 
                    quasi architecto beatae vitae dicta sunt 
				</p>
				
				<a class="lm" href="#">Learn More</a>
			</div>
			
			
			<div class="cs">
				<h2>Complete Solution</h2>
				<p class="p1">A tool anything and everything you can think</p>
				<!-- 创建图片的div -->
				<div class="imgDiv">
					<img src="img/pic/pic2.jpg" alt="小女孩" />
				</div>
				
				<p class="p2">
					Nemo enim ipsam voluptatem quia voluptas sit aspernatur 
                    aut odit aut fugit, sed quia consequuntur magni dolores 
                    eos qui ratione voluptatem sequi nesciun tdolore magnam aliquam quaerat voluptatem.
				</p>
				
				<a class="lm" href="#">Learn More</a>
			</div>
			
			
			<div class="uc">
				<h2>Uber Culture</h2>
				<p class="p1">Fresh. Modern and ready for future</p>
				<!-- 创建图片的div -->
				<div class="imgDiv">
					<img src="img/pic/pic3.jpg" alt="大绿球" />
				</div>
				
				<p class="p2">
					Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, 
                    consectetur, adipisci velit, sed quia non numquam eius modi 
                    tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.
				</p>
				
				<a class="lm" href="#">Learn More</a>
				
			</div>
		</div>
		<!--content结束-->
		
		<!--contact开始-->
		<div class="contact w clearfix">
			<!-- 创建三栏div -->
			<div class="sc">
				<h2>Social Connection</h2>
				<!-- 设置段落 -->
				<p class="p1">At vero eos et accusamus et iusto odio dignissimos 
                    ducimus qui blanditiis praesentium</p>
				<!-- 设置小图标的div -->
				<div class="icon">
					<a href="#"><img src="img/rss.png" /></a>
					<a href="#"><img src="img/fb.png" /></a>
					<a href="#"><img src="img/in.png" /></a>
					<a href="#"><img src="img/yt.png" /></a>
					<a href="#"><img src="img/tw.png" /></a>
				</div>
				
				<h2 class="nl">Newsletter</h2>
				
				<p class="p1">At vero eos et accusamus et iusto odio dignissimos 
                    ducimus qui blanditiis praesentium</p>
				
				<!-- 创建一个表单 -->
				<form action="#">
					<input class="txt" type="text" placeholder="your email address" />
					<button class="btn">Subscribe</button>
				</form>
				
			</div>
			
			<!-- 联系栏中间 -->
			<div class="co">
				<!-- 创建一个标题 -->
				<h2>Contact</h2>
				<!-- 创建一个表单 -->
				<form action="#">
					<!-- 
						在文本框和文本域中可以通过placeholder来指定提示文字(水印)
						这个属性在IE8及以下的浏览器中不支持,如果要兼容IE8需要使用JS
					-->
					<input class="txt" type="text" placeholder="your name"  />
					<input class="txt" type="text" placeholder="your email address" />
					<textarea class="tarea" placeholder="message"></textarea>
					<button class="btn">Send it</button>
				</form>
			</div>
			
			<div class="nu">
				<h2>News Updates</h2>
				<p>
					<img src="img/pic/1.gif"/>
					Lorem ipsum dolor sit amet, consectetur adipisicing elit, 
                    sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
				</p>
				<p>
					<img src="img/pic/2.gif"/>
					Sed ut perspiciatis unde omnis iste natus error sit voluptatem 
                    accusantium doloremque laudantium, totam rem aperiam.
				</p>
				<p class="no-margin">
					<img src="img/pic/3.gif"/>
					At vero eos et accusamus et iusto odio dignissimos ducimus qui 
                    blanditiis praesentium.
				</p>
				<button class="btn">Visit our Blog</button>
			</div>
			
		</div>
		<!--contact结束-->
		
		<!--footer开始-->
		<div class="footer">
			<div class="w">
				<p class="copy">Copyright 2010. Studio VIVROCKS. All Rights Reserved.</p>
				<p>Site Powered by Wordpress. Design and Developed by VIVROCKS.</p>
				<p><a href="#">Home</a>  | <a href="#">About</a> | <a href="#">Products</a> | <a href="#">Services</a> | <a href="#">Contact</a></p>
				<p><a href="#">Privacy Policy</a> | <a href="#">Terms of use</a></p>
			</div>
		</div>
		<!--footer结束-->
		
		
		<!-- 处理ie6的png问题 -->
		<!--[if IE 6]>
			<script type="text/javascript" src="js/DD_belatedPNG_0.0.8a-min.js"></script>
			<script type="text/javascript">DD_belatedPNG.fix("div,img,a,h1");</script>
		<![endif]-->
	</body>
</html>

在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			
			*{
				margin: 0;
				padding: 0;
			}
			
			/*
			 * IE6的双倍边距bug
			 * 	在IE6中,当为一个向左浮动的元素设置左外边距
			 * 		或者为一个向右浮动的元素设置右外边距时
			 * 		这个外边距将会是设置的值的2倍
			 */
		
			.box1{
				width: 100px;
				height: 100px;
				float: left;
				
				/*
				 * 添加一个样式来解决ie6的双倍边距问题
				 * 对于一个浮动元素来说设置display:inline没有任何意义
				 * 	但是该属性可以解决IE6的双倍边距问题
				 */
				display: inline;
				
				background-color: red;
				margin-left: 100px;				
			}
		</style>
	</head>
	<body>
		<div class="box1"></div>
	</body>
</html>

image-20200313225709433

九、动画(animation)

1.过渡

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>

    <style>
        *{
            margin: 0;
            padding: 0;
        }

        .box1{
            width: 800px;
            height: 800px;
            background-color: silver;
            overflow: hidden;
        }

        .box1 div{
            width: 100px;
            height: 100px;
            margin-bottom: 100px;
            margin-left: 0;           
        }

        .box2{
            background-color: #bfa;
            /* margin-left: auto; */
            /* transition:height 2s;指定高的过渡为2s,width不变 */
            /* transition:all 2s;指定所有的属性过渡为2s */
            /* 
                过渡(transition)
                    - 通过过渡可以指定一个属性发生变化时的切换方式
                    - 通过过渡可以创建一些非常好的效果,提升用户的体验
             */

             /* 
             1.transition-property: 指定要执行过渡的属性  
                多个属性间使用,隔开 
                如果所有属性都需要过渡,则使用all关键字
                大部分属性都支持过渡效果(能计算的值注意auto不是一个有效数值,不能过渡),
                注意过渡时必须是从一个有效数值向另外一个有效数值进行过渡
             */
            /* 
               可以分别为宽、高分别指定过渡的时间
               transition-property: height , width; */
            /* transition-property: all; */

             /*
              2.transition-duration: 指定过渡效果的持续时间
                时间单位:s 和 ms  1s = 1000ms
              */
             /* transition-duration: 100ms, 2s; */
             /* transition-duration: 2s; */

             /* 
             3.transition-timing-function: 过渡的时序函数
                指定过渡的执行的方式  
                可选值:
                    ease 默认值,慢速开始,先加速,再减速
                    linear 匀速运动
                    ease-in 加速运动
                    ease-out 减速运动
                    ease-in-out 先加速 后减速
                    cubic-bezier() 来指定时序函数
                        https://cubic-bezier.com
                    steps() 分步执行过渡效果(指定几步执行完成)
                        可以设置一个第二个值:
                            end , 在时间结束时执行过渡(默认值)
                            start , 在时间开始时执行过渡
             */
             /* transition-timing-function: cubic-bezier(.24,.95,.82,-0.88); */
             /* transition-timing-function: steps(2, start); */


             /* 
             4.transition-delay: 过渡效果的延迟,等待一段时间后在执行过渡  
             */
             /* transition-delay: 2s; */
             

             /* 5.transition 可以同时设置过渡相关的所有属性,只有一个要求,如果要写延迟,
                则两个时间中第一个是持续时间,第二个是延迟 */
             transition:2s margin-left 1s cubic-bezier(.24,.95,.82,-0.88);
        }

        .box3{
            background-color: orange;
            transition-property: all;
            transition-duration: 2s;
        }

        .box1:hover div{
            /* width: 200px;
            height: 200px; */
            /* background-color: orange; */
            margin-left: 700px;
        }
    </style>

</head>
<body>

    <div class="box1">
        <div class="box2"></div>
        <div class="box3"></div>
    </div>
    
</body>
</html>

2.动画

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>

    <style>
        *{
            margin: 0;
            padding: 0;
        }

        .box1{
            width: 800px;
            height: 800px;
            background-color: silver;
            overflow: hidden;
        }

        .box1 div{
            width: 100px;
            height: 100px;
            margin-bottom: 100px;
            margin-left: 10px;
            
        }

        .box2{
            background-color: #bfa;
            

            /* 1.设置box2的动画 */
            /* animation-name: 要对当前元素生效的关键帧的名字,test为下方的设置 */
            /* animation-name: test; */

            /* 2.animation-duration: 动画的执行时间 */
            /* animation-duration: 4s; */

            

            /* 3.动画的延时 */
            /* animation-delay: 2s; */

            /* animation-timing-function: ease-in-out; */

            /* 
            4.animation-iteration-count 动画执行的次数 
                可选值:
                    次数
                    infinite 无限执行
            */
            /* animation-iteration-count: 1; */

            /*
             5.animation-direction
                指定动画运行的方向
                    可选值:
                    normal 默认值  从 from 向 to运行 每次都是这样 
                    reverse 从 to 向 from 运行(反向) 每次都是这样 
                    alternate 从 from 向 to运行(执行完from到to后又从to到from) 重复执行动画时反向执行
                    alternate-reverse 从 to 向 from运行(to到from后又从from到to) 重复执行动画时反向执行

            */
            /* animation-direction: alternate-reverse; */

            /* 
                6.animation-play-state: 设置动画的执行状态(停止或进行) 
                可选值:
                    running 默认值 动画执行
                    paused 动画暂停
            */
            /* animation-play-state: paused; */

            /* 
            7.animation-fill-mode: 动画的填充模式
                可选值:
                    none 默认值 动画执行完毕元素回到原来位置
                    forwards 动画执行完毕元素会停止在动画结束的位置
                    backwards 动画延时等待时,元素就会处于开始位置
                    both 结合了forwards 和 backwards
            */
            /* animation-fill-mode: both; */
            animation: test 2s 2 1s alternate;

            
        }

        .box1:hover div{
            animation-play-state: paused;
        }

        /* 
        动画
            动画和过渡类似,都是可以实现一些动态的效果,
                不同的是过渡需要在某个属性发生变化时才会触发
                动画可以自动触发动态效果
                
            设置动画效果,必须先要设置一个关键帧,关键帧设置了动画执行每一个步骤
        */
        @keyframes test {
            /* from表示动画的开始位置 也可以使用 0% (即from可以改为0%)*/
            from{
                margin-left: 0;
                background-color: orange;
            } 

            /* to动画的结束位置 也可以使用100%(即to可以改为100%)*/
            to{
                background-color: red;
                margin-left: 700px;
            }
        }
    </style>

</head>
<body>

    <div class="box1">
        <div class="box2"></div>
        <!-- <div class="box3"></div> -->
    </div>
    
</body>
</html>

3.关键帧

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>

        .outer{
            height: 500px;
            border-bottom: 10px black solid;
            margin: 50px auto;
            overflow: hidden;
        }
        .outer div{
            float: left;
            width: 100px;
            height: 100px;
            border-radius: 50%;
            background-color: #bfa;
            animation: ball .5s forwards linear infinite alternate;
        }

        div.box2{
            background-color: orange;
            animation-delay: .1s;
        }

        div.box3{
            background-color: yellow;
            animation-delay: .2s;
        }

        div.box4{
            background-color: yellowgreen;
            animation-delay: .3s;
        }

        div.box5{
            background-color: blue;
            animation-delay: .4s;
        }
        div.box6{
            background-color: pink;
            animation-delay: .5s;
        }
        div.box7{
            background-color: tomato;
            animation-delay: .6s;
        }
        div.box8{
            background-color: skyblue;
            animation-delay: .7s;
        }
        div.box9{
            background-color: chocolate;
            animation-delay: .8s;
        }
      /* 创建小球下落到结束位置后停止 animation: ball 1s forwards */
        /* 创建小球下落后弹起的动画 */
        @keyframes ball {
            from{
                margin-top: 0;
            }

            to{
                margin-top: 400px;
            }

            /* 2                                    to{
                margin-top: 400px;
                animation-timing-function: ease-in;
            }

            40%{
                margin-top: 100px;
            }

            80%{
                margin-top: 200px;
            } */

        }
    </style>
</head>
<body>

    <div class="outer">
        <div class="box1"></div>
        <div class="box2"></div>
        <div class="box3"></div>
        <div class="box4"></div>
        <div class="box5"></div>
        <div class="box6"></div>
        <div class="box7"></div>
        <div class="box8"></div>
        <div class="box9"></div>
    </div>
    
</body>
</html>

4.变形平移

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        body{
            background-color: rgb(236, 236, 236);
        }
        .box1{
            width: 200px;
            height: 200px;
            background-color: #bfa;
            margin: 0 auto;
            margin-top: 200px;

            /* 
                变形就是指通过CSS来改变元素的形状或位置(不会脱离文档流)
                -   变形不会影响到页面的布局
                - transform 用来设置元素的变形效果
                    - 平移:
                        translateX() 沿着x轴方向平移
                        translateY() 沿着y轴方向平移
                        translateZ() 沿着z轴方向平移
                            - 平移元素,百分比是相对于自身计算的
            */
            /* transform: translateY(-100px); */
            transform: translateX(100%);
        }

        /* .box2{
            width: 200px;
            height: 200px;
            background-color: orange;
            margin: 0 auto;
        } */

        .box3{
            background-color: orange;
            position: absolute;
            /* 
                这种居中方式,只适用于元素的大小(宽、高)确定
            top: 0;
            left: 0;
            bottom: 0;
            right: 0;
            margin: auto; */
            /*transform的居中,中间空格隔开*/
            left: 50%;
            top: 50%;
            transform: translateX(-50%) translateY(-50%);
          
        }

        .box4, .box5{
            width: 220px;
            height: 300px;
            background-color: #fff;
            float: left;
            margin: 0 10px;
            transition:all .3s;
        }

        .box4:hover,.box5:hover{
            transform: translateY(-4px);
            box-shadow: 0 0 10px rgba(0, 0, 0, .3)
        }
    </style>
</head>
<body>

    <div class="box1"></div>

    <div class="box2"></div>

    <!-- <div class="box3">
        aaaa
    </div> -->

    <div class="box4">

    </div>

    <div class="box5">
        
        </div>
    
</body>
</html>

5.z轴平移

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        html{
            /* 设置当前网页的视距为800px,人眼距离网页的距离 */
            perspective: 800px;
        }

        body{
            border: 1px red solid;
            background-color: rgb(241, 241, 241);
        }
        .box1{
            width: 200px;
            height: 200px;
            background-color: #bfa;
            margin: 200px auto;
            /* 
                z轴平移,调整元素在z轴的位置,正常情况就是调整元素和人眼之间的距离,
                    距离越大,元素离人越近
                z轴平移属于立体效果(近大远小),默认情况下网页是不支持透视,如果需要看见效果
                    必须要设置网页的视距 perspective
            */

            transition:2s;
        }

        body:hover .box1{
            transform: translateZ(800px);
        }
    </style>
</head>
<body>
    <div class="box1"></div>
</body>
</html>

6.旋转

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        html{
            perspective: 800px;
        }

        body{
            border: 1px red solid;
            background-color: rgb(241, 241, 241);
        }
        .box1{
            width: 320px;
            height: 320px;
            background-color: #bfa;
            margin: 200px auto;

            transition:2s;
        }

        body:hover .box1{

            /*
                通过旋转可以使元素沿着x y 或 z旋转指定的角度(要使用视距 perspective)
                    rotateX()
                    rotateY()
                    rotateZ()
            */
            /* transform: rotateZ(.25turn);1turn为1圈(360度)*/
            /* transform: rotateY(180deg) translateZ(400px); */
            /* transform: translateZ(400px) rotateY(180deg) ; deg为度*/
            transform: rotateY(180deg);
            /* 是否显示元素的背面,hidden为隐藏 */
            backface-visibility: hidden;
        }
    </style>
</head>
<body>

    <div class="box1">
        <img src="an.jpg" alt="">
    </div>
    
</body>
</html>

在这里插入图片描述

7.缩放

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        html{
            perspective:800px;
            
        }
        .box1{
            width: 100px;
            height: 100px;
            background-color: #bfa;
            transition:2s;
            margin: 100px auto;
            /* 变形的原点(从哪开始变形) 默认值 center*/
            /* transform-origin:20px 20px;  */
        }

        .box1:hover{
            /* 
                对元素进行缩放的函数:
                    scaleX() 水平方向缩放,小于1为缩放,大于1为放大,下同
                    scaleY() 垂直方向缩放
                    scale() 双方向的缩放
            */
            transform:scale(2)
        }

        .img-wrapper{
            width: 200px;
            height: 200px;
            border: 1px red solid;
            overflow: hidden;
        }

        img{
            /*0.2s*/
            transition: .2s;
        }

        .img-wrapper:hover img{
            transform:scale(1.2);
        }
    </style>
</head>
<body>
    
    <div class="box1"></div>

    <div class="img-wrapper">
        <img src="an.jpg" width="100%">
    </div>
</body>
</html>

十、less

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        html{
            /* css原生也支持变量的设置,但兼容性不是很好,ie12都不支持 */
            --color:#ff0;
            --length:200px;
        }

        .box1{
            /* calc()计算函数 */
            width: calc(200px*2);
            height: var(--length);
            background-color: var(--color);
        }

        .box2{
            width: var(--length);
            height: var(--length);
            color: var(--color);
        }

        .box3{
            width: var(--length);
            height: var(--length);
            border: 10px solid var(--color);
        }
    </style>
</head>
<body>
    <!-- 
        less是一门css的预处理语言
            - less是一个css的增强版,通过less可以编写更少的代码实现更强大的样式
            - 在less中添加了许多的新特性:像对变量的支持、对mixin的支持... ...
            - less的语法大体上和css语法一致,但是less中增添了许多对css的扩展,
                所以浏览器无法直接执行less代码,要执行必须向将less转换为css,然后再由浏览器执行

        div{
            width:100px;
        }

        div
            width 100px
     -->

     <div class="box1">aaaa</div>
     <div class="box2">aaaa</div>
     <div class="box3">aaaa</div>
</body>
</html>

image-20200324155309882

1.less的语法

// less中的单行注释,注释中的内容不会被解析到css中

/*
    css中的注释,内容会被解析到css文件中
*/
.box1{
    background-color: #bfa;

    .box2{
        background-color: #ff0;

        .box4{
            color: red;
        }
    }

    .box3{
        background-color: orange;
    }
}

//变量,在变量中可以存储一个任意的值
// 并且我们可以在需要时,任意的修改变量中的值
// 变量的语法: @变量名
@a:200px;
@b:#bfa;
@c:box6;

.box5{
    //使用变量是,如果是直接使用则以 @变量名 的形式使用即可
    width: @a;
    color:@b;
}

//作为类名,或者一部分值使用时必须以 @{变量名} 的形式使用
.@{c}{
    width: @a;
    background-image: url("@{c}/1.png");
}

@d:200px;
@d:300px;

div{
    // 变量发生重名时,会优先使用比较近的变量
    @d:115px;
    width: @d;
    height: @e;
}

//可以在变量声明前就使用变量
@e:335px;


div{
    width: 300px;
    // 新版的语法,即用$对上面的width引用
    // height: $width;
}


.box1{
    .box2{
        color: red;
    }

    >.box3{
        color: red;

        &:hover{
            color: blue;
        }
    }

    //为box1设置一个hover
    //& 就表示外层的父元素
    &:hover{
        color: orange;
    }
/*即相当于div box1*/
    div &{
        width: 100px;
    }
}

.p1{
    width: 100px;
    height: 200px;
}

/*:extend() 对当前选择器扩展指定选择器的样式(选择器分组)
  .p2:extend(.box1 > .box3){
    color: red;
}
*/
.p2:extend(.p1){
    color: red;
}

.p3{
    //直接对指定的样式进行引用,这里就相当于将p1的样式在这里进行了复制
    //mixin 混合
    .p1();
}

// 使用类选择器时可以在选择器后边添加一个括号,这时我们实际上就创建了一个mixins(混合函数)
//表示p4专门用来给其他的用
.p4(){
    width: 100px;
    height: 100px;
}
//下方的.p4的括号可以省略不写
.p5{
    .p4();
}

//混合函数 在混合函数中可以直接设置变量
/*.test(@w,@h,@bg-color){
    width: @w;
    height: @h;
    border: 1px solid @bg-color;
}*/

//分别为所设的变量设置默认值,那就可以后面不用写值,用默认值了
.test(@w:100px,@h:200px,@bg-color:red){
    width: @w;
    height: @h;
    border: 1px solid @bg-color;
}

div{
    //调用混合函数,按顺序传递参数
    // .test(200px,300px,#bfa);
    //更改width的默认值
    .test(300px);
    // .test(@bg-color:red, @h:100px, @w:300px);也可以直接按名字来传
}

span{//去两个颜色的中间值
    color: average(red,blue);
}

html{
    width: 100%;
    height: 100%; 
}
body {
    width: 100%;
    height: 100%;
    background-color: #bfa;
}

body:hover{
    //移动上去时给颜色加深50%
    background-color: darken(#bfa,50%);
}

//import用来将其他的less引入到当前的less
//可以通过import来将其他的less引入到当前的less中
@import "syntax2.less";

.box1{
    // 在less中所有的数值都可以直接进行运算
    // + - * /
    width: 100px + 100px;
    height: 100px/2;
    background-color: #bfa;
    
}

十一、flex

flex的学习推荐通过我的其他博客进行学习,点击前往

1.弹性盒

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }

        ul{
            width: 500px;
            border: 10px red solid;
            /* 将ul设置为弹性容器,设置之后默认横向排列 */
            display: flex;

            /* 
               1.flex-direction 指定容器中弹性元素的排列方式
                可选值:
                    row 默认值,弹性元素在容器中水平排列(左向右)
                        - 主轴 自左向右
                    row-reverse 弹性元素在容器中反向水平排列(右向左)
                        - 主轴 自右向左
                    column 弹性元素纵向排列(自上向下)
                    column-reverse 弹性元素方向纵向排列(自下向上)

                主轴:
                    弹性元素的排列方向称为主轴
                侧轴:
                    与主轴垂直方向的称为侧轴

            */

            flex-direction: row;
        }

        li{
            width: 200px;
            height: 100px;
            background-color: #bfa;
            font-size: 50px;
            text-align: center;
            line-height: 100px;

            /* 
                2.弹性元素的属性:
                    flex-grow 指定弹性元素的伸展的系数,默认值为0
                         - 当父元素有多余空间的时,子元素如何伸展
                         - 父元素的剩余空间,会按照比例进行分配
                         - 为子元素设置的值越大,分配越多越多
            
                    flex-shrink 指定弹性元素的收缩系数,默认值为1,
                         - 当父元素中的空间不足以容纳所有的子元素时,如果对子元素进行收缩
                         - 如果设置为0将不会自动进行收缩
                         - 为子元素设置的值越大,收缩越多
            */
            /* 当设置flex-grow: 1;后子元素平均把父元素撑满,也可以分别为子元素设置 */

            /* 
            
            */
            flex-shrink: 0;           
        }
        li:nth-child(1){
            flex-grow: 0;
            flex-shrink: 1;
        }

        li:nth-child(2){
            background-color: pink;
            /* flex-grow: 2; */
            flex-shrink: 2;
        }

        li:nth-child(3){
            background-color: orange;
            /* flex-grow: 3; */
            flex-shrink: 3;
        }
    </style>
</head>
<body>
    <!-- 
        flex(弹性盒、伸缩盒)
            - 是CSS中的又一种布局手段,它主要用来代替浮动来完成页面的布局
            - flex可以使元素具有弹性,让元素可以跟随页面的大小的改变而改变
            - 弹性容器
                - 要使用弹性盒,必须先将一个元素设置为弹性容器
                - 我们通过 display 来设置弹性容器
                    display:flex  设置为块级弹性容器(一般用这个)
                    display:inline-flex 设置为行内的弹性容器

            - 弹性元素
                - 弹性容器的子元素是弹性元素(弹性项)重点例如ul的子元素li
                - 弹性元素可以同时是弹性容器
     -->
     <ul>
         <li>1</li>
         <li>2</li>
         <li>3</li>
     </ul>

</body>
</html>

image-20200324155523224

2.弹性容器的样式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }

        ul{
            width: 600px;
            height: 800px;
            border: 10px red solid;
          /* 设置ul为弹性容器 */
            display: flex;

            /* flex-direction: column; */

            /* flex-wrap: 
                设置弹性元素是否在弹性容器中自动换行
                可选值:
                    nowrap 默认值,元素不会自动换行
                    wrap 元素沿着辅轴方向自动换行
                    wrap-reverse 元素沿着辅轴反方向换行
            */

            /* flex-wrap: wrap-reverse; */

            /* flex-flow:  wrap 和 direction 的简写属性 */
            flex-flow: row wrap;
            /*  
                justify-content
                    - 如何分配主轴上的空白空间(主轴上的元素如何排列)
                    - 可选值:
                        flex-start 元素沿着主轴起边排列
                        flex-end 元素沿着主轴终边排列
                        center 元素居中排列
                        space-around 空白分布到元素两侧(平均分配到每个元素的两侧,中间的是两侧的两倍)
                        space-between 空白均匀分布到元素间(两侧没有空白,平均分配到每个元素的两侧)
                        space-evenly 空白分布到元素的单侧(平均分配到每个元素的两侧,大小都一样)

            */
            /* justify-content: center; */

            /*
             align-items: 
                - 元素在辅轴上如何对齐
                - 元素间的关系
                    - 可选值:
                        stretch 默认值,将元素的长度设置为相同的值(行与行的高度)
                        flex-start 元素不会拉伸,沿着辅轴起边对齐(即所处的顶部)
                        flex-end 沿着辅轴的终边对齐
                        center 居中对齐
                        baseline 基线对齐,即文字的基线(文字的底部)
             */

             /* justify-content: center; */
             align-items: flex-start;

            /* 
            弹性容器的水平居中对齐:
               justify-content: center;
               align-items: center
            */
             /* align-content: 辅轴空白空间的分布,与align-items是一样的 */
             align-content: space-between;           
        }

        li{
            width: 200px;
            background-color: #bfa;
            font-size: 50px;
            text-align: center;
            line-height: 100px;
            flex-shrink: 0;            
        }
        li:nth-child(1){
            /* align-self: 用来覆盖当前弹性元素上的align-items */
            align-self: stretch;
        }

        li:nth-child(2){
            background-color: pink;
        }

        li:nth-child(3){
            background-color: orange;
        }

        li:nth-child(4){
            background-color: yellow;
        }

        li:nth-child(5){
            background-color: chocolate;
        }
    </style>
</head>
<body>
     <ul>
         <li>1</li>
         <li>
             2
            <div>2</div>
         </li>
         <li>
             3
             <div>3</div>
             <div>3</div>
        </li>

        <li>1</li>

        <li>
                2
               <div>2</div>
            </li>
     </ul>

</body>
</html>

image-20200324155834836

3.弹性元素的样式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }

        ul{
            width: 900px;
            border: 10px red solid;
            /* 设置弹性盒 */
            display: flex;
        
        }

        li{
            width: 200px;
            height: 100px;
            background-color: #bfa;
            font-size: 50px;
            text-align: center;
            line-height: 100px;

            /* 
                弹性的增长系数,它们子元素的比例都是一样的
            */
            /* flex-grow: 1; */

            /* 
                弹性元素的缩减系数
                    - 缩减系数的计算方式比较复杂
                    - 缩减多少是根据 缩减系数 和 元素大小来计算
            */
            /* flex-shrink: 1; */

            /* 
                元素基础长度

                flex-basis 指定的是元素在主轴上的基础长度
                    如果主轴是 横向的 则 该值指定的就是元素的宽度
                    如果主轴是 纵向的 则 该值指定的是就是元素的高度
                    - 默认值是 auto,表示参考元素自身的高度或宽度(即上方为li设置的宽高)
                    - 如果传递了一个具体的数值,则以该值为准(即上方为li设定的宽高无效,flex-basis:100px;)
            */
            /* flex-basis: auto; */

            /* 
                flex 可以设置弹性元素所有的三个样式
                    flex 增长 缩减 基础;
                       flex: 1 1 auto;
            
                        initial为默认值即为 "flex: 0 1 auto".
                        auto  "flex: 1(可增) 1(可减) auto"
                        none "flex: 0 0 auto" 弹性元素没有弹性(不会缩不会减)
            */
            flex: initial;         
        }
        li:nth-child(1){
            /* order 决定弹性元素的排列顺序   order: 2;即元素排在第二的位置*/
            order: 2;
        }

        li:nth-child(2){
            background-color: pink;
            /* flex-grow: 2; */
            order: 3;
        }

        li:nth-child(3){
            background-color: orange;
            /* flex-grow: 3; */
            order: 1;
        }
    </style>
</head>
<body>
   
     <ul>
         <li>1</li>
         <li>2</li>
         <li>3</li>
     </ul>

</body>
</html>

image-20200324155951542

4.像素

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box1{
            width: 100px;
            height: 100px;
            background-color: red;
        }
    </style>
</head>
<body>

    <div class="box1"></div>
    <!-- 
        像素:
            - 屏幕是由一个一个发光的小点构成,这一个个的小点就是像素
            - 分辨率:1920 x 1080 说的就是屏幕中小点的数量
            - 在前端开发中像素要分成两种情况讨论:CSS像素 和 物理像素
            - 物理像素,上述所说的小点点就属于物理像素
            - CSS像素,编写网页时,我们所用像素都是CSS像素
                - 浏览器在显示网页时,需要将CSS像素转换为物理像素然后再呈现
                - 一个css像素最终由几个物理像素显示,由浏览器决定:
                    默认情况下在pc端,一个css像素 = 一个物理像素

        视口(viewport)(即查看html的宽度)
            - 视口就是屏幕中用来显示网页的区域
            - 可以通过查看视口的大小,来观察CSS像素和物理像素的比值
            - 默认情况下:
                视口宽度 1920px(CSS像素)
                        1920px(物理像素)
                        - 此时,css像素和物理像素的比是 1:1

            - 放大两倍的情况(即把1个css像素放大成了2个css像素):
                视口宽度 960px(CSS像素)
                        1920px(物理像素)
                        - 此时,css像素和物理像素的比是1:2

            - 我们可以通过改变视口的大小,来改变CSS像素和物理像素的比值
     -->    
</body>
</html>

image-20200324160037506

5.移动端

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <!-- <meta name="viewport" content="width=device-width, initial-scale=1.0"> -->
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box1{
            width: 900px;
            height: 100px;
            background-color: #bfa;
        }
    </style>
</head>
<body>
    <!-- 
        在不通的屏幕,单位像素的大小是不同的,像素越小屏幕会越清晰
            24寸 1920x1080
            i6 4.7寸 750 x 1334

            智能手机的像素点 远远小于 计算机的像素点

            问题:一个宽度为900px的网页在iphone6中要如何显示呢?

           重点: 默认情况下,移动端的网页都会将视口设置为980像素(css像素)
                以确保pc端网页可以在移动端正常访问,但是如果网页的宽度超过了980,
                    移动端的浏览器会自动对网页缩放以完整显示网页

            https://material.io/resources/devices/

            所以基本大部分的pc端网站都可以在移动端中正常浏览,但是往往都不会有一个好的体验,
                为了解决这个问题,大部分网站都会专门为移动端设计网页
     -->

     <div class="box1"></div>
</body>
</html>

image-20200324160142422

6.移动端页面(完美视口)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <!--width=device-width, initial-scale=1.0这两句都是一样的意思,都写上是为了更好的适配-->
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">

    <!-- 重点:设置视口大小 device-width表示设备的宽度(完美视口),也可以自己指定宽-->
    <!-- <meta name="viewport" content="width=device-width"> -->
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .box1{
            width: 100px;
            height: 100px;
            background-color: red;

        }
    </style>
</head>
<body>
    <!-- 
        移动端默认的视口大小是980px(css像素),
            默认情况下,移动端的像素比就是  980/移动端宽度  (980/750)
            如果我们直接在网页中编写移动端代码,这样在980的视口下,像素比是非常不好,
                导致网页中的内容非常非常的小
            编写移动页面时,必须要确保有一个比较合理的像素比:
                1css像素 对应 2个物理像素
                1css像素 对应 3个物理像素

            - 可以通过meta标签来设置视口大小

            - 每一款移动设备设计时,都会有一个最佳的像素比,
                一般我们只需要将像素比设置为该值即可得到一个最佳效果
                将像素比设置为最佳像素比的视口大小我们称其为完美视口

                将网页的视口设置为完美视口
                <meta name="viewport" content="width=device-width, initial-scale=1.0">

                结论:以后再写移动端的页面,就把上边这个玩意先写上

     -->
    <div class="box1"></div>
</body>
</html>

image-20200324160238468

7.视口(vw单位)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .box1{
            width: 6.4vw;
            height: 4.667vw;
            background-color: #bfa;
        }
    </style>
</head>
<body>

    <!-- 
        不同的设备完美视口的大小是不一样的
            iphone6 -- 375
            iphone6plus -- 414

        由于不同设备视口和像素比不同,所以同样的375个像素在不同的设备下意义是不一样,
            比如在iphone6中 375就是全屏,而到了plus中375就会缺一块

        所以在移动端开发时,就不能再使用px来进行布局了

        vw 表示的是视口的宽度(viewport width)
            - 100vw = 一个视口的宽度
            - 1vw = 1%视口宽度

            vw这个单位永远相当于视口宽度进行计算

            设计图的宽度
                750px 1125px

            设计图 
                750px  

            使用vw作为单位
                100vw

            创建一个 48px x 35px 大小的元素

            100vw = 750px(设计图的像素)100/750 0.1333333333333333vw = 1px
            6.4vw = 48px(设计图像素)
            4.667vw = 35px
    -->
    <div class="box1">
    </div>
    
</body>
</html>

image-20200324160327987

8.vw适配

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }

        html{
            /* 
                网页中字体大小最小是12px,不能设置一个比12像素还小的字体
                    如果我们设置了一个小于12px的字体,则字体自动设置为12

                0.1333333vw = 1px

                5.3333vw = 40px
            */
            font-size: 5.3333vw;
        }

        .box1{
            /* 
                rem
                    - 1 rem = 1 html的字体大小
                    - 1 rem = 40 px(设计图)
            */
            width: 18.75rem;
            height: 0.875rem;
            background-color: #bfa;
        }
    </style>
</head>
<body>

    <!-- 
        48 x 35
     -->
     <div class="box1"></div>
    
</body>
</html>

image-20200324160447750

9.响应式布局

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        /*
         使用媒体查询 
            语法: @media 查询规则{}
                媒体类型:
                    all 所有设备
                    print 打印设备(只有打印机打印的时候才会显示)
                    screen 带屏幕的设备(有屏幕的设备)
                    speech 屏幕阅读器
                    - 可以使用,连接多个媒体类型,这样它们之间就是一个或的关系

                可以在媒体类型前添加一个only,表示只有。
                    only的使用主要是为了兼容一些老版本浏览器
                也可以加not,表示非,表示除了他们之外(具体查看文档)
         */

        /* @media print,screen{
            body{
                background-color: #bfa;
            }
        } */

        @media only screen {
            body{
                background-color: #bfa;
            }
        }
    </style>
</head>
<body>
    <!-- 
        响应式布局
            - 网页可以根据不通的设备或窗口大小呈现出不同的效果
            - 使用响应式布局,可以使一个网页适用于所有设备
            - 响应布局的关键就是 媒体查询
            - 通过媒体查询,可以为不通的设备,或设备不同状态来分别设置样式
     -->
    
</body>
</html>

image-20200324160536824

10.媒体查询

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        /*
             媒体特性:
                width 视口的宽度
                height 视口的高度

                min-width 视口的最小宽度(视口大于指定宽度时生效)
        min-width:500px;  大于500px的时候生效
                max-width 视口的最大宽度(视口小于指定宽度时生效)
        max-width:500px;  小于500px的时候生效
         */
         /*视口宽度是500px的时候就生效,大或小了都不显示,一般只写宽度,高度一般不考虑*/
         /* @media (max-width: 500px){
             body{
                background-color: #bfa;
             }
         } */

/* 
         样式切换的分界点,我们称其为断点,也就是网页的样式会在这个点时发生变化
         一般比较常用的断点

         小于768 超小屏幕 max-width=768px
         大于768 小屏幕   min-width=768px
         大于992 中型屏幕 min-width=992px
         大于1200 大屏幕  min-width=1200px
 @media only screen and (min-width: 500px),(max-width:700px)之间的,表示或的意思
        and表示且的意思
*/
         @media only screen and (min-width: 500px) and (max-width:700px){
             body{
                background-color: #bfa;
             }
         }
    </style>
</head>
<body>
    
</body>
</html>

源码获取

至此,我们的HTML5+CSS3的学习(五)就讲解完成了。下篇我们将介绍案例实战,源码素材可以通过关注我的微信公众号 我爱学习呀嘻嘻 ,回复关键字HTML5+CSS3源码素材进行获取哦。

HTML5+CSS3的学习(六):案例实战

HTML5+CSS3的学习(一):HTML、CSS、CSS选择器

HTML5+CSS3的学习(二):文本标签及样式

HTML5+CSS3的学习(三):CSS盒子模型

HTML5+CSS3的学习(四):背景、表格

image-20211108230322493

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值