`
endual
  • 浏览: 3558626 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

适配不同分辨率屏幕

 
阅读更多

如今的屏幕分辨率,小至320px(iPhone),大到2560px甚至更高(大显示器),变化范围极大。除了使用传统的台式机,用户会越来越多的通过手机、上网本、iPad一类的平板设备来浏览页面。这种情况下,固定宽度的设计方案将会显得越发不合理。页面需要有更好的适应性,其布局结构要做到根据不同的设备及屏幕分辨率进行响应调整。接下来,我们将了解一下怎样通过HTML5和CSS3 Media Queries(媒介查询)相关技术来实现跨设备跨浏览器的响应式Web设计方案。

范例效果预览

首先,我们来看看本篇范例的最终效果演示。打开该页面,拖拽浏览器边框,将窗口慢慢缩小,同时观察页面结构及元素布局是怎样基于宽度变化而自动响应调整的。

html5-css3-responsive-web-design-final-demo

更多范例

我(原文作者)使用media query的方式设计了一些WordPress模板,比如TisaEleminSucoiTheme2FunkiMinblrWumblr等。

概述

我们将范例页面的父级容器宽度设置为固定的980px,对于桌面浏览环境,该宽度适用于任何宽于1024像素的分辨率。我们通过media query来监测那些宽度小于980px的设备分辨率,并将页面的宽度设置由"固定"方式改为"液态",布局元素的宽度随着浏览器窗口的尺寸变化进行调整。当可视部分的宽度进一步减小到650px以下时,主要内容部分的容器宽度会增大至全屏,而侧边栏将被置于主内容部分的下方,整个页面变为单栏布局。

html5-css3-responsive-web-design-design-overview

HTML代码

我们将把注意力集中在页面的主要布局方面,并使用HTML5标签来更加语义化的实现这些结构,包括页头、主要内容部分、侧边栏和页脚:

<div id="pagewrap">
<header id="header">
<hgroup>
<h1 id="site-logo">Demo</h1>
<h2 id="site-description">Site Description</h2>
</hgroup>
<nav>
<ul id="main-nav">
<li><a href="#">Home</a></li>
</ul>
</nav>
<form id="searchform">
<input type="search">
</form>
</header>
<div id="content">
<article class="post"> blog post </article>
</div>
<aside id="sidebar">
<section class="widget"> widget </section>
</aside>
<footer id="footer"> footer </footer>
</div>

HTML5.js

IE是永恒的话题;对于我们使用的HTML5标签,IE9之前的版本无法提供支持。目前的最佳解决方案仍是通过html5.js来帮助这些旧版本的IE浏览器创建HTML5元素节点。在我们的页面HTML代码中调用该JS文件:

<!--[if lt IE 9]>
    <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->

CSS

HTML5块级元素样式

首先仍是浏览器兼容问题。虽然我们已经可以在低版本的IE中创建HTML5元素节点,但还是需要在样式方面做些工作,将这些"新"元素声明为块级:

article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {     display: block; }

主要结构的CSS

忽略细节,我们仍是将注意力集中在大问题上。正如在前文"概述"中提到的,默认情况下页面容器的固定宽度为980像素,页头部分(header)的固定高度为160像素;主要内容部分(content)的宽度为600像素,左浮动;侧边栏(sidebar)右浮动,宽度为280像素。

#pagewrap {
    width: 980px;
    margin: 0 auto;
}
 
#header {
    height: 160px;
}
 
#content {
    width: 600px;
    float: left;
}
 
#sidebar {
    width: 280px;
    float: right;
}
 
#footer {
    clear: both;
}

截至目前的效果演示

目前我们只是初步完成了页面结构的HTML和默认结构样式,当然,并不包括那些与话题无关的细节实现问题。正如可以在目前的演示中看到的,由于还没有做任何media query方面的工作,页面还不能随着浏览器尺寸的变化而改变布局。

CSS3 Media Query

终于开始说正事儿了。首先我们需要在页面中调用css3-mediaqueries.js文件,来帮助IE8或是之前的版本支持CSS3 media queries:

<!--[if lt IE 9]>
    <script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>
<![endif]-->

接下来,我们要创建CSS样式表,并在页面中调用:

<link href="media-queries.css" rel="stylesheet" type="text/css">

当浏览器可视部分宽度大于650px小于980px时(液态布局)

将pagewrap的宽度设置为95%

将content的宽度设置为60%

将sidebar的宽度设置为30%

@media screen and (max-width: 980px) {
 
    #pagewrap {
        width: 95%;
    }
 
    #content {
        width: 60%;
        padding: 3% 4%;
    }
 
    #sidebar {
        width: 30%;
    }
    #sidebar .widget {
        padding: 8% 7%;
        margin-bottom: 10px;
    }
 
}

当浏览器可视部分宽度小于650px时(单栏布局)

将header的高度设置为auto

将searchform绝对定位在top 5px的位置

将main-nav、site-logo、site-description的定位设置为static

将content的宽度设置为auto(主要内容部分的宽度将扩展至满屏),并取消float设置

将sidebar的宽度设置为100%,并取消float设置

@media screen and (max-width: 650px) {
 
    #header {
        height: auto;
    }
 
    #searchform {
        position: absolute;
        top: 5px;
        right: 0;
    }
 
    #main-nav {
        position: static;
    }
 
    #site-logo {
        margin: 15px 100px 5px 0;
        position: static;
    }
 
    #site-description {
        margin: 0 0 15px;
        position: static;
    }
 
    #content {
        width: auto;
        float: none;
        margin: 20px 0;
    }
 
    #sidebar {
        width: 100%;
        float: none;
        margin: 0;
    }
 
}

当浏览器可视部分宽度小于480px时

480px也就是iPhone横屏时的宽度。当可视部分的宽度小于该数值时,我们需要做以下调整:

禁用html节点的字号自动调整。默认情况下,iPhone会将过小的字号放大,我们可以通过-webkit-text-size-adjust属性进行调整。

将main-nav中的字号设置为90%

@media screen and (max-width: 480px) {
 
    html {
        -webkit-text-size-adjust: none;
    }
 
    #main-nav a {
        font-size: 90%;
        padding: 10px 8px;
    }
 
}

弹性图片

我们需要为图片设置max-width:100%和height:auto,来实现其弹性化。对于IE,仍然需要一点额外的工作:

img {
    max-width: 100%;
    height: auto;
    width: auto\9; /* ie8 */
}

弹性内嵌视频

同样的,对于视频,我们也需要做max-width: 100%的设置;但是Safari对embed的该属性支持不是很给力,所以我们以width: 100%来代替:

.video embed,
.video object,
.video iframe {
    width: 100%;
    height: auto;
}

iPhone中的初始化缩放

默认情况下,iPhone中的Safari浏览器会对页面进行自动缩放,以适应屏幕尺寸。我们可以使用以下的meta设置,将设备的默认宽度作为页面在Safari的可视部分宽度,并禁止初始化缩放。

<meta name="viewport" content="width=device-width; initial-scale=1.0">

最终效果演示

该范例的最终演示正像我们在本文开始时看到的那样;另外记得,在条件允许的情况下,使用各种典型移动设备(iPhone、iPad、Android、Blackberry等)来检验页面的移动版本。

html5-css3-responsive-web-design-final-demo

要点总结

Media Query JavaScript

对于那些尚不支持media query的浏览器,我们要在页面中调用css3-mediaqueries.js

<!--[if lt IE 9]>
    <script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>
<![endif]-->

CSS Media Queries

实现自适应页面设计的关键之一,就是使用CSS根据分辨率宽度的变化来调整页面布局结构。

@media screen and (max-width: 560px) {
 
    #content {
        width: auto;
        float: none;
    }
 
    #sidebar {
        width: 100%;
        float: none;
    }
 
}

弹性图片

通过max-width:100%和height:auto实现图片的弹性化。

img {
    max-width: 100%;
    height: auto;
    width: auto\9; /* ie8 */
}

弹性内嵌元素(视频)

通过width:100%和height:auto实现内嵌元素的弹性化。

.video embed,
.video object,
.video iframe {
    width: 100%;
    height: auto;
}

字号自动调整的问题

通过-webkit-text-size-adjust:none禁用iPhone中Safari的字号自动调整

html {
    -webkit-text-size-adjust: none;
}

页面宽度缩放的问题

<meta name="viewport" content="width=device-width; initial-scale=1.0">
分享到:
评论

相关推荐

    vue项目PC端适配不同分辨率屏幕

    以下是一些关于如何实现“Vue项目PC端适配不同分辨率屏幕”的详细知识点: 1. **响应式设计基础**:响应式设计是确保网站在不同设备上都能正常显示的关键。通过媒体查询(Media Queries)和流式布局(Fluid Grids)...

    js实现适配不同的屏幕大小

    适配不同的屏幕大小,也被称为响应式设计,是前端开发中的一项核心技能。本文着重介绍了如何使用JavaScript(简称js)来实现这一目标,从而确保网页内容在不同设备上展现得恰到好处。 首先,我们需要了解什么是适配...

    如何让网页适应不同分辨率

    由于每个电脑的分辨率都不同,开发人员需要找到一种方法来让网站适应不同分辨率,以确保网站在不同的屏幕分辨率下都可以正确地显示。 解决思路: 在不同的分辨率下看到的网页版面格式有很大差别,甚至有可能错位。...

    android自动生成不同的dimens适配不同分辨率下载文件.zip

    在Android开发中,屏幕适配是一项重要的任务,尤其在当今多设备、多分辨率的时代。"android自动生成不同的dimens适配不同分辨率下载文件.zip" 提供了一种解决方案,即使用AutoLayout.jar工具来自动化处理这个问题。...

    Android多分辨率适配

    为了实现多分辨率适配,开发者需要为不同屏幕尺寸和密度创建相应的资源文件夹。例如,将图片、布局文件等放在res/drawable-mdpi、res/drawable-hdpi、res/layout-small等目录下。Android系统会自动选择最合适的资源...

    不同屏幕分辨率适配的varlues包

    "不同屏幕分辨率适配的values包"提供了专门针对不同屏幕尺寸和密度的资源文件,以实现更好的用户体验。下面我们将深入探讨这个主题。 首先,Android系统使用`values`目录来存储各种维度的资源,如字符串、颜色、...

    简单的listview弹性效果,适配不同分辨率手机。

    对于适配不同分辨率的手机,开发者需要考虑以下几点: 1. **尺寸单位**:避免使用绝对像素值,转而使用dp(密度无关像素)作为尺寸单位,这样可以在不同屏幕密度的设备上保持一致的比例。 2. **布局权重**:在...

    labview自适应屏幕分辨率

    在现代多显示器和不同分辨率的环境中,让LabVIEW程序自适应屏幕分辨率是提升用户体验的关键。本篇文章将深入探讨如何在LabVIEW中实现窗口的自适应功能,确保程序在各种屏幕尺寸下都能良好地显示。 首先,我们需要...

    unity游戏分辨率屏幕自适应插件.zip

    通过"Unity游戏分辨率屏幕自适应插件",开发者可以专注于游戏内容的创作,而不必过于担忧屏幕适配问题,大大提高了开发效率。同时,良好的屏幕自适应能力也能提升玩家的游戏体验,增加用户满意度。

    android分辨率适配,xml自动生成工具

    在Android开发过程中,屏幕适配是一项重要的工作,尤其在面对全球不同设备的多样化屏幕尺寸时。本工具,名为“android屏幕分辨率适配,静态xml制作工具”,专门解决这一问题,帮助开发者快速、有效地生成适用于各种...

    不同屏幕分辨率适配的values包.zip

    在安卓应用开发中,屏幕适配是一个至关重要的环节,因为Android设备有着各种不同的屏幕尺寸和分辨率,从手机到平板,甚至是智能电视。本资源“不同屏幕分辨率适配的values包.zip”提供了一套针对不同屏幕分辨率的XML...

    电信设备-适配不同分辨率移动终端的应用程序界面绘制方法.zip

    在移动设备领域,适配不同分辨率的屏幕是应用程序开发中的一个重要环节。随着智能手机和平板电脑种类的多样化,设备的屏幕尺寸和分辨率差异显著,开发者需要确保应用在各种设备上都能提供一致且良好的用户体验。...

    labview-自适应屏幕分辨率.zip_LABVIEW分辨率_labview_too8hy_屏幕分辨率_自适应屏幕

    屏幕自适应。调用这个VI的上层VI在调整好界面后,一定要将前面板的最小尺寸设置为当前前面板大小。

    Android-Android屏幕适配方案自动生成不同分辨率的值

    在Android应用开发中,屏幕适配是一个至关重要的环节,因为Android设备有着各种不同的屏幕尺寸和分辨率。本篇文章将深入探讨“Android-Android屏幕适配方案自动生成不同分辨率的值”这一主题,帮助开发者构建能够在...

    delphi不同分辨率

    在开发 Delphi 应用程序时,处理不同分辨率的问题是一项重要的任务。随着现代显示器多样化,开发者需要确保他们的应用程序能够在各种屏幕尺寸和分辨率下正常运行。本文将深入探讨 Delphi 中如何处理不同分辨率的问题...

    labview 自适应屏幕分辨率程序

    在“labview 自适应屏幕分辨率程序”这个主题中,我们主要关注的是如何使LabVIEW应用程序在不同分辨率的屏幕上正常显示并保持良好的用户体验。 1. **屏幕分辨率理解**: - 屏幕分辨率是指屏幕上像素点的数量,通常...

    电信设备-一种适配不同分辨率的移动终端的图片显示方法及装置.zip

    由于各种品牌和型号的移动终端存在不同的屏幕分辨率,这给应用开发者带来了挑战,尤其是在处理图片显示方面。"电信设备-一种适配不同分辨率的移动终端的图片显示方法及装置"的主题恰好解决了这一问题。下面我们将...

    vb界面自适应不同分辨率终极解决方案

    VB 界面自适应不同分辨率终极解决方案 本文将详细介绍一种VB 界面自适应不同分辨率的解决方案,通过该方案可以使VB 界面在不同分辨率的显示器上自动适应调整大小,解决了界面缩放问题。 解决方案的基本思想是在VB ...

    使用CSS3-Media-Query技术适配Android平板屏幕分辨率和屏幕密度.docx

    使用CSS3 Media Query技术适配Android平板屏幕分辨率和屏幕密度 在移动应用开发中,适配各种Android平板设备的分辨率和屏幕密度是一个棘手的问题。使用CSS3 Media Query技术可以轻松解决这个问题。Media Query是一...

    LabVIEW自适应屏幕分辨率.rar

    这个“LabVIEW自适应屏幕分辨率.rar”压缩包很可能包含了一系列关于如何使LabVIEW应用程序在不同分辨率的显示器上正常显示的教程、示例代码或指南。在现代多显示器环境下,确保程序界面在各种屏幕尺寸下都能清晰、...

Global site tag (gtag.js) - Google Analytics