Unit Five: 弹性盒子Flex(02)—像素&视口
1. 像素
-
屏幕是由一个一个发光点构成,一个发光点就是一个像素。
-
分辨率:1920*1080就是屏幕中发光点的数量。
-
CSS像素和物理像素
- 物理像素
- 屏幕发光点(分辨率)
- CSS像素
- 编写网页时给予的数值。
- 浏览器在现实网页时需要将CSS像素转换为物理像素,然后再呈现。
- 一个CSS像素最终由几个物理像素显示,由浏览器决定:
- 默认情况下,在pc端,一个CSS像素=一个物理像素。
- 物理像素
2. 视口(Viewport)
-
视口就是屏幕中用来显示网页的区域。
-
可以通过查看视口大小来观察CSS像素和物理像素的比例。
-
默认情况下:
-
视口宽度:
- CSS像素:1920px
- 物理像素:1920px
两者比例1:1
-
-
浏览器放大1倍:
-
视口宽度:
- CSS像素:960px
- 物理像素:1920px
两者比例1:2
-
-
浏览器缩小1倍
-
视口宽度:
- CSS像素:(1920*2)px
- 物理像素:1920px
两者比例2:1
-
3.手机像素
不同的屏幕,单位像素的大小不同,像素越小屏幕越清晰。
- 24寸屏幕 1920*1080
- iphone 6 750*1334
- 智能手机的像素点远远小于计算机像素点,所以手机显示较清晰。
默认情况下,移动端的网页都会将视口像素设置为980像素(CSS像素),以确保网页可以显示全貌。
但是网页宽度超过980,移动端的浏览器会自动对网页缩放以完整显示网页。
缺点:虽然可以正常显示,但浏览体验不好,需要专门开发移动端页面。
4.完美视口
通过<meta>
标签来设置视口大小。
-
每一款移动设备设计时,都会有一个最佳的像素比。
-
一般我们只需将像素比设置为该值即可得到一个最佳效果。
-
完美视口:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
5. vw单位
vw(viewport width)表示视口的宽度。
-
100vw = 一个视口的宽度
-
1vw = 1%视口宽度
-
设计图常见宽度
- 一倍图:375px
- 两倍图:750px
- 三倍图:1125px
-
px和vw换算
- 两倍图:750px(设计图)=100vw(网页端)
-
vw适配
-
rem
rem是CSS3新增的一个相对单位(root em,根em),这个单位引起了广泛关注。这个单位与em有什么区别呢?区别在于使用rem为元素设定字体大小时,仍然是相对大小,但相对的只是HTML根元素。这个单位可谓集相对大小和绝对大小的优点于一身,通过它既可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁反应。目前,除了IE8及更早版本外,所有浏览器均已支持rem。对于不支持它的浏览器,应对方法也很简单,就是多写一个绝对单位的声明。这些浏览器会忽略用rem设定的字体大小。
-
注意:网页中字体大小最小是12px,不能设置一个比12像素还小的字体。如果我们设置了一个小于12px的字体,则字体自动设置为12px。
-
解决方案
html{ /* 750px(设计图)=100vw(网页端) 1px = 0.13333vw 10px = 1.3333vw 100px = 13.333vw */ /* font-size:10px */ font-size: 1.333vw; -webkit-text-size-adjust:none } .box1{ /* width:48px; */ width: 4.8rem; /* height:35px; */ height:3.5rem; border: 1rem solid red; background-color: #bfa; }
-
less解决方案
/*设置移动端屏幕大小*/ @total-width:750; html{ /*计算出10px=多少vw(1.3333vw)*/ font-size: (100vw/@total-width)*10; } .content{ /*693px*/ width: 69.3rem; } .title{ display:flex; height:17.5rem; justify-content:space-between; align-items:content; }
-
6.手机端项目
-
HTML
<!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="./css/style.css"> <link rel="stylesheet" href="./fa/css/all.min.css"> </head> <body> <div class="content"> <header class="title"> <nav class="list"><a href="http://" target="_blank" rel="noopener noreferrer"><i class="fa fa-stream"></i></a></nav> <h1 class="banner"><a href="http://" target="_blank" rel="noopener noreferrer">I Learn</a></h1> <div class="search"><a href="http://" target="_blank" rel="noopener noreferrer"><i class="fa fa-search"></i></a></div> </header> <div class="pic"> <img src="./img/front.jpg" alt=""> </div> <div class="menu_btn"> <div class="courses"> <a href="http://" target="_blank" rel="noopener noreferrer"> <i class="fa fa-book-open"></i> My Courses </a> </div> <div class="star"> <a href="http://" target="_blank" rel="noopener noreferrer"><i class="fa fa-star"></i> Star Teacher </a> </div> <div class="subscription"> <a href="http://" target="_blank" rel="noopener noreferrer"> <i class="fa fa-bookmark"></i> Subscription </a> </div> <div class="download"> <a href="http://" target="_blank" rel="noopener noreferrer"> <i class="fa fa-download"></i> My Download </a> </div> </div> <div class="course_list"> <div class="course_title"> <div class="course_latest"> <div class="bar"></div> <span>Latest course</span> </div> <a href="http://" target="_blank" rel="noopener noreferrer">More +</a> </div> <div class="items_list"> <div class="items"> <div class="items_content"> <div class="items_pics"> <img src="./img/annebelle.jpg" alt=""> </div> <div class="photo_course">Photography course</div> <div class="person"> <div class="logo"> <img src="./img/anlogo.png" alt=""> </div> <div class="name">Annabelle</div> </div> </div> </div> <div class="items"> <div class="items_content"> <div class="items_pics"> <img src="./img/ham.png" alt=""> </div> <div class="photo_course">Photography course</div> <div class="person"> <div class="logo"> <img src="./img/hamlogo.png" alt=""> </div> <div class="name">Carl Hamiltion</div> </div> </div> </div> </div> </div> </div> </body> </html>
-
CSS
* { margin: 0px; padding: 0px; } html { font-size: 1.33333333vw; background-color: #eff0f4; text-decoration: none; font-style: normal; } .w, .title, .pic, .menu_btn, .course_list { width: 69.3rem; margin: 0 auto; } .title { display: flex; height: 17.5rem; justify-content: space-between; align-items: center; } a { text-decoration: none; font-style: normal; color: #24253d; font-size: 5rem; } a i { color: #999999; font-size: 4rem; } .pic { height: 27.7rem; overflow: hidden; border-radius: 1rem; } .pic img { transform: translateY(-50px); } .menu_btn { margin-top: 4rem; margin-bottom: 5rem; height: 24.5rem; display: flex; /*设置flex布局*/ justify-content: space-between; flex-wrap: wrap; align-content: space-between; } .menu_btn div { width: 32.7rem; height: 10.4rem; border-radius: 1rem; } .menu_btn div a { margin-left: 3rem; display: block; font-size: 2.8rem; line-height: 10.4rem; color: #ffffff; text-align: left; } .menu_btn div i { font-size: 3rem; color: #ffffff; margin-right: 3rem; } .menu_btn .courses { background-color: #f6755f; } .menu_btn .star { background-color: #d17afd; } .menu_btn .subscription { background-color: #fe457a; } .menu_btn .download { background-color: #1d92ff; } .course_list { height: 39rem; } .course_list .course_title { height: 6.8rem; display: flex; justify-content: space-between; align-items: center; } .course_list .course_title .course_latest { height: 2.8rem; } .course_list .course_title .course_latest .bar { width: 0.3rem; height: 100%; background-color: #3a84ff; display: inline-block; margin-right: 1.8rem; } .course_list .course_title .course_latest span { font-size: 3rem; } .course_list .course_title a { font-size: 2rem; color: #656565; } .course_list .items_list { display: flex; justify-content: space-between; flex-wrap: wrap; margin-top: 0.2rem; } .course_list .items_list .items { width: 32.9rem; height: 32rem; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.3); border-radius: 5px; } .course_list .items_list .items .items_content { margin: 2rem 2rem; } .course_list .items_list .items .items_pics { width: 28.4rem; height: 15.6rem; overflow: hidden; } .course_list .items_list .items .items_pics img { transform: translateX(-50px) translateY(-50px); } .course_list .items_list .items .photo_course { font-size: 1rem; margin: 2.4rem auto; } .course_list .items_list .items .person { display: flex; align-items: center; } .course_list .items_list .items .person .logo { width: 4.2rem; height: 4.2rem; border-radius: 4.2rem; margin-right: 1.8rem; overflow: hidden; } .course_list .items_list .items .person .logo img { transform: translateX(-15px) translateY(-20px); } .course_list .items_list .items .person .name { font-size: 1rem; line-height: 4.2rem; }