Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Зазор для рисунка в ячейке таблицы
 
 автор: pautina   (10.11.2010 в 12:38)   письмо автору
 
 

Здравствуйте уважаемое сообщество,
Ни подскажете почему образовывается зазор в ячейке таблицы где содержится рисунок.
html

...
<table class="top_in" cellpadding="0" cellspacing="0">
                             <tr>
                                <td class="top_in_left">
                                    <img src="images/bg_top_in_left.jpg" width="15" height="75" alt="" />
                                </td>
                                <td class="top_in_center">
                                    <img src="images/bg_top_in_center.jpg" height="75" alt="" />
                                </td>
                                <td class="top_in_right">
                                    <img src="images/bg_top_in_right.jpg" width="6" height="75" alt="" />
                                </td>
                                </tr>
 </table>
...

css

.top_in { border-collapse:collapse; width:100%; height:75px; border:1px solid red; }
td.top_in_left { vertical-align:top; width:15px; height:75px; margin:0px; padding:0px; border:1px solid red; }
td.top_in_center { vertical-align:top; width:100%; height:75px; margin:0px; padding:0px; border:1px solid black; }
td.top_in_right { vertical-align:top; width:6px; height:75px; margin:0px; padding:0px; border:1px solid black; }

По коду все вроде правильно строгая высота указана как для таблицы, так и для ячеек, border-collapse:collapse;
Зазора не должно быть, но он почему то есть.
Ни скажете как можно решить эту проблему?

  Ответить  
 
 автор: АЯ   (10.11.2010 в 13:42)   письмо автору
 
   для: pautina   (10.11.2010 в 12:38)
 

Каждая ячейка с таблицей в Вашей записи содержит:
1) перевод строки
2) много-много пробелов
3) тег <IMG>
4) много-много пробелов

Браузер подряд идущие переводы строк и пробелы преобразует в одинарные пробелы.
вы итоге у Вас получается:
1) пробел
2) тег <img>
3) пробел

Всякий пробел браузером воспринимается как текст, имеющий какой-то размер шрифта. В данном случае - то, который у Вас по умолчанию.

Резюме: или избавьтесь от пробелов, или в стилях дайте нулевой размер шрифту.

Избавиться от пробелов можно так (пример):
<td class="top_in_left"><img src="images/bg_top_in_left.jpg" width="15" height="75" alt="" /></td> 


PS. Ноль - это означает НИЧЕГО.
А "ничего" размерности не имеет.
Потому правильным будет не margin:0px;, а margin:0;

PS2. Те атрибуты тегов, кои имеют аналоги в CSS, лучше не использовать. Т.е. правильным будет:
<img src="images/bg_top_in_left.jpg" style="width: 15px; height: 75px" alt="" />

  Ответить  
 
 автор: Usta   (10.11.2010 в 14:33)   письмо автору
 
   для: АЯ   (10.11.2010 в 13:42)
 

Можно еще попробовать сделать для class(top_in_left) font-size:0;

  Ответить  
 
 автор: sim5   (10.11.2010 в 15:41)   письмо автору
 
   для: АЯ   (10.11.2010 в 13:42)
 

>Те атрибуты тегов, кои имеют аналоги в CSS, лучше не использовать

Это интересно. А почему, есть некая выгода от этого?

  Ответить  
 
 автор: АЯ   (10.11.2010 в 16:00)   письмо автору
 
   для: sim5   (10.11.2010 в 15:41)
 

Особой выгоды нет.

Есть следующие соображения:
- все такие атрибуты (имеющие аналоги в CSS) уже в спецификации HTML4.01 объявлены deprecated

- установив атрибут непосредственно в теге, Вы можете случайно изменить значение соответствующего правила стиля в блоке/файле стилей. А правила стилей имеют приоритет перед атрибутами. А потом будете тупо смотреть на тег <IMG>, у которого явно в атрибуте прописано width="15", а он у Вас по ширине в реале - 200 пикселей (здесь, на этом форуме, как-то был вопрос - человек бился головой об стену, ибо не мог понять причину "не того" размера, который он прописал в атрибуте).

  Ответить  
 
 автор: sim5   (10.11.2010 в 16:25)   письмо автору
 
   для: АЯ   (10.11.2010 в 16:00)
 

Ясно, благодарю. Судя из вышесказанного, выгода все таки есть.

  Ответить  
 
 автор: pautina   (11.11.2010 в 12:58)   письмо автору
 
   для: sim5   (10.11.2010 в 16:25)
 

Всякий пробел браузером воспринимается как текст, имеющий какой-то размер шрифта. В данном случае - то, который у Вас по умолчанию.

Поставил нулевой размер шрифта для таблицы, зазоры не изчезли, почему?

  Ответить  
 
 автор: sim5   (11.11.2010 в 13:03)   письмо автору
 
   для: pautina   (11.11.2010 в 12:58)
 

Вам АЯ рекомендовал убрать пробелы между тегами таблицы и вложенными в них тегами, а не размер шрифта.

  Ответить  
 
 автор: pautina   (11.11.2010 в 14:46)   письмо автору
 
   для: sim5   (11.11.2010 в 13:03)
 

Это верно.
Правда у меня в вёрстке так много таблиц, что сам потом боюсь запутаться в этом.
Пришлось на div делать.
Там правда вопрос с повторением фона был
хотел сделать чтоб выполнялись эти скрипты
<!-- края фона для center_center -->
    <script type="text/javascript">   
    onload = function ()   
       {   
        var iH = document.getElementById('center_center').offsetHeight;  
        var iH2 = document.getElementById('center_left').offsetHeight;  
        var iH3 = document.getElementById('center_right').offsetHeight;
        if(iH>iH2) {  
            document.getElementById('center_left').style.height = iH+'px';  
            document.getElementById('center_right').style.height = iH+'px';  
        }  
       }   
    </script> 
    
    <!-- сайдбар по высоте контента --> 
    <script type="text/javascript">   
    onload = function ()   
       {   
        var iH4 = document.getElementById('content').offsetHeight;  
        var iH5 = document.getElementById('sideLeft').offsetHeight;         
        if(iH4<iH5) {  
            iH4=583;  
            document.getElementById('sideLeft').style.height = iH5+'px';  
        }  
        if(iH4>iH5) {  
            document.getElementById('sideLeft').style.height = iH4+'px';  
        }  
       }   
    </script>  

Нужно поставить всё в 1 onload = function ()
Ставил но где то видимо скобку теряю, ни поможете?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования