首页 > 代码库 > 检测屏幕宽度,更换样式表

检测屏幕宽度,更换样式表

一、通过js检测屏幕宽度,更换样式表

1、javascript更改页面样式表的方法

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>javascript更改页面样式表的方法</title>
<link id="mylink" rel="stylesheet" href="1.css" type="text/css" /> 
<script type="text/javascript">
    window.onload=function(){
        var mybut = document.getElementById("changecss");
        var mylink = document.getElementById("mylink");
        mybut.onclick=function(){            //在按钮上绑定点击事件,当点击按钮的时候link的href的值改变,即可实现更换样式表(换肤效果也是这样的原理)
                mylink.href="2.css";
        };
    };
</script>
</head>

<body>
     <input id="changecss" type="button" value="点击我更改样式表" />
</body>
</html>

 

 

 

2、javascript得到页面的宽度(document.documentElement.clientWidth;(IE6兼容的写法 ))

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>javascript检测浏览器宽度</title>
</head>

<body>
    <h1 id="shuchu"></h1>
    <script type="text/javascript">
        window.onresize=function(){                //onresize表示当浏览器页面被改变时(即调整尺寸的时候)触发该事件
            document.getElementById("shuchu").innerHTML = 
            document.documentElement.clientWidth;
        }
        
    </script>
</body>
</html>

 

 

3、js检测宽度更换样式表

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>javascript检测浏览器宽度</title>
<link id="mylink" rel="stylesheet" type="text/css" href="1.css" />
<script type="text/javascript">
    //更换样式表,需要在页面加载的时候执行一次
    //在浏览器尺寸变化的时候,也要执行
    
        gaibian();//一加载,就执行一次gaibian函数,这样就能保证页面默认情况就显示合理的样式表(否则当屏幕一开始小于600时,一加载页面显示的是默认的样式,要刷新一次才能跟换到合理的样式)
        
        window.onresize=gaibian;
        
        function gaibian(){
            var kuandu = document.documentElement.clientWidth;//获取浏览器的宽度
            
            var mylink = document.getElementById("mylink");
            //得到宽度之后就可以通过判断浏览器的宽度来加载哪个样式表了
            if(kuandu>600){
                mylink.href="1.css"
            }else{
                mylink.href="2.css"
            }
        }
</script>
</head>

<body>
</body>
</html>

 

 

 

二、视口

当我们试图在iPhone中输出屏幕宽度的时候,会发现屏幕宽度是980,居然和pc屏幕宽度差不多大

苹果主导的这些手机厂商,为了使用户获得完整的WEB体验,很多设备都会欺骗浏览器返回一个数值较大的视口,告诉浏览器,别以为我身子小,但是我想以980px宽度显示这个页面(分辨率和视口没有关系(开发中根据视口来算的))

 

视口对于我们实现响应式是很不方便的。980太大了,不符合我们心中的期待,我们心中认为手机屏幕尺寸应该在320到400之间    

解决这个问题只要约束视口即可:

<meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0,user-scalable=no" name="viewport" id="viewport" />

 

一个id和name为 viewport的meta元标记,就表示现在要约束视口了。

那么具体约束的规则写在content中,每个约束规则用逗号隔开:

  width=device-width    命令视口的宽度,变为设备的宽(以1024*768屏幕为标准 iPhone等手机通常为320到380之间)

  initial-scale=1.0      命令视口默认的缩放等级为1

  minimum-scale=1.0    命令视口最小缩放等级为1

  maximum-scale=1.0    命令视口最大缩放等级为1

  user-scalable=no      不允许用户缩放页面

 

所有的手机响应式网站,都要加上meta viewport视口约束标记

 

 

 

 三、CSS3中媒体查询来更换样式表

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0,user-scalable=no" name="viewport" id="viewport" />
<title>媒体查询</title>
<link id="mylink" rel="stylesheet" type="text/css" href="1.css" media="(min-width:600px)"/>
<link id="mylink" rel="stylesheet" type="text/css" href="2.css" media="(max-width:599px)"/>
</head>

<body>
</body>
</html>

 

查看效果,在没写一句js代码的情况下,也能根据宽度来更换样式表了,这是因为上面代码在link标签中使用了CSS3媒体查询 meadia属性就是媒体查询的属性

min-width:600px;   表示宽度大于等于600px的时候用这个样式表
max-width:599px;   表示宽度小于等于599px的时候用这个样式表
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0,user-scalable=no" name="viewport" id="viewport" />
<title>媒体查询</title>
<link id="mylink" rel="stylesheet" type="text/css" href="1.css" media="(min-width:800px)"/>
<link id="mylink" rel="stylesheet" type="text/css" href="2.css" media="(max-width:799px) and (min-width:600px)"/>
<link id="mylink" rel="stylesheet" type="text/css" href="3.css" media="(max-width:599px)"/>
</head>

<body>
</body>
</html>
max-width:799px) and (min-width:600px);   表示宽度小于等于799px到600px大于等于之间使用这个样式表

媒体查询IE9才开始支持的以下的不支持,javascript检测宽度更换样式表,是IE6也兼容的 

 

 

媒体查询是CSS3中新的特性。还可以用在内嵌式

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0,user-scalable=no" name="viewport" id="viewport" />
<title>媒体查询</title>
<link id="mylink" rel="stylesheet" type="text/css" href="1.css" media="(min-width:800px)"/>
<link id="mylink" rel="stylesheet" type="text/css" href="2.css" media="(max-width:799px) and (min-width:600px)"/>
<link id="mylink" rel="stylesheet" type="text/css" href="3.css" media="(max-width:599px)"/>

<style type="text/css">
····/*当页面宽度大于等于800的时候就用该样式修饰div*/
    @media(min-width:800px){
        div{ width:200px; height:200px; background:red;}    
    }
    /*当页面宽度小于等于799的时候就用该样式修饰div*/
    @media(max-width:799px){
        div{ width:100px; height:400px; background:blue;}    
    }
</style>
</head>

<body>
    <div></div>
</body>
</html>