使用 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。
并尝试查找媒体查询。媒体查询。