Ширина ролловера div отличается от контейнера
У меня проблема с получением Chrome и Safari для правильного отображения div ролловера над моим изображением контейнера. То, что я сделал, иногда работает, но при изменении размера страницы иногда можно увидеть небольшой промежуток в 1 или 2 пикселя между ролловером div и контейнером изображений.
Я сделал демо здесь: http://jsfiddle.net/eJNsS/9/
Скриншот
HTML
<div id="related_projects">
<a href=# ><div class="thumbnail_image_related_project"><div id="image"><img width="300" height="173" src="http://www.gulfster.com/Lessern/Gulfsterhat.jpg" class="attachment-post-thumbnail wp-post-image" /></div><h2 class="transparent_font">IMG1</h2></div></a>
<a href=# ><div class="thumbnail_image_related_project"><div id="image"><img width="300" height="173" src="http://www.gulfster.com/Lessern/Gulfsterhat.jpg" class="attachment-post-thumbnail wp-post-image" /></div><h2 class="transparent_font">IMG2</h2></div></a>
<a href=# ><div class="thumbnail_image_related_project"><div id="image"><img width="300" height="173" src="http://www.gulfster.com/Lessern/Gulfsterhat.jpg" class="attachment-post-thumbnail wp-post-image" /></div><h2 class="transparent_font">IMG3</h2></div></a>
<a href=# ><div class="thumbnail_image_related_project"><div id="image"><img width="300" height="173" src="http://www.gulfster.com/Lessern/Gulfsterhat.jpg" class="attachment-post-thumbnail wp-post-image" /></div><h2 class="transparent_font">IMG4</h2></div></a>
<a href=# ><div class="thumbnail_image_related_project"><div id="image"><img width="300" height="173" src="http://www.gulfster.com/Lessern/Gulfsterhat.jpg" class="attachment-post-thumbnail wp-post-image" /></div><h2 class="transparent_font">IMG5</h2></div></a>
<a href=# ><div class="thumbnail_image_related_project"><div id="image"><img width="300" height="173" src="http://www.gulfster.com/Lessern/Gulfsterhat.jpg" class="attachment-post-thumbnail wp-post-image" /></div><h2 class="transparent_font">IMG6</h2></div></a>
<a href=# ><div class="thumbnail_image_related_project"><div id="image"><img width="300" height="173" src="http://www.gulfster.com/Lessern/Gulfsterhat.jpg" class="attachment-post-thumbnail wp-post-image" /></div><h2 class="transparent_font">IMG7</h2></div></a>
CSS
#related_projects {
background-color :#FFFF44;
margin-bottom: 20px;
position: relative;
top: 0;
left: 0;
overflow: hidden;
margin-bottom: 20px;
display: block;
margin-top: 2%;
}
#related_projects .thumbnail_image_related_project {
width: 23%;
position: relative;
float: left;
top: 0;
left: 0;
margin-left: 1%;
margin-right: 1%;
margin-top: 0%;
margin-bottom: 2%;
overflow: hidden;
line-height: 0;
}
#related_projects img {
width: 100% !important;
height: auto;
}
#related_projects p, #categories_container #left p {
text-align: left;
color: black;
font-family: HermL, Arial, sans-serif;
font-size: 17px;
line-height: 23px;
margin-bottom: 20px;
}
#link_description {
float: left;
width: 98%;
margin-left: 1%;
margin-right: 1%;
}
#link_description #link {
width: 50%;
float: right;
color: black;
font-family: HermL, Arial, sans-serif;
font-size: 17px;
line-height: 23px;
}
#link_description #link a {
color: #666666;
font-family: HermL, Arial, sans-serif;
font-size: 17px;
}
#link_description #link a:hover {
color: #22B573;
font-family: HermL, Arial, sans-serif;
font-size: 17px;
}
/* THUMBNAIL PICTURES
-------------------------------------------------------------- */
.thumbnail_image_related_project .transparent_font {
line-height: 1.25em;
position: absolute;
top: 0;
left: 0;
color: black;
background-color:white;
width: 92%;
padding-right: 3%;
height: 100%;
padding-left: 5%;
opacity:1;
filter: alpha(opacity=0);
}
.thumbnail_image_related_project h2 {
padding-top: 30px;
text-align: left;
color: black;
font-family: HermL, Arial, sans-serif;
font-size: 17px;
line-height: 23px;
}
h2 {
margin:0px;
}
JQuery
$("#slider").hover(
function(){
$(".caption").stop().animate({'opacity' : '0.9'}, 200);
},
function(){
$(".caption").stop().animate({'opacity' : '0'}, 100);
}
);
$(".thumbnail_image_related_project").hover(
function(){
$(this).children(".transparent_font").stop()
.animate({'opacity' : '0.7', 'padding-top': '10px'}, 300);
},
function(){
$(this).children(".transparent_font").stop()
.animate({'opacity' : '0', 'padding-top': '30px'}, 300);
}
);
Спасибо за помощь
2 ответа
Ошибки округления пикселей
h2
тег не всегда полностью покрывает изображение под ним. Черная линия - это часть изображения, которая не покрыта. Это связано с ошибками округления пикселей, возникающими при масштабировании контента.
Есть 2 места, где происходит заметная ошибка округления пикселей:
- Абсолютное позиционирование
h2
тег. Даже при использованииtop:0; left:0
это все еще может привести к ошибке округления. Когда это происходит,h2
отображается с небольшим смещением, так что он не совпадает сimg
тег. - Разделение общей ширины
h2
отметьте 8% для комбинированного горизонтального заполнения и 92% для внутреннего содержимого. По сути, объединенные значения% не всегда составляют до 100% при масштабировании.
Любой из них сам по себе вызывает непоследовательные ошибки округления между h2
тег и img
тег. И несоответствия между этими двумя элементами, как правило, заметны визуально.
Решения
Ключевой концепцией для избежания этой несогласованности является обеспечение того, чтобы h2
тег имеет те же ошибки округления, что и img
тег. Нет практического способа полностью избежать ошибок округления такого рода, но пока они согласованы между двумя элементами, они не будут заметны в этом случае.
Чтобы исправить #1, добавьте position:relative;
к img
тег. Любые ошибки округления в относительном позиционировании img
тег будет соответствовать ошибкам округления в абсолютном положении h2
тег (поскольку их расположение относительно одного и того же элемента). Это по существу устраняет ошибки округления, вызванные абсолютным позиционированием.
CSS добавлен
#related_projects img {
position: relative;
...
}
Чтобы исправить № 2, используйте один из следующих подходов:
- Изменить ширину
h2
пометить до 100% и добавитьbox-sizing: border-box;
(а также версии -moz- и -webkit-). Это не будет работать для IE7 или ранее. Демо с использованиемbox-sizing
, - Снимите горизонтальную прокладку с
h2
пометить и добавитьtext-indent
для имитации левого отступа (если этого достаточно). Демо с использованиемtext-indent
, - Снимите горизонтальную прокладку с
h2
и добавьте элемент-обертку внутри или снаружиh2
тег с внешним элементом, имеющимwidth:%100; position:absolute;
и внутренний элемент, имеющийpadding: 0 3% 0 5%;
, Обычно это делается путем добавления пролета внутриh2
тег.
Любой из вышеуказанных подходов предотвращает возникновение этой конкретной ошибки округления. Упомянутая выше обновленная демонстрация использует box-sizing
, Пока поддержка IE7 или более ранней версии не требуется, это, вероятно, самое элегантное исправление для #2, и оно не требует добавления дополнительных элементов HTML.
CSS удален
.thumbnail_image_related_project .transparent_font {
width: 92%;
...
}
CSS добавлен
.thumbnail_image_related_project .transparent_font {
width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
...
}
Если требуется поддержка IE7 или более ранней версии, и text-indent
не подходит, и редактирование статического HTML не подходит, затем используйте JavaScript или jQuery для добавления элемента-оболочки.
Я немного изменил ваш CSS и переместил некоторые свойства CSS, чтобы сосредоточить ваши контейнеры ссылок внутри #related_projects
, У ссылок не было 100% ширины и высоты их содержимого, как у вас.
Этот код работает для меня, дайте мне знать, если это то, что вы искали. Вы должны были бы исправить свои поля, хотя.
Кроме того, вместо того, чтобы помещать отступ в тег h2, я изменил вашу разметку и поместил ее в промежутки внутри h2.
Изменить: проблемы исправлены в Chrome, однако вы все еще можете увидеть это в Safari.
Edit2: обновлен jsFiddle, я не вижу проблемы с моей стороны как в Chrome, так и в Safari