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






4.79/5 (14投票s)
如何调整您的网站以适应所有分辨率。
引言
您可能想知道,有些网站足够灵活,可以适应任何屏幕分辨率。这种能力可以通过多种方式实现,例如使用 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。
并尝试查找媒体查询。媒体查询。

