2

在移动浏览器上查看我的页面(在 Android JB 和 iOS 6 上测试)在最初以纵向和横向模式加载时呈现良好。但是,当我从横向转到纵向时,绝对定位的 div 会偏离它们实际应该在的位置。奇怪的是,如果我在改变方向时放大,这个问题不会出现。

这与此处提到的问题相同:在 iPad 上更改方向后 CSS 元素位置的奇怪偏移 唯一的区别是我正在手机上进行测试。我尝试了那里提供的解决方案,但它们似乎不起作用。

这是我的 CSS

       html{
            width: 100%;
            height: 100%;
        }

        body{
            position: relative;
            overflow: hidden;
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            background: #000;
        }

        #container{
            position: relative;
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            min-width: 960px;
            min-height: 544px;
        }

        #pic{
            display: table;
            height: 100%;
            width: auto;
            margin: 0 auto;
            z-index: 5;
        }

        #links{
            position: absolute;
            width: 100%;
            height: 50px;
            bottom: 5px;
            left: 0;
            right: 0;
            z-index: 9;
            background: #ccc;
            -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)";
            filter: alpha(opacity=10);
            -moz-opacity: 0.1;
            -khtml-opacity: 0.1;                  
            opacity: 0.1;
        }

        #wrapper{
            position: absolute;
            width: 100%;
            height: 50px;
            bottom: 5px;
            left: 0;
            right: 0;
            z-index: 12;
        }

        #content{
            display: table;
            width: 100%;
            height: 100%;
            margin: 0 auto;
        }

        #content div{
            display: inline-block;
            *display: inline;
            zoom: 1;
            width: 20%;
            text-align: center;
        }

        #content div *{
            vertical-align: middle;
            border: 0;
            text-decoration: none;
            color: #000;
            border-radius: 5px;
        }

        /* portrait */
        @media screen and (orientation:portrait) {
            #container{
                position:relative;
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            min-width: 960px;
            min-height: 544px;
            }
        }
        /* landscape */
        @media screen and (orientation:landscape) {
            #container{
                position:relative;
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            min-width: 960px;
            min-height: 544px;
            }
        }

如您所见,我已经尝试了另一个不起作用的问题的解决方案。还有我的 HTML 结构

<div id="container">
        <img src="pic_jj.jpg" alt="image" id="pic" />
        <div id="links">

        </div>
        <div id="wrapper">
            <div id="content">

                <div>
                </div>

                <div>
                </div>

                <div>
                </div>

                <div>
                </div>

                <div>
                </div>

            </div>
        </div>
    </div>

如果您需要现场演示,可以在这里查看我的页面。我可能应该提到我正在寻找一个非 js 解决方案。

PS。我正在使用这个元标记:

<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, user-scalable=no;">

更新截图。

这是初始负载的样子(正常行为) 在此处输入图像描述

当我将方向从横向更改为纵向时,会发生以下情况 在此处输入图像描述 在此处输入图像描述

4

2 回答 2

3

正如我和 Wallace Sidhrée 在上面的评论中所建议的那样,您应该通过使用更传统的做法来以不同的方式处理这个渲染问题。解决这些问题可能会使您的渲染怪癖无效。如果不是这样,它至少会让发现问题变得更加容易。以下是一些需要注意的事项:

- 您的样式表中有重复的样式(即不必要的@media 查询)
您提到您添加了这些媒体查询以表明您已经尝试了来自不同 SO 问题的解决方案,但即使它是错误的解决问题的方法,因为结果可能是不确定的。理论上,额外的媒体查询根本不应该改变布局。

- 您正在使用<img>标签来显示背景,而不是元素background上更传统的属性要实现与您想要的黑色背景的混合,您应该同时使用背景图像和颜色。尝试:. 背景图像总是堆叠在背景颜色之上。<div>
background-color: #000000;background-image: url(image.jpg)

- 您正在应用display: table;到您的#pic元素以尝试实现图像居中
您应该通过使用来居中背景图像background-position: center;

-在没有附带位置属性设置的情况下使用元素z-index上的属性使用 z-index 要求将位置属性设置为z-index 对元素没有影响,如果没有明确定义,它是默认值。#pic
fixedabsoluterelativeposition: static;

-您试图通过更改单独元素的不透明度属性而不是作为元素上的背景颜色设置来实现背景透明度
您提到您这样做是因为缺乏对 rgba 值的支持。但更传统的方法是执行 RaphaelDDL 建议的方法并提供不包括 alpha 透明度的备用值。

我建议简化您的 HTML。它真的不应该比这更多的标记:

<body>
    <div id="image></div>
    <div id="flair">
        <div id="flair-container">
            <div class="flair"></div>
            <div class="flair"></div>
            <div class="flair"></div>
            <div class="flair"></div>
            <div class="flair"></div>
        </div>
    </div>
</body>

更新

这是一个考虑到我的建议的“FIDDLE” 。在 iPad (iOS 6.1.3) 和 Nexus 7 (Android 4.2.2) 上进行测试时,我没有注意到任何旋转怪癖。

于 2013-09-11T17:49:13.073 回答
1

看到我设计了这个,发现它可以响应浏览器的大小调整。如果可能,我要求您更改代码并在 I pad 或选项卡中对其进行测试。请尝试一下,我猜它会导致最终结果。:)

<!DOCTYPE html>

吉万·何塞

    <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, user-scalable=no;">
    <meta name="description" content="Jeevan Jose | About | Twitter | LinkedIn | Facebook | Email">
    <meta name="keywords" content="Computer Engineer, Software Engineer, IT, Jeevan Jose, Jeevan, Photographer">
    <meta name="author" content="Jeevan Jose">
    <meta charset="UTF-8">

    <style type="text/css">
        html{
            width: 100%;
            height: 100%;
        }

        body{
            position: relative;
            overflow: hidden;
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            background: #000;
        }

        #container{
            position: relative;
            width: 100%;
            height: 90%;
            margin: 0;
            padding: 0;
            min-width: 100%;
            min-height: 90%;
        }

        #pic{
            display: table;
            height: 80%;
            width: 80%;
            margin: 0 auto;
            z-index: 5;
        }

        #links{
            position: absolute;
            width: 100%;
            height: 10%;
            bottom: 5px;
            left: 0;
            right: 0;
            z-index: 9;
            background: #ccc;
            -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)";
            filter: alpha(opacity=10);
            -moz-opacity: 0.1;
            -khtml-opacity: 0.1;                  
            opacity: 0.1;
        }

        #wrapper{
            position: absolute;
            width: 100%;
            height: 10%;
            bottom: 5px;
            left: 0;
            right: 0;
            z-index: 12;
        }

        #content{
            display: table;
            width: 100%;
            height: 100%;
            margin: 0 auto;
        }

        #content div{
            display: inline-block;
            *display: inline;
            zoom: 1;
            width: 19%;
            text-align: center;
        }

        #content div *{
            vertical-align: middle;
            border: 0;
            text-decoration: none;
            color: #000;
            border-radius: 5px;
        }

        /* portrait */
        @media screen and (orientation:portrait) {
            #container{
            position: relative;
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            min-width: 100%;
            min-height: 90%;
        }

        #pic{
            display: table;
            height: 80%;
            width: 80%;
            margin: 0 auto;
            z-index: 5;
        }

        #links{
            position: absolute;
            width: 100%;
            height: 10%;
            bottom: 5px;
            left: 0;
            right: 0;
            z-index: 9;
            background: #ccc;
            -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)";
            filter: alpha(opacity=10);
            -moz-opacity: 0.1;
            -khtml-opacity: 0.1;                  
            opacity: 0.1;
        }

        #wrapper{
            position: absolute;
            width: 100%;
            height: 10%;
            bottom: 5px;
            left: 0;
            right: 0;
            z-index: 12;
        }
        }
        /* landscape */
        @media screen and (orientation:landscape) {
            #container{
            position: relative;
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            min-width: 100%;
            min-height: 90%;
        }

        #pic{
            display: table;
            height: 80%;
            width: 80%;
            margin: 0 auto;
            z-index: 5;
        }

        #links{
            position: absolute;
            width: 100%;
            height: 10%;
            bottom: 5px;
            left: 0;
            right: 0;
            z-index: 9;
            background: #ccc;
            -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)";
            filter: alpha(opacity=10);
            -moz-opacity: 0.1;
            -khtml-opacity: 0.1;                  
            opacity: 0.1;
        }

        #wrapper{
            position: absolute;
            width: 100%;
            height: 10%;
            bottom: 5px;
            left: 0;
            right: 0;
            z-index: 12;
        }
        }
    </style>
</head>
<body>
    <div id="container">
        <img src="http://jeevanjose.com/pic_jj.jpg" alt="image" id="pic" />
        <div id="links">

        </div>
        <div id="wrapper">
            <div id="content">

                <div>
                <!--Facebook Button-->
                <iframe src="https://www.facebook.com/plugins/follow.php?href=https%3A%2F%2Fwww.facebook.com%2Fjosejeevan&amp;width=200&amp;height=21&amp;colorscheme=dark&amp;layout=button_count&amp;show_faces=true" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:21px;" allowTransparency="true"></iframe>
                </div>

                <div>
                <!--Twitter handle-->
                <a href="https://twitter.com/jeevan_jose" class="twitter-follow-button" data-show-count="false" data-size="large" data-show-screen-name="false">Follow @jeevan_jose</a>
                <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
                </div>

                <div>
                <!--LinkedIn badge-->
                <a href="http://uk.linkedin.com/in/josejeevan">      
                    <img src="http://www.linkedin.com/img/webpromo/btn_myprofile_160x33.png" width="160" height="33" border="0" alt="View Jeevan Jose's profile on LinkedIn">
                </a>
                </div>

                <div>
                <!--Stackoverflow Flair-->
                <a href="http://stackoverflow.com/users/2025666/jeevan-jose">
                    <img src="http://stackoverflow.com/users/flair/2025666.png?theme=dark" width="208" height="50" alt="SO Flair">
                </a>
                </div>

                <div>
                <!--Email Button-->
                <a href="mailto:contact@jeevanjose.com?subject=Reference%20-%20jeevanjose.com">
                    <img src="email_button.png" alt="email button" />
                </a>
                </div>

            </div>
        </div>
    </div>

    <!-- Start of StatCounter Code for Default Guide -->
    <script type="text/javascript">
    //<![CDATA[
    var sc_project=8629786; 
    var sc_invisible=1; 
    var sc_security="d00c7885"; 
    var scJsHost = (("https:" == document.location.protocol) ?
    "https://secure." : "http://www.");
    document.write("<sc"+"ript type='text/javascript' src='" +
    scJsHost+
    "statcounter.com/counter/counter_xhtml.js'></"+"script>");
    //]]>
    </script>
    <noscript><div class="statcounter"><a title="web statistics"
    href="http://statcounter.com/free-web-stats/"
    class="statcounter"><img class="statcounter"
    src="http://c.statcounter.com/8629786/0/d00c7885/1/"
    alt="web statistics" /></a></div></noscript>
    <!-- End of StatCounter Code for Default Guide -->

    <!--Google Analytics-->
    <script>
      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
      })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

      ga('create', 'UA-43825613-1', 'jeevanjose.com');
      ga('send', 'pageview');

    </script>
</body>

由于路径问题,某些图像可能不可见,因为我在记事本中进行了更改,但请检查。:)

于 2013-09-12T18:25:15.190 回答