2013-02-11 187 views
1

我的网站 http://cynthiawoodyardlandscapedesign.com/ 有几个问题只存在于Firefox中。Firefox绝对定位失败

当点击主页上的图像时,两侧出现的允许用户更改图片的箭头位于页面顶部。持有箭头的div应该具有100%的高度,我甚至将!important添加到CSS。只有Firefox不能正确显示。

我的CSS(http://cynthiawoodyardlandscapedesign.com/css/main.css):

#sheet { 
    width: 100%; 
    height: 100%; 
    position: fixed; 
    overflow: hidden; 
    top: 0; 
    left: 0; 
    background-color: rgba(0,0,0,0.8); 
    display: table; 
    z-index: 150; 
} 
#popover { 
    margin: auto; 
    background: rgba(0,0,0,0); 
    text-align: center; 
    padding: 10px; 
    border: 1px solid black; 
    position: relative; 
    display: table-cell; 
    vertical-align: middle; 
} 
#popover-image { 
    height: 70%; 
    border: 10px solid white; 
} 
#exit { 
    position: absolute; 
    top: 50px; 
    color: white; 
    font-size: 20px; 
    font-weight: bold; 
    width: 100%; 
    text-align: center; 
    z-index: 300; 
    font-family: sans-serif; 
} 
#next-image, #previous-image { cursor: pointer; background: transparent; } 
#next-image::-moz-selection, #previous-image::-moz-selection, 
#next-image::selection, #previous-image::selection { background: rgba(0,0,0,0); } 
#leftArrow, #rightArrow { 
    width: 20%; 
    height: 100% !important; 
    position: absolute; 
    z-index: 200; 
    display: table; 
    background: transparent; 
    top: 0; 
} 
#leftArrow { left: 0; } #rightArrow { right: 0; } 
#next-image { 
    display: table-cell !important; 
    vertical-align: middle; 
    margin: 0 auto; 
    text-align: center; 
    line-height: 50px; 
    font-size: 50px; 
    -webkit-text-stroke: 1px black; 
    -moz-text-stroke: 1px black; 
    height: 50px; 
    width: 50px; 
    color: white; 
} 
#previous-image { 
    display: table-cell !important; 
    vertical-align: middle; 
    margin: 0 auto; 
    text-align: center; 
    line-height: 50px; 
    font-size: 50px; 
    -webkit-text-stroke: 1px black; 
    -moz-text-stroke: 1px black; 
    height: 50px; 
    width: 50px; 
    color: white; 
} 

我的HTML(http://cynthiawoodyardlandscapedesign.com/default.php):

<div id="sheet"> 
    <div id="exit">Exit</div> 

    <div id="popover"> 
     <div id="leftArrow"><div id="previous-image" onclick="previous()">&laquo;</div></div> 

     <img src="watermark.php?src=images/main1.jpg&x=0&y=420&opactity=50" id="popover-image" onclick="close()" /> 

     <div id="rightArrow"><div id="next-image" onclick="next()">&raquo;</div></div> 

    </div> 

</div> 

,我试过其他浏览器(IE除外;我在Mac上)显示页面正确。

编辑:我有更多的Firefox问题。

http://cynthiawoodyardlandscapedesign.com/photography.php的页面显示了许多照片是在<td>标签和img之后,但在</td>之前存在一个具有绝对位置,top: 10px;在每一个浏览器(IE8甚至!!)这是行不通的跨度正确。

我的HTML页面:

<table id="photos"> 
       <tr> 
        <td><img src="images/photo-thumbs/garden.jpg" /><span>Gardens</span></td><td><img src="images/photo-thumbs/trees.jpg" /><span>Trees</span></td><td><img src="images/photo-thumbs/shrubs.jpg" /><span>Shrubs</span></td><td><img src="images/photo-thumbs/perennials.jpg" /><span>Perennials</span></td> 
       </tr> 
       <tr> 
        <td><img src="images/photo-thumbs/annuals.jpg" /><span>Annuals</span></td><td><img src="images/photo-thumbs/tropicals.jpg" /><span>Tropicals</span></td><td><img src="images/photo-thumbs/bulb.jpg" /><span>Bulbs</span></td><td><img src="images/photo-thumbs/containers.jpg" /><span>Containers</span></td> 
       </tr> 
       <tr> 
        <td><img src="images/photo-thumbs/fruit.jpg" /><span>Fruit</span></td><td><img src="images/photo-thumbs/animals.jpg" /><span>Creatures</span></td><td><img src="images/photo-thumbs/people.jpg" /><span>People</span></td><td><img src="images/photo-thumbs/travel.jpg" /><span>Travel</span></td> 
       </tr> 
</table> 
#photos td { 
     width: 192px; 
     height: auto; 
     position: relative; 
     border-right: 5px solid transparent; 
    } 
    #photos td img { width: 100%; border: 1px solid gold; } 
    #photos td span { 
     position: absolute; 
     top: 10px; 
     left: 0; 
     width: 100%; 
     text-align: center; 
     background: rgba(0,0,0,0.4); 
     padding-top: 2px; 
     padding-bottom: 2px; 
     color: #f0f0f0; 
     font-weight: bold; 
     font-family: "Source Sans Pro", sans-serif; 
     display: none; 
    } 
+1

几乎可以肯定这是由于您使用的显示的':表' - 过去我遇到过很多问题,一些浏览器需要在display:table-cell之外使用'display:table-row'的另一个包装元素。为什么不使用'position:absolute;顶部:45%;右:30像素'或类似的东西,而不是黑客一个桌子般的布局?你也可以做'顶部:50%; margin-top: - [arrowHeight/2];'让箭头正好在中间。 – 2013-02-11 00:25:06

+0

谢谢,这个答案工作得很好。 – gtr123 2013-02-13 01:18:52

+0

@afterimagedesign请看看我的答案,并让我知道如果有任何问题或我滞后于某些地方。 – w3uiguru 2013-02-18 18:38:57

回答

3

下面是你的第二部分的答案:悬停问题与跨度位置。它工作正常,请参阅我在html,css和jquery代码中完成的下列更改。请让我知道如果我失去了一些东西。

代码:http://jsfiddle.net/brNdq/1/

工作演示:http://jsfiddle.net/brNdq/1/embedded/result/

HTML:

<table id="photos"> 
     <tr> 
     <td><div class="img_container"><img src="http://cynthiawoodyardlandscapedesign.com/images/photo-thumbs/garden.jpg" /><span>Gardens</span></div></td> 
     <td><div class="img_container"><img src="http://cynthiawoodyardlandscapedesign.com/images/photo-thumbs/trees.jpg" /><span>Trees</span></div></td> 
     <td><div class="img_container"><img src="http://cynthiawoodyardlandscapedesign.com/images/photo-thumbs/shrubs.jpg" /><span>Shrubs</span></div></td> 
     <td><div class="img_container"><img src="http://cynthiawoodyardlandscapedesign.com/images/photo-thumbs/perennials.jpg" /><span>Perennials</span></div></td> 
     </tr> 
     <tr> 
     <td><div class="img_container"><img src="http://cynthiawoodyardlandscapedesign.com/images/photo-thumbs/annuals.jpg" /><span>Annuals</span></div></td> 
     <td><div class="img_container"><img src="http://cynthiawoodyardlandscapedesign.com/images/photo-thumbs/tropicals.jpg" /><span>Tropicals</span></div></td> 
     <td><div class="img_container"><img src="http://cynthiawoodyardlandscapedesign.com/images/photo-thumbs/bulb.jpg" /><span>Bulbs</span></div></td> 
     <td><div class="img_container"><img src="http://cynthiawoodyardlandscapedesign.com/images/photo-thumbs/containers.jpg" /><span>Containers</span></div></td> 
     </tr> 
</table> 

CSS:

.img_container { 
    position:relative; 
} 

jQuery的:从TD删除悬停,把它放在类.img_container

<script type="text/javascript"> 
$(document).ready(function() { 
    $(".img_container").hover(function() { 
     $(this).children('span').fadeIn('medium'); 
    }, function() { 
     $(this).children('span').fadeOut('fast'); 
    }); 
}); 
</script> 
+0

我很抱歉!我在打电话时,意外地将+50声望给了错误的答案。你的答案是完美的,我会给你双倍的!不过,我不知道如何给他们。如果我能以任何方式,我想。再次,我很抱歉。 – gtr123 2013-02-19 02:27:54

+0

@afterimagedesign你可以联系主持人,他们可以进行更改。我的运气不好 -:( – w3uiguru 2013-02-19 15:06:40

1

Usign百分比高度去地狱。由于某种历史原因,100%的高度被视为窗口的高度,而不是显示区域。避免使用百分比 - 仅用于例如宽度为20%的例外。

如果您要设置身高:100%,请使用JavaScript。获取显示区域的高度并为这两个div设置它。我张贴的例子,我使用它的覆盖窗口(也正在调整大小时):

var updateInterval; 

function showOverlay() { 
    updateInterval = setInterval(function() { 
    var h = 0; 
    var s = 0; 

    if (window.innerHeight) { 
     h = window.innerHeight; 
    } 
    else if (document.documentElement.clientHeight) { 
     h = document.documentElement.clientHeight; 
    } 

    if (document.body.scrollTop) { 
     s = document.body.scrollTop; 
    } 
    else if (window.pageYOffset) { 
     s = window.pageYOffset; 
    } 

    document.getElementById('overlay').style.height = '' + h + 'px'; 
    document.getElementById('overlay').style.top = '' + s + 'px'; 
    }, 10); 

    toogleHidden('overlay'); 
} 

替换为您的ID叠加ID,toogleHidden是我的函数来显示/隐藏的元素。

您可以使用类似的功能来正确放置元素 - 您知道例如您elemtn是32PX唤起注意,所以你会得到2身高,分16。减去:

var top = (h/2) - 16; 

比你并不需要设置高度为100%(除整列的应该是点击)。

希望这会有所帮助。

0

使用style="display:block"结合"position:absolute"在FF