rem适配及媒体查询及大屏适配

时间:2024-03-22 12:19:12

1.rem和em的概念

rem(font size of the root element)是指相对于根元素的字体大小的单位。rem能等比例适配所有屏幕。

em(font size of the element)是指相对于父元素的字体大小的单位。

 

2.媒体查询结合rem适配不同屏幕页面:
html {
font-size : 20px;
}
@media only screen and (min-width: 401px){
html {
font-size: 25px !important;
}
}
@media only screen and (min-width: 428px){
html {
font-size: 26.75px !important;
}
}
@media only screen and (min-width: 481px){
html {
font-size: 30px !important;
}
}
@media only screen and (min-width: 569px){
html {
font-size: 35px !important;
}
}
@media only screen and (min-width: 641px){
html {
font-size: 40px !important;
}
}

3.不同分辨率下的媒体查询:
@media screen and(min-width: 320px)and(max-width: 359px){ 
html{ 
font-size: 12.8px; 


@media screen and(min-width: 360px)and(max-width: 374px){ 
html{ 
font-size: 14.4px; 


@media screen and(min-width: 375px)and(max-width: 385px){ 
html{ 
font-size: 15px; 


@media screen and(min-width: 386px)and(max-width: 392px) { 
html { 
font-size: 15.44px; 


@media screen and(min-width: 393px)and(max-width: 400px){ 
html{ 
font-size: 16px; 


@media screen and(min-width: 401px)and(max-width: 414px){ 
html{ 
font-size: 16.48px; 


@media screen and(min-width: 750px)and(max-width: 799px){ 
html{ 
font-size: 30.72px; 

4.示例代码:rem适配及媒体查询及大屏适配

 

5.vh与vw

body {

     height: 100vh;     

     width: 100vw; 

        }

vh:

vh就是当前屏幕可见高度的1%,也就是说

height:100vh == height:100%;

但是有个好处是当元素没有内容时候,设置height:100%该元素不会被撑开,

但是设置height:100vh,该元素会被撑开屏幕高度一致。

 

vw:

vw就是当前屏幕宽度的1%

补充一句,当设置width:100%,被设置元素的宽度是按照父元素的宽度来设置,

但是100vw是相对于屏幕可见宽度来设置的,所以会出现50vw 比50%大的情况

 

6.自适应

第一种:页面中的宽度都用百分比来做。

  • 页面中盒子的高度不能设固定高度。开始学DIV+CSS布局的时候我给每个盒子都设置了固定的宽和高,这样页面做起来非常快,只需要先把页面整体的布局结构搞定,再往里面丢内容就行了,但是后来发现这样的结构是错误的,调整浏览器的宽度里面的内容可能会冲破盒子。正确的思路是高度由内容去撑起来,不管你如何去缩小,内容都不会跑出盒子。

  • 百分比是按照父元素的宽度来计算的,包括margin 和padding的值,也是除以父元素的宽度,水平方向的单位都需要设置成百分比。

  • 然后字体的大小最好使用rem单位来设置,需要给根元素设置一个字体大小,比如html.body{font-size:10px},则1rem的大小为10px,方便在不同的屏幕尺寸来调整页面整体文本的大小。

  • 使用媒体查询来根据不同的屏幕尺寸来应用不同的样式

    @media only screen and (max-width: 500px) {

    body {

    background-color: lightblue;

    }

    }

     

    需要注意的是图片的宽度要设置成百分比,高度不需要设置,这样缩小屏幕时,图片自动的等比例缩小和放大。

第二种:页面所有的尺寸用rem单位来设置

需要给页面添加以下代码:

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">

2<meta name="format-dection" content="telephone=no"/>

3<script type="text/javascript">

!function(a){function b(){var b=a.document,c=b.documentElement,d=c.getBoundingClientRect().width;document.documentElement.style.fontSize=20*(d/360)+"px"}window.addEventListener("DOMContentLoaded",function(){b()},!1),window.addEventListener("resize",function(){b()}),b()}(window);

 </script>

第一行代码的作用是禁止让用户缩放页面。

然后给根元素设置字体大小为20px。html,body{font-size:20px},后面页面中所有的尺寸按照PSD上面量出来后除以40转换成rem单位的数值,注意是任何尺寸都要需要去除以40,这比第一种设置百分比按照父元素的宽度去计算方便很多。

  • 图片需要设置宽和高,PSD量出来后除以40,少一个都不行,只设置一个图片会被拉变形。

  • 做手机端页面时,清除margin和padding 用*可能清除不掉,需要加上标签名字去清除。

  • 其他的按照正常的去做。

  •  

7.适配大屏 

@media screen and (min-width: 4000px){

html,body {

font-size: 55px!important;

}

}

@media screen and (max-width: 4000px) and (min-width:2500px){

html,body {

font-size: 40px!important;      

}

}

@media screen and (max-width: 2500px){

html,body {

font-size: 20px!important;

}

}

 

css片段:(大屏常用百分比布局处理)

.mainNo5 .main5Up{

width: 100%;

height: 45%;

}

.mainNo5 .main5Down{

width: 100%;

height: 55%;

}

.main5Up .upTitle{

height: 56px;

width: 100%;

border-radius: 12px;

-webkit-border-radius: 12px;

-moz-border-radius: 12px;

background: rgba(37,19,171,0.87);

line-height: 56px;

font-size: 30px;

color:#fff;

padding-left: 15px;

}

.main5Down .personTabBox{

margin-left: 110px;

}

.main5Down .personTabBox span{

font-size: 30px;

color:rgb(0,145,255);

display: inline-block;

width: 150px;

height: 50px;

line-height: 50px;

text-align: center;

}

.main5Down .personTabBox span:hover{

cursor: pointer;

}

.main5Down .personTabBox span.active{

color:rgb(231,233,41);

}

.main5Down .down_chart{

margin-left: 60px;

width: calc(100% - 60px);

height: calc(100% - 50px);

position: relative;

}

.main5Down .down_chart .leftTop{

position: absolute;

left: 0;

top: 0;

width: 34.4px;

height: 37.6px;

background: url('../img/homepage/border2/5_03.png') no-repeat;

background-size: cover;

}

.main5Down .down_chart .rightTop{

position: absolute;

right: 0;

width: 98.4px;

height: 113.6px;

background: url('../img/homepage/border2/5_06.png') no-repeat;

background-size: cover;

}

.main5Down .down_chart .leftBottom{

position: absolute;

left: 0;

bottom: 25px;

width: 34.4px;

height: 37.6px;

background: url('../img/homepage/border2/5_03.png') no-repeat;

background-size: cover;

-moz-transform: scaleY(-1);

-webkit-transform: scaleY(-1);

-o-transform: scaleY(-1);

transform: scaleY(-1);

}

.main5Down .down_chart .rightBottom{

position: absolute;

right: 0;

bottom: 25px;

width: 98.4px;

height: 113.6px;

background: url('../img/homepage/border2/5_06.png') no-repeat;

background-size: cover;

-moz-transform: scaleY(-1);

-webkit-transform: scaleY(-1);

-o-transform: scaleY(-1);

transform: scaleY(-1);

}

.main5Down .down_chart .left_line{

position: absolute;

width: 34.4px;

top: 34.4px;

height: calc(100% - 68.8px);

background: url('../img/homepage/border2/5_08.png');

background-size: contain;

}

.main5Down .down_chart .top_line{

position: absolute;

left: 34.4px;

width: calc(100% - 132.8px);

height: 37.6px;

background: url('../img/homepage/border2/5_04.png');

background-size: contain;

}

.main5Down .down_chart .right_line{

position: absolute;

right: 0;

top: 113.6px;

width: 98.4px;

height: calc(100% - 227.2px);

background: url('../img/homepage/border2/5_11.png');

background-size: contain;

}

.main5Down .down_chart .bottom_line{

position: absolute;

left: 34.4px;

bottom: 25px;

width: calc(100% - 132.8px);

height: 37.6px;

background: url('../img/homepage/border2/5_04.png');

background-size: contain;

-moz-transform: scaleY(-1);

-webkit-transform: scaleY(-1);

-o-transform: scaleY(-1);

transform: scaleY(-1);

}

.main5Down .down_chart .center{

position: absolute;

top: 37.6px;

left: 34.4px;

width: calc(100% - 132.8px);

height: calc(100% - 98px);

background: url('../img/homepage/border2/12_03.png');

background-size: contain;

}

.main5Down .down_chart .pic{

position: absolute;

width: 120px;

height: 120px;

top: -60px;

left: -60px;

background: url('../img/homepage/theme_grid/right00.png');

background-size: contain;

}

.main5Down .tableBox{

width: 100%;

height: 100%;

}

.main5Down .table{

position: absolute;

top: 37.6px;

left: 34.4px;

width: calc(100% - 132.8px);

height: calc(100% - 98px);

z-index: 999;

}