修改网页以更适配移动设备/平板电脑

15

所以,

我正在寻求帮助,使一个相当简单的页面在某些移动设备上更具有友好性,因为当前它在某些移动设备上看起来相当丑陋:S

我已经尝试正确定位一些东西,并使用像素而不是百分比,因为我只是在每个角落(顶部和底部栏)做一些事情,并且我尝试了一些缩放代码,使图像在某些屏幕宽度下不显示

能否有人帮助我纠正我的HTML/CSS,以使其完全兼容,因为当我进行更改时,它从未完全奏效。

HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
    <meta content="true" name="HandheldFriendly" />
    <meta content="width=device-width" name="viewport" />
    <meta content="width=device-width,initial-scale=0.75" name="viewport" />
    <title>Website.com</title>
    <link href="testing.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <div id="header_container">
        <div id="header">
            <div class="headimage">
                <a href="http://website.com/" target="_blank">
                    <img alt="" class="headimager" src="http://placehold.it/350x95/" />
                </a>
            </div>
            <select class="class-selector">
                <option value="">- Testing Dropdown -</option>
            </select>
            <div class="classcycler"><a href="javascript: void(0);" id="NextPage"><font color="#EFEFEF">Next Page</font></a>  <font color="red">|</font>  <a href="javascript: void(0);" id="PreviousPage"><font color="#EFEFEF">Previous Page</font></a>
            </div>
            <div class="classcycler2"><a class="downclass" href="javascript: void(0);"><font color="#EFEFEF">Scroll Down</font></a>  <font color="red">|</font>  <a class="upclass" href="javascript: void(0);"><font color="#EFEFEF">Scroll Up</font></a> 
            </div>
            <div class="headright"><a class="TOPJS" href="javascript: void(0);"><font color="#EFEFEF">Up to Top</font></a> 
                <br/> <a class="KEYJS" href="javascript: void(0);"><font color="#EFEFEF">Down to Bot</font></a> 
            </div>
        </div>
    </div>
    <div id="container">
        <table id="gradient-style" summary="">      <tbody><thead><tr><th colspan="30">Data>>>>>Test>>>>>123>>>>>Please>>>>>Help>>>>>Stackoverflow>>>>>Testing>>>>>Here>>>>>Data>>>>>Test>>>>>123>>>>>Please>>>>>Help>>>>>Stackoverflow>>>>>Testing>>>>>Here>>>>>Data>>>>>Test>>>>>123>>>>>Please>>>>>Help>>>>>Stackoverflow>>>>>Testing>>>>>Here>>>>>Data>>>>>Test>>>>>123>>>>>Please>>>>>Help>>>>>Stackoverflow>>>>>Testing>>>>>Here>>>>></th></tr></thead></tbody></table>
    </div>
    <div id="footer_container">
        <div id="footer">
            <div class="footimage">
                <a href="http://website.com/" target="_blank">
                    <img alt="" class="footimager" src="http://placehold.it/350x95/" />
                </a>
            </div>
            <div class="footleft">
                <a class="def" href="javascript: void(0);"></a>
            </div>
            <div class="footright">
                <a class="abc" href="javascript: void(0);"></a>
            </div>
        </div>
    </div>
</body>
</html>

CSS

body {
    background: #F0F0F0;
    line-height: 1.6em;
    margin: 0;
    overflow-x: scroll;
    padding: 0;
}

#header_container {
    background: url(gradhead.png) repeat-x #111625;
    border: 0 solid #666;
    height: 80px;
    left: 0;
    position: fixed;
    top: 0;
    width: 100%;
}

#footer .headimage {
    position: relative;
}
#header .headright {
    font-size: 20px;
    position: fixed;
    right: 10px;
    text-align: right;
    top: 15px;
}

#header .class-selector {
    left: 10px;
    position: fixed;
    top: 5px;
}

#header .classcycler {
    font-size: 20px;
    left: 10px;
    position: fixed;
    top: 30px;
}

#header .classcycler2 {
    font-size: 20px;
    left: 10px;
    position: fixed;
    top: 50px;
}

#container {
    margin: 0 auto;
    padding: 80px 0;
    width: 100%;
}

#footer_container {
    background: url(gradhead.png) repeat-x #111625;
    border: 0 solid #666;
    bottom: 0;
    height: 80px;
    left: 0;
    position: fixed;
    width: 100%;
}

#footer .footleft {
    font-size: 20px;
    left: 10px;
    position: absolute;
    top: 10px;
}

#footer .footright {
    font-size: 20px;
    position: absolute;
    right: 10px;
    top: 10px;
}

#footer .footimage {
    position: relative;
    top: -13px;
}

#footer .footleft a {
    background: url(http://placehold.it/60x60/) no-repeat;
    display: block;
    height: 60px;
    width: 60px;
}

#footer .footleft a:hover {
    background: url(http://placehold.it/60x60/000) no-repeat;
}

#footer .footright a {
    background: url(http://placehold.it/60x60/) no-repeat;
    display: block;
    height: 60px;
    width: 60px;
}

#footer .footright a:hover {
    background: url(http://placehold.it/60x60/000) no-repeat;
}

#header,#footer {
    color: #ECECEC;
    height: 100%;
    margin: 0 auto;
    position: relative;
    text-align: center;
    width: 100%;
}

@media screen and max-width 600px {
    .headimager {
        display: none;
    }
}

@media screen and max-width 450px {
    .footimager {
        display: none;
    }
}

没有jsfiddle链接的原因是它不允许我放置meta标签。

JavaScript

$("a.def").click(function () {
    $('body').animate({
        "scrollLeft": "-=404"
    }, 200);
});

$("a.abc").click(function () {
    $("body").animate({
        "scrollLeft": "+=404"
    }, 200);
});

5
您将此标记为HTML5,但您并未使用HTML5。<!DOCTYPE html> <html> - Andrue
转换并不难 - @Drue 给出了第一步(非常重要)... 我仍然认为 jsfiddle 会有所帮助,反正那里也不需要元标签。 - Shomz
使用 @DreamTek 建议的媒体查询可以解决您的问题。响应式网页设计是您所需要的。 - Vidiya Prasanth Pappannan
似乎有一组点赞者在你身后。我会投票关闭那个问题,因为它既太广泛又太局限,但我不能这样做,因为你的团队中似乎也有足够声望的人可以对那个问题进行悬赏;] 抱歉-1。 - borisdiakur
@Dennis Sylvian 你的媒体查询不起作用的原因是一个简单的语法错误,如下所述。要修复它,你只需要在 (max-width 600px) 周围添加括号即可。有关详细信息,请参见下文。 - DreamTeK
显示剩余3条评论
3个回答

15

有几种方法可以适配移动/平板设备与您的网站。

固定设计

创建一个在所有格式上都能通用的样式表。您的网站将在所有设备上显示相同,但这是最简单的解决方案。

固定设计过程应主要使用百分比和最大宽度来创建基于设备宽度变化的内容。

优点

当使用良好时,此过程使用的资源最少,创建和修改速度更快。

缺点

如果页面上有大量内容,则您的网站在较小的设备上可能会变得非常拥挤。

响应式设计

如果您希望您的网站在不同设备上以不同的方式查看并且最优化,则需要响应式设计。可以通过使用动态样式表或使用多个针对不同设备的样式表来实现此目的。

优点

非常灵活的网站,可以根据查看设备独特而最佳地显示。

缺点

根据设计需要更多的资源和较长的加载时间。需要更长的开发和修改时间。


创建响应式级联样式表

不再实用使用固定宽度,因为有太多的可变大小。

  • 像您的示例一样使用视口元标记来针对访问您网站的设备。

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

    显然有视口元标记的需求,因为大多数流行的移动浏览器都支持它,并且成千上万的网站使用它。

  • 使用媒体查询。

媒体查询可以让您为特定的屏幕宽度编写单独的规则。

/* Smartphones (portrait and landscape) ----------- */
@media only screen
and (min-device-width : 320px)
and (max-device-width : 480px) {
/* Styles */
}

/* Smartphones (landscape) ----------- */
@media only screen
and (min-width : 321px) {
/* Styles */
}

/* Smartphones (portrait) ----------- */
@media only screen
and (max-width : 320px) {
/* Styles */
}
  • 使用 JavaScript。

除了 Bootstrap 之外,一种很好的 JavaScript 解决方案是 jQuery Mobile,它通过为您完成工作来节省响应式网站设计的时间和精力。 使用它不需要了解或编辑任何 JavaScript。


具体情况

现在我们有了选择,让我们看看您的具体问题。 您的网站实际上已经非常响应,并且使用固定设计为移动设备和 PC 提供了良好的布局。

更改您的媒体查询 (没有括号将无法正常工作)

@media screen and max-width 600px {
    .headimager {
        display: none;
    }
}

@media screen and max-width 450px {
    .footimager {
        display: none;
    }
}

@media screen and (max-width:600px) {
    .headimager {
        display: none;
    }
}

@media screen and (max-width:450px) {
    .footimager {
        display: none;
    }
}
我建议不要使用表格(#gradient-style)。一个简单的100% div(#container)可以使用浮动或%宽嵌套元素来完成。此外,容器中的文本如果没有css wordwrap:break的间隔,将不会自动换行。
除此之外,没有更明显的问题,但是如果您需要特定的更改,请添加评论。

我的主版本容器内的所有内容都显示得很完美,只是顶部和底部的页眉和页脚有问题。由于某种原因,我无法在我的 Nexus 4 上正确地使用 @media screen - Dennis Sylvian
有什么想法为什么@media screen CSS在移动设备上无法工作? - Dennis Sylvian
1
你看到我上面关于更改媒体查询的注释了吗?(如果没有括号,它们将无法正常工作)。你需要用括号把max-width包起来。在你的CSS中缺少了这个。 - DreamTeK

7
我认为在这种情况下文档类型不会改变任何东西,正如Drue所评论的那样...
处理不同形态因素(如平板电脑和手机)的最佳方法是使用媒体查询,就像您已经做的那样。这可能需要大量的编写才能得到正确的结果,因此我建议您使用一个框架。可以说,Bootstrap (http://getbootstrap.com/) 是目前最流行的,但有许多框架可以处理从桌面到移动端的优雅退化。
如果您不想使用框架,min-width 和 max-width 是您的好朋友。它们将允许项目开始出现在彼此下方而不是旁边。
引入 Bootstrap 到您的网站 如果我们查看您的代码片段,您需要应用 Bootstrap 的网格系统。如果您将 Bootstrap 添加到您的代码中,CSS 可能会覆盖一些内容,或者实际上在开始时破坏您的布局。需要一些工作才能做到这一点。 (因此,另一个库可能更好,但基本上它们都是相同的,因此我将保留这个问题来解释 Bootstrap)
Bootstrap 使用网格系统(像许多其他系统)来保持项目位置,并使它们在视口变小时优雅地移动。Bootstrap 是以“移动优先”为思想构建的,这意味着您从最小的视口开始向桌面计算。这听起来可能有些愚蠢/不直观,但在使用中非常实用。Bootstrap 有一些类和 ID,您可以将它们添加到 HTML 中,然后它会自动调整正确的组件大小。它创建了一个包含12列的布局。大多数网站不会有12列,因此您需要创建跨越12列中的2个或更多列的列。http://getbootstrap.com/css/#grid 很好地展示了这一点。根据您的代码,您可能会得到类似以下的结果:
<body>
    <div id="header_container" class="container"><!-- .container centers it -->
        <!-- see: http://getbootstrap.com/components/#navbar for navbar stuff -->
        <div id="header" class="navbar-header"> 
            <div class="headimage navbar-brand">
                <a href="http://website.com/" target="_blank">
                    <img alt="" class="headimager" src="http://placehold.it/350x95/" />
                </a>
            </div>
            [..]    
        </div>
    </div>
    <!-- .row and .col-* manage the grid system -->
    <div class="row">
      <div class="col-md-12 col-lg-12 col-sm-12 col-xs-12">
        The below help-help-help should be 3 columns on large screens, and stack on top of eachother on smaller resolutions
      </div>
    </div>
    <div class="row">
        <div class="col-md-4 col-lg-4 col-sm-12 col-xs-12">
          help 1
        </div>
        <div class="col-md-4 col-lg-4 col-sm-12 col-xs-12">
          help 2
        </div>
        <div class="col-md-4 col-lg-4 col-sm-12 col-xs-12">
          help 3
        </div>
    </div>
    <div id="footer_container">
        <div id="footer" class="row">
            <div class="footimage col-md-4 col-lg-4 col-sm-12 col-xs-12">
                <a href="http://website.com/" target="_blank">
                    <img alt="" class="footimager" src="http://placehold.it/350x95/" />
                </a>
            </div>
            <div class="footleft col-md-4 col-lg-4 col-sm-12 col-xs-12">
                <a class="def" href="javascript: void(0);"></a>
            </div>
            <div class="footright col-md-4 col-lg-4 col-sm-12 col-xs-12">
                <a class="abc" href="javascript: void(0);"></a>
            </div>
        </div>
    </div>
</body>

这绝对是另一种思考网站设计的方式,但Bootstrap的文档非常清晰,并且有许多教程(确保它们是针对Bootstrap3而不是bootstrap2。它们之间有一些重大差异)。

哦,不要在SO上使用<font><table>作为布局工具发布代码。这会影响排版效果 ;)


有趣的编辑,我必须使用<table>的原因是我的数据是在Python中自动生成的,它有50列宽和超过500行。 - Dennis Sylvian
footleft和footright div是带有JavaScript向左和向右滚动的箭头。我的普通表格缩放看起来很好,只是页眉和页脚比较难处理。 - Dennis Sylvian
我明白了,这正是我所期望的。如果你玩弄col-sm-*和col-xs-*,你会发现上下和左右按钮保持在角落水平,而其余部分在低分辨率下会折叠/缩小。这需要一些时间和尝试,但Bootstrap在这方面确实非常出色。 - puredevotion
我可能做错了什么,或者输出结果真的很混乱。我尝试使用下载版本和CDN版本的Bootstrap,但两者都以某种原因返回相同的混乱/损坏输出。我阅读了他们整个CSS页面,并尝试仅针对标题进行示例操作,但所有内容都被挤在一起。 - Dennis Sylvian
虽然我不太明白你所说的“压缩”是什么意思,或者实际上看不到发生了什么(网站/JSFiddle可以帮助理解),但也许使用更基础的框架会有所帮助... - puredevotion
显示剩余6条评论

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接