2

I'm trying to set a max-height to an image. It works well in Safari and Chrome, but not in Firefox/Opera/IE. Now I read that html and body heights should be put at 100%, and it did work when I used jsfiddle. However, it doesn't work in my page (memo-designs.com/portfolio.php).

The following is the source of the page:

<!DOCTYPE html>
    <html>
    <head>
        <title>memodesigns</title>
        <link rel='stylesheet' href='style/stylesheet.css'>
        <script type = 'text/javascript'>
            function displayImage(image, link) {
                document.getElementById('img').src = image;
                document.getElementById('mylink').href = link;
            }

            function displayNextImage() {
                if (x < images.length-1){
                    x++;
                } else {
                    x = 0;
                }
                displayImage(images[x], links[x]);           
            }

            function displayPreviousImage() {
                if (x > 0){
                    x--;
                } else {
                    x = images.length-1;
                }
                displayImage(images[x]);           
            }

            function startTimer() {
                setInterval(displayNextImage, -1);
            }

          var images = [], links = [], x = 0;images[0] = "http://memo-designs.com/items/doublek-01.png"
links[0] = "http://memo-designs.com/items/doublek-01.png"
images[1] = "http://memo-designs.com/items/memodesigns.png"
links[1] = "http://memo-designs.com/items/memodesigns.png"

      </script>
    </head>

    <body style = 'background-color: #000000'><div id = 'menucontainer'>
            <div id = 'menu'>
                <p>
                    <ul>
                        <li><a class = 'menu' href = '/'>HOME</a></li>
                        <li><a class = 'menu' href = 'about.php'>ABOUT</a></li>
                        <li><a class = 'menu' href = 'portfolio.php'>PORTFOLIO</a></li>
                        <li><a class = 'menu' href = 'rates.php'>RATES</a></li>
                        <li><a class = 'menu' href = 'contact.php'>CONTACT</a></li>
                    </ul>
                </p>
            </div>
        </div>
                <div id = 'contentcontainer' style = 'padding-top: 0%; max-height: 100%; overflow: hidden; background-color: #000000'>
                <p>
                    <img id= 'img' src = 'http://memo-designs.com/items/doublek-01.png' style = 'max-height: 100%; max-width: 100%; display: block; margin-left: auto; margin-right: auto;'>
                    <img class = 'arrow' onclick = 'displayPreviousImage()' id= 'img' src = 'style/graphics/larrow.png' style = 'position: absolute; left: 0; top: 40%;'>
                    <img class = 'arrow' onclick = 'displayNextImage()' id= 'img' src = 'style/graphics/rarrow.png' style = 'position: absolute; right: 0; top: 40%;'>          </p>
            </div>
    </body>

    </html>

And the css stylesheet (only part of it is shown here):

*{
    margin:  0;
    padding:  0;
}

html{
    margin: 0;
    min-width: 100%;
    height: 100%;
    min-height: 100%;
}

body{
    margin: 0px;
    background-color: #f3f4f4;
    min-width: 100%;
    height: 100%;
    min-height: 100%;
}

Would appreciate any help as to what I'm doing wrong :)

4

1 回答 1

1

首先,我建议您开始使用像Normalize.css这样的CSS-Reset。它使浏览器更一致地呈现所有元素并符合现代标准。

您的 HTML 表示法也可能导致跨浏览器的不一致。将之类的东西<div id = 'menu'>变成<div id="menu">. 恕我直言,这也使其更具可读性。

内联样式属性使维护页面变得很痛苦,并且可能会覆盖您不打算这样做的内容。它们还需要应用于每个元素,因此也会增加下载时间。使用类/ id 是要走的路。伪元素也不能与内联样式一起使用。我建议仅在开发过程中将它们用于快速更改。我使用 Chrome / Firefox 的元素检查器快速更改内容,并立即查看更改的外观,然后复制/粘贴编辑。

因此,请确保将所有 css 放入您的样式表中。它也被认为是页面的可维护性和更好的下载速度(缩小文件以供生产)的最佳实践。

您肯定以前听说过 jQuery。尝试使用它。jQuery 使开发图像滑块之类的东西变得轻而易举(一旦你理解了语法,但它的学习曲线很低)。此外,还有很多现成的 jQuery 插件

另一个“好的做法”是将您的 javascript 放在文档的最后,就在</body>标签之前。在此处此处阅读有关此内容的更多信息。

好的,足够的提示。让我们把手弄脏:

HTML部分:

<!DOCTYPE html>
<html>
<head>
    <title>memodesigns</title>
    <link rel="stylesheet" href="/assets/css/normalize.css">
    <link rel="stylesheet" href="/assets/css/style.css">
</head>
<body>

    <div id="menuContainer">
        <div id="menu">
            <p>
                <ul>
                    <!-- Instead of writing in CAPITALS use the text-transform:uppercase; css property -->
                    <li><a class="menu" href="/">Home</a></li>
                    <li><a class="menu" href="about.php">About</a></li>
                    <li><a class="menu" href="portfolio.php">Portfolio</a></li>
                    <li><a class="menu" href="rates.php">Rates</a></li>
                    <li><a class="menu" href="contact.php">Contact</a></li>
                </ul>
            </p>
        </div>
    </div>

    <div id="contentContainer">
        <p>
            <!-- NOTE: Use IDs only once, else use classes to share css styles -->
            <img id="img" src="http://memo-designs.com/items/doublek-01.png">
            <img class="arrow left" src="style/graphics/larrow.png" onclick="displayPreviousImage()">
            <img class="arrow right" src="style/graphics/rarrow.png" onclick="displayNextImage()">
        </p>
    </div>


    <!-- Put the JavaScript at the end of the document just before the closing body tag -->
    <script>
        var images = [], links = [], x = 0,
            baseUrl   = "http://memo-designs.com/items/";
            images[0] = baseUrl + "doublek-01.png";
            links[0]  = baseUrl + "doublek-01.png";
            images[1] = baseUrl + "memodesigns.png";
            links[1]  = baseUrl + "memodesigns.png";

        function displayImage(img, link)
        {
            document.getElementById('img').src = img;
            document.getElementById('mylink').href = link;
        }

        function displayNextImage()
        {
            if (x < images.length-1) x++; 
                else x = 0;

            displayImage(images[x], links[x]);           
        }

        function displayPreviousImage()
        {
            if (x > 0) x--; 
                else x = images.length-1;

            displayImage(images[x]);           
        }

        function startTimer()
        {
            setInterval(displayNextImage, -1);
        }
    </script>

</body>
</html>

...和CSS:

/* Assuming you'll use a CSS-Reset */
body {
    background-color: #f3f4f4;
    font:
    ...

    width: 100%;
    height: 100%;
    padding: 0;
    margin: 0;
}

#menuContainer { ... }
#menu { ... }
#menu ul { ... }

/* Making the menu labels all UPPERCASE */
#menu ul > li {
    text-transform: uppercase;
}

#contentContainer {
    background-color: #000;
    padding-top: 0;
    overflow: hidden;

    /* IMPORTANT: Set a fixed pixel height here to make the images use up the given space */
    height: 200px; /* change 200 to your needs */
}
#img {
    display: block;
    width: 100%;
    height: 100%;
    margin-left: auto;
    margin-right: auto;

}
#contentContainer .arrow {
    position: absolute;
    top: 40%;
}
#contentContainer .arrow.left {
    left: 0;
}
#contentContainer .arrow.right {
    right: 0;
}

好的,试试建议和代码示例。告诉我们是否有帮助以及有什么帮助。

祝你好运,编码愉快!

于 2013-07-11T14:40:28.203 回答