Таблица рядом с плавающим изображением

#html #css #html-table

#HTML #css #html-таблица

Вопрос:

Я пытаюсь выполнить то, что, как я думал, будет простым, но, похоже, когда дело доходит до CSS, вы никогда не знаете наверняка!

У меня изображение плавает слева. Рядом с ней у меня есть заголовок и под этим заголовком, но все же, помимо изображения, я хочу отобразить таблицу, занимающую всю оставшуюся ширину. В IE и Chrome таблица заканчивается под моим изображением, в то время как в Firefox она занимает более 100% (отображается горизонтальная полоса прокрутки). Firefox выдает результат, более близкий к тому, что я хочу, но мне не нужна полоса прокрутки.

Вот некоторый код, который я пытался заставить работать с помощью редактора w3school «try it» (http://www.w3schools.com/css/tryit.asp?filename=trycss_float )

 <html>
    <head>
        <style type="text/css">
            h1{
                font-size:1em;
            }
            img 
            {
                float:left;
            }
            .field{
                width:100%
            }    
        </style>
    </head>

    <body>
        <img src="logocss.gif" width="95" height="84" />
        <div class="content">
            <h1>this is the title</h1>
            <form>
                <table width="100%">
                    <tr>
                        <td><input type="text" class="field"/></td>
                    </tr>
                </table>
            </form>
        </div>
    </body>    
</html>
  

Я знаю, что структура слишком сложна для такой простой формы, но формы автоматически генерируются PHP-скриптом, поэтому я хотел бы сохранить ее такой.

Ответ №1:

Поскольку у вас есть плавающее изображение, занимающее горизонтальное пространство из .content div, вот почему вы получаете расширенную таблицу. .content div не знает о ширине плавающего изображения. Вы можете компенсировать это, поместив поле шириной не менее изображения в .content div.

 .content 
{
    margin-left: 95px; 
}
  

скрипка

Комментарии:

1. Что ж, в конце концов, решение было простым! Я пробовал использовать поле, но, полагаю, не на том элементе или с неправильной комбинацией! Спасибо

Ответ №2:

Попробуйте установить <table> значение display: block в CSS и удалить width="100%" атрибут:

 table {
    display: block;
}
  

http://jsfiddle.net/ambiguous/dyxw7/

Приведенный выше пример включает в себя красную рамку на таблице, чтобы вы могли видеть, где она находится, я также изменил изображение на котенка, чтобы убедиться, что оно будет отображаться.

Комментарии:

1. Добрый сэр, вам больше не нужно искать котенка, чтобы поместить его в свой код (хотя я восхищаюсь вашей самоотдачей). Я думаю, вы оцените удивительность placekitten.com

2. Таблица действительно отображается правильно в вашем решении, но мне нужно, чтобы текстовое поле также заполняло все пространство (я забыл указать, извините). Спасибо за ваш вклад!

Ответ №3:

.content Div имеет ширину 100% страницы, включая бит под плавающим изображением, поэтому ввод, установленный на 100%, также будет таким широким, чтобы .content div занимал только пространство, оставшееся после плавающего изображения, которое вы можете добавить overflow: hidden к нему, но тогда input сам может использовать различные модели блоков, поэтому я бы предложил использовать для него ширину 99%. Если содержимое на самом деле не является input , то, возможно, 100% будет работать для большинства элементов 😉

например, x-browser-code

 h1 {font-size:1em;}

table {border-collapse: collapse; width: 100%;}
table td {padding: 0;}

.content {overflow: hidden;}
form {padding: 0; margin: 0;}

img {float:left;}

.field {
    width:99%;
    margin: 0 auto;
} 
  

Комментарии:

1. Спасибо за ваш вклад, но добавление поля, как предложил Дастин Лейн, сделало это!

Ответ №4:

Я думаю, вам нужно переместить вашу таблицу вместе с вашим изображением и убрать ширину: 100% в вашей таблице.

 <div id="content">
    <div id="side_bar" style="float:left;">image</div>
    <div id="main_content" style="float:left;">table</div>
    <div style="clear:left;"></div>
</div>
  

или по-старому

 <table>
    <tr>
        <td>image</td>
        <td>table</td>
    </tr>
</table>