65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 HTML 和 CSS 调整网站以适应所有分辨率

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.79/5 (14投票s)

2014 年 4 月 20 日

CPOL

8分钟阅读

viewsIcon

654408

如何调整您的网站以适应所有分辨率。

引言

您可能想知道,有些网站足够灵活,可以适应任何屏幕分辨率。这种能力可以通过多种方式实现,例如使用 JavaScript、CSS、HTML 等网络技术。

背景

我今天要写的文章主要侧重于特定文章内容。可能有些地方我考虑得不多,因为它们是 HTML 和 CSS 的基础。

使用代码

一些 Web 开发人员在使他们的网站能够适应屏幕分辨率方面有些挣扎。为了提供独特的用户体验,这一点至关重要。随着技术的发展,用户越来越多地使用不同的设备来浏览互联网。因此,网站需要适应所有分辨率非常重要。

最简单的方法之一是使用百分比宽度来构建网站。

.WebContainer{
    width: 100%;
    height: auto;
}
.articles{
    width:90%; /*Takes 90% width from WebContainer*/
    height: auto;
    margin: auto;
} 

但这种方法效果不佳。如果用户从移动设备加载网站。它会从屏幕的 100% 获取宽度,这是一个非常小的空间。

另一种方法是给出最小宽度(以百分比表示)。

.WebContainer{
    width:100%;
    min-width:1000px;
    height:auto;
}

在上述情况下,网站只会将其网站宽度减小到 1000px。

因此,让我们看看使用 HTML 和 CSS 中一些出色的功能来使网站屏幕尺寸可调的有效方法。

让我们看看我们将要做什么。在这种情况下,我将通过不同的设备(iPhone 5、Galaxy S4、Windows Phone 920 和 iTab 2)来演示。我还从 Chrome、FireFox 和 IE 两个浏览器中进行了测试,但在 IE 中媒体查询不起作用。我找到了一个解决方案,但它不起作用。

实际上,我将使用的技术可以以多种方式使用,我已经完成了符合我场景的演示编码。您的开发可能会有所不同。但我的最终目标是展示如何使用它。

这是全屏浏览器大小。

浏览器缩小,广告区域被隐藏。

浏览器进一步缩小。

Firefox

浏览器进一步缩小,使图像和描述对齐。

上述网站的设计布局是

需要做什么;

首先,让我们看看 HTML

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Test CSS3 HTML5</title>

    <!--[if IE]>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>

    <link href="IEStyleSheet.css" rel="stylesheet" />
    <![endif]-->

    <!--[if !IE]> -->
        <link href="StyleSheet.css" rel="stylesheet" type="text/css" media="only screen" />
        <link href="MobileStyleSheet.css" rel="stylesheet" type="text/css" media="only screen and (max-device-width: 480px) , only screen and (-webkit-min-device-pixel-ratio: 2) , screen and (-webkit-device-pixel-ratio:1.5)" />
        <!-- <![endif]-->

    <!--[if IEMobile]> 
        <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
        <script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>

        <link href="MobileStyleSheet.css" rel="stylesheet" />
    <![endif]-->

</head>
<body>
        <div class="Container">
            <header>
                <span>Adjustable WebSite Example using HTML5 CSS3 </span>
            </header>
            <nav>
            </nav>
            <div class="content">
                <section class="main_articles">
                    <article class="siteDescription">
                        <div class="desImage">
                            <img src="Images/css_image.jpg" />
                        </div>
                        <div class="des">
                            New web development technologies.
                        </div>
                    </article>
                </section>

                <aside class="side_article">
                    <div class="ads">
                        This is a Advertisement.
                    </div>

                    <div class="ads">
                        This is a Advertisement.
                    </div>
                </aside>
            </div>
            <footer>
            </footer>
        </div>

</body>
</html>

对于上面的 HTML 标记,我主要使用了语义 HTML。如 Header、Footer、Aside、Section 标签。这些标签允许您为浏览器定义更好的含义,从而提高搜索引擎的可读性。

在第一行,我定义了告诉或指示 Web 浏览器页面是用什么 HTML 版本编写的标签。<!DOCTYPE html> 表示 HTML 5。

然后我声明了一个属性,它指定了文档的 XML 命名空间。

然后我使用了条件注释,如果浏览器是 Internet Explorer,则使用指定的脚本来定义 HTML 5 标签,因为一些旧的 IE 浏览器无法识别 HTML5 标签。我还导入了 css3-mediaqueries.js 脚本,因为 IE 8 或更高版本不支持媒体查询。

然后我使用了另一个条件注释,如果浏览器不是 IE。在此语句中,我首先检查浏览设备是否为计算机(media="only screen"),如果是,我将导入特定于计算机屏幕的样式,以适应屏幕分辨率。然后第二部分,我检查浏览设备是否为移动设备(media="only screen and (max-device-width: 480px) , only screen and (-webkit-min-device-pixel-ratio: 2) , screen and (-webkit-device-pixel-ratio:1.5)")。在这里,我使用了许多媒体条件,

首先是 iPhones screen and (max-device-width: 480px),接下来是 Android 设备 screen and (-webkit-min-device-pixel-ratio: 2),接下来是带有视网膜显示的 iPhones screen and (-webkit-device-pixel-ratio:1.5)

然后我再次为 IEMobile 浏览器使用另一个条件注释。

但这里我需要说的是。使媒体查询与 IE 8 或更高版本兼容的 css3-mediaqueries.js 脚本不起作用。在一个论坛上,我看到有人在等待脚本的新版本。

其余标签相当正常;在这里,我将所有元素包装在 Container div 标签中。然后是包含网站标题的 Header 标签,接下来是包含导航链接的 Nav 标签;我将其留空,因为我没有进行任何页面导航。

然后我声明了一个 div 来包装网页的所有内容。我声明这个是为了与 Header 标签和 Footer 标签进行清晰的分隔。

Content div 包含两个主要元素,一个是 <section> 标签,另一个是 <aside> 标签。<section> 标签定义网页中的部分,<aside> 标签定义主要内容之外的内容。这里我使用 <section> 标签来包含所有页面内容,例如帖子、描述,以及 <article> 标签来容纳广告。

<section> 标签内,我声明了一个 <article>,它定义了独立、自包含的内容。在 <article> 标签中,有两个元素用于放置图像和一些文本。

那么魔法在哪里发生呢?都在 CSS 中。这里我不会对基本的 CSS 属性做任何解释,但我会更专注于教程特定的属性。

首先,让我们设置网页的布局。

body, html {
    margin: 0px;
    padding: 0px;
    background-color: #ededed;
    font-family: 'Trebuchet MS';
}

.Container {
    width: 90%;
    min-width: 500px;
    margin: auto;
}

header {
    width: 100%;
    height: 120px;
    line-height: 120px;
    background-color: #313131;
}

    header span {
        color: #fff;
        font-size: 30px;
        padding-left: 20px;
    }

nav {
    width: 100%;
    height: 40px;
    background-color: #ff6a00;
}

.content {
    width: 100%;
    height: 700px;
    padding: 10px 0px;
    background-color: #fff;
}

footer {
    width: 100%;
    height: 80px;
    background-color: #808080;
    margin-bottom: 20px;
}

.main_articles {
    width: 70%;
    float: left;
    height: 650px;
    margin-left: 10px;
}

.side_article {
    width: 25%;
    float: right;
    height: 600px;
    border-left: 1px dotted #6d6d6d;
}

.siteDescription {
    display: -moz-box; /* Firefox*/
    display: -webkit-box; /* Chrome */
    display: -ms-flexbox; /* IE 10 */
    display: flexbox;
    flex-direction: row;
    flex-align:start;
    width: 95%;
    height: 150px;
}

.desImage {
    -webkit-box-ordinal-group: 1; /* iOS 6-, Safari, Opera*/
    -moz-box-ordinal-group: 1; /* Firefox*/
    -ms-flex-order: 1; /* IE 10 */
    -webkit-order: 1; /* Chrome */
    flex-order: 1;
    width: 200px;
    height: 150px;
}

    .desImage img {
        width: 200px;
        height: 150px;
        margin-left: 5px;
        border: 2px solid #6d6d6d;
    }

.des {
    margin-left: 15px;
    -webkit-box-ordinal-group: 2; /* iOS 6-, Safari, Opera*/
    -moz-box-ordinal-group: 2; /* Firefox*/
    -ms-flex-order: 2; /* IE 10 */
    -webkit-order: 2; /* Chrome */
    flex-order: 2;
    width: 70%;
    height: 140px;
    background-color: #e9e9e9;
    padding: 5px;
}

.ads {
    width: 90%;
    margin: auto;
    margin-top: 10px;
    height: 150px;
    text-align: center;
    padding-top: 10px;
    background-color: #e5eff3;
}

首先,我删除了浏览器默认的页面边距和内边距。并设置了背景颜色和字体。

然后我为主包装器设置了宽度;我用来包装所有页面元素的 div。正如我在教程开头所讨论的,使用百分比作为宽度总是一个好主意,因为网页对于它工作的任何分辨率都更灵活。在这种情况下,网页容器总是占用浏览器宽度的 90%。通过设置 margin auto,它会将元素居中显示在网页中。

接下来,我设置了 header 元素的宽度为 100%;现在这里你需要确保它不是从浏览器获取 100%,而是从 Container div 获取 100% 的宽度。我还设置了高度为 120px。

Footer、Nav 和 Content 的外观与 header 相同。

现在来一个有点棘手的地方。如何让 main_articles <section> 标签显示在左侧,而 side_articles <aside> 标签显示在右侧。嗯,你可以使用表格来实现,毫不费力。但说实话,使用表格进行页面布局对齐有点过时且难以维护。使用 <div><section> 总是更好、更安全。

对于 main_articles section,我设置了相对于 Content div 宽度的 70% 宽度,然后我让 section 向左浮动,对于 side_article,我声明了相对于 content 宽度的 25% 宽度,使其向右浮动。

使用 float 来调整元素也正在过时,那么有什么新方法呢?

使用 flexbox 是新的趋势。它提高了可维护性。首先,让我们看看我们用来显示文章描述和图像的布局。

让我们开始吧,首先,我们需要将包装的 <article> 标签(siteDescription)设置为 flexbox。为此,我设置了 display: flexbox。然后我设置了 flex-direction: row

  • row(默认):从左到右
  • row-reverse:从右到左
  • column:将 flex 项目从上到下对齐
  • column-reverse:将 flex 项目从下到上对齐

然后我通过设置它们的 flexbox-order 来设置 desImage <div> 和 des <div> 为 flexbox 项目。最后,我为 Advertisement <div> 设置了样式,其宽度为 <aside> 宽度的 90%。

好的,我们已经完成了初始布局。

让我们施展魔法;魔法都在 CSS @media 查询中。通过使用 @media 查询,我们可以为屏幕、打印、手机、平板电脑等设置不同的布局。

有很多媒体类型。

  • all - 用于所有媒体类型的设备
  • aural - 用于语音和声音合成器
  • braille - 用于盲文触觉反馈设备
  • embossed - 用于分页盲文打印机
  • handheld - 用于小型或手持设备
  • print - 用于打印机
  • projection - 用于投影演示,如幻灯片
  • screen - 用于计算机屏幕
  • tty - 用于使用固定间距字符网格的媒体,如电传打字机和终端
  • tv - 用于电视类设备

您可以在 w3schools 链接中了解更多关于 @media 查询的信息:关于媒体查询

当屏幕宽度达到 900px 时,让我们做一些修改;

@media all and (max-width: 900px) {
    .side_article { /* Hide advertisement panel*/
        display: none;
        visibility: hidden;
    }

    .siteDescription {
        width: 100%; /* Earlier 70%*/
    }

    .main_articles {
        width: 90%;/* Earlier 95%*/
    }
}

当屏幕宽度达到 900px 时,我隐藏了 <aside> 广告部分。之后,我将 main_articles <section> 元素的宽度设置为 90% 以填满空间,并将 siteDecription <article> 元素的宽度设置为 100% 以填满 <article> 元素内的空间。

然后,我想在屏幕宽度达到 700px 时进行一些空间修改,实际上这并不重要,但在我的场景中看起来更整洁。

@media all and (max-width: 700px) {

    header {
        height: 90px; * Earlier 120px*/
        line-height: 90px; * Earlier 120px*/
    }

        header span {
            font-size: 20px; /* Earlier 30px*/
        }

    .des {
        width: 50%; /* Earlier 70%*/
        background-color: #e9e9e9;
    }
}

在这里,我将屏幕宽度达到 700px 时的 header 高度和字体大小减小了。并将 description <div> 的宽度减小到 50%,使其看起来更对齐。

现在我将进行最大的部分,在屏幕宽度达到 500px 时进行修改;我想像这样显示我的页面。

@media all and (max-width: 500px) {
    header {
        height: 70px;
        line-height: 70px;
    }

        header span {
            font-size: 16px;
        }

    .side_article {
        display: none;
        visibility: hidden;
    }

    .main_articles {
        width: 90%;
    }

    .siteDescription {
        width: 95%;
        height: auto;
        display: block;
    }

    .desImage {
        margin: auto;
        width: 90%;
        height: auto;
    }

        .desImage img {
            width: 95%;
            margin-left: 5px;
        }

    .des {
        margin: auto;
        margin-top: 10px;
        width: 90%;
        height: 300px;
        background-color: #d9d9d9;
    }
}

所以现在我不需要所有的 flexbox 内容。我只需要做一些基本的调整。其中 Image 和 Description <div> 占用 90% 的宽度。正如之前,我减小了 header 的高度和字体大小。然后我隐藏了广告区域。然后我将 main_articles <section> 设置为占用 90% 的宽度,并将 siteDescription <article> 设置为占用 main_articles 宽度的 95%。

我还从 siteDescription <article> 中删除了 flexbox 属性,使其成为黑色视图。

最后,我将 Image 和 Description <div> 设置为占用 90% 的宽度,并删除了 flexbox-order 属性。

现在,让我们看看移动设备的样式。

iPhone

Android(Galaxy s4)

Windows Phone (920)

这些样式与我用于屏幕宽度高达 500px 的布局的样式差别不大。

body, html {
    margin: 0px;
    padding: 0px;
    background-color: #ededed;
    font-family: 'Trebuchet MS';
}

@media only screen and (max-device-width: 480px), only screen and (-webkit-min-device-pixel-ratio: 2) , screen and (-webkit-device-pixel-ratio:1.5){
    .Container {
        width: 90%;
        min-width: 480px;
        margin: auto;
    }

    header {
        width: 100%;
        height: 150px;
        line-height: 150px;
        background-color: #313131;
    }

        header span {
            color: #fff;
            font-size: 35px;
            padding-left: 20px;
        }

    nav {
        width: 100%;
        height: 70px;
        background-color: #ff6a00;
    }

    .content {
        width: 100%;
        height: 900px;
        clear:both;
        padding: 10px 0px;
        background-color: #fff;
        font-size:35px;
    }

    footer {
        width: 100%;
        height: 80px;
        background-color: #808080;
        margin-bottom: 20px;
    }

    .main_articles {
        width: 95%;
        float: left;
        height: auto;
        margin:auto;
    }

    .side_article {
        display: none;
        visibility: hidden;
    }

    .siteDescription {
        width: 95%;
        height: auto;
        display: block;
        margin:auto;
    }

    .desImage {
        margin: auto;
        width: 100%;
        height: auto;
    }

        .desImage img {
            width: 100%;
            height: 100%;
            margin-left: 5px;
            border: 2px solid #6d6d6d;
        }

    .des {
        margin: auto;
        margin-top: 10px;
        width: 100%;
        height: 300px;
        background-color: #d9d9d9;
        padding: 5px;
    }
}

关注点

最棘手的部分是如何处理 flexbox。试试这个链接:FlexBox

并尝试查找媒体查询。媒体查询

© . All rights reserved.