Как создать таблицу, используя теги div?

#html #css #css-tables

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

Вопрос:

На самом деле этот вопрос возник в результате моих экспериментов с GWT framework, но я решил упростить вопрос.

Я пытаюсь заменить тег table на divs. Как я могу выровнять по горизонтали два тега DIV, которые содержат два вертикально выровненных тега DIV?

Вот что у меня есть:

 <!doctype html>
<html>
<body>
<div style="display: block; ">
    <div style="display: inline; ">
        <div class="gwt-Label" >Name:</div>
        <div class="gwt-Label" >Address:</div>
    </div>
    <div style="display: inline; ">
        <div class="gwt-Label" >test1</div>
        <div class="gwt-Label" >test2</div>
    </div>
</div>
</body>
</html>
  

Она отображается в моем Chrome 15.0.874.106 m как:

 Name:
Address:
test1
test2
  

там, где я ожидал, что это будет:

 Name:    test1
Address: test2
  

Не могли бы вы, пожалуйста, мне помочь?

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

1. вы пробовали заменить inline на inline-block?

Ответ №1:

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

ОБНОВЛЕНИЕ: В дальнейшем вы можете захотеть ознакомиться со спецификацией макета CSS3 Grid:http://www.w3.org/TR/css3-grid-layout

Но как есть, если вы действительно хотите, чтобы это работало по какой-либо причине, я бы установил для всех столбцов фиксированную ширину, плавающий влево и очистить первый столбец. Если вам нужна разная ширина для разных столбцов, вы можете создать специальные классы для этих столбцов и задать определенную ширину. Но, если в вашей таблице есть пользовательские данные, вы должны убедиться, что включен параметр overflow: hidden, иначе это нарушит работу вашей таблицы.

Я вставил сюда код, но я также создал ссылку jsfiddle.

Вот html:

 <div class="table">

    <div class="column first">Name:</div>
    <div class="column">test1</div>

    <div class="column first">Address:</div>
    <div class="column">test2</div>

</div>
  

И стили:

 .table .column{
   width: 100px;
   float: left;
}

.table .column.first{
   clear: left;   
}
  

Однако вы столкнетесь с проблемами, когда текст внутри таблицы изменится. Это не будет действовать как таблица. Например, когда текст ячейки переносится на следующую строку, это не приведет к изменению высоты всех ячеек в этой строке, как вы ожидаете от ячейки. Отсюда переполнение: скрытый или просто используйте таблицу HTML.

Надеюсь, это поможет…

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

1. Обновлено, чтобы предоставить альтернативу.

2. На самом деле, мой тоже не работает в IE7… ну что ж… Я думаю, что надежными являются только таблицы.

3. Обновление: добавлена ссылка на спецификацию макета CSS3 Grid

4. Обновление: в этом руководстве подробно рассказывается о создании табличного отображения с использованием встроенного блока. blog.mozilla.org/webdev/2009/02/20/cross-browser-inline-block

Ответ №2:

Однако я думаю, что для примера, у вас есть реальная таблица, было бы более подходящим; вы также могли бы сделать что-то вроде этого:

 <body>
	<div style="display: table;">
		<div style="display: table-row;">
			<div style="display: table-cell;">Name:</div>
			<div style="display: table-cell;">test1</div>
		</div>
		<div style="display: table-row;">
			<div style="display: table-cell;">Address:</div>
			<div style="display: table-cell;">test2</div>
		</div>
	</div>
</body>  

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

1.К вашему СВЕДЕНИЮ … это не работает в IE 6 и 7, которые оба по-прежнему являются A-Gradequirksmode.org/css/display.html yuilibrary.com/yui/docs/tutorials/gbs

Ответ №3:

В CSS3 есть только тикет:

 .tabl {width:400px;border:1px solid blue;display:table}
.row {height:40px;display:table-row}
.cell {border:1px solid black;display:table-cell}  
     <div class="tabl">
	<div class="row">
		<div class="cell"> CELL one</div>
		<div class="cell"> CELL two</div>
		<div class="cell"> CELL three</div></div>
	<div class="row">
		<div class="cell"> CELL four
		</div><div class="cell"> CELL five</div>
		<div class="cell"> 
			<div class="tabl">
				<div class="row">
					<div class="cell">CELL 6A</div>
					<div class="cell">CELL6B</div>
				</div>
			</div>
		</div>
	</div>
</div>  

Затем это может быть объединено со структурой, которая выглядит как таблица, В данном случае я включил вложенную таблицу:

Если вы хотите, вы, вероятно, можете не использовать внешнюю оболочку, в отличие от реальной таблицы, строки и ячейки, похоже, в ней не нуждаются. К сожалению, это работает только в современных браузерах, поддерживающих CSS3, который исключает IE, включая IE9.

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

1. display: table взят из CSS2 . Более старые версии IE не поддерживают это просто потому, что они отстой. IE8 / 9 поддерживает это.

Ответ №4:

     <div style="display: block; ">
        <div style="float:left">
            <div class="gwt-Label" >Name:</div>
            <div class="gwt-Label" >Address:</div>
        </div>
        <div style="float:left">
            <div class="gwt-Label" >test1</div>
            <div class="gwt-Label" >test2</div>
        </div>
<div style="clear:both"></div>
    </div>
  

Ответ №5:

ваше решение заключается в следующем: — Пожалуйста, проверьте это

  <style type="text/css">
    	.Table
    	{
    		display: table;
    	}
    	.Row
    	{
    		display: table-row;
    	}
    	.Cell
    	{
    		display: table-cell;
    	}
    </style>  
  <!doctypehtml>
    <html>
    <body>
    <div class="Row">
    	<div class="Cell">
    		<p>Name:</p>
    	</div>
    	<div class="Cell">
    		<p>Test1</p>
    	</div>
    </div>
    <div class="Row">
    	<div class="Cell">
    		<p>Address:</p>
    	</div>
    	<div class="Cell">
    		<p>Test2</p>
    	</div>
    </div>
    </body>
    </html>  

Ответ №6:

Если вы хотите создать динамическую табличную структуру, попробуйте использовать jqGrid (демо)

Или, если ваша цель другая и вы все еще хотите использовать div? Попробуйте это..

используйте float:left; вместо display:inline . Float уменьшает div до размера содержимого, освобождая место для других элементов. Это позволяет разместить другие элементы рядом с плавающим элементом.

Исправленный код:

 <!doctype html>
<html>
<body>
<div style="display: block; ">
    <div style="float:left; ">
        <div class="gwt-Label" >Name:</div>
        <div class="gwt-Label" >Address:</div>
    </div>
    <div style="float:left;">
        <div class="gwt-Label" >test1</div>
        <div class="gwt-Label" >test2</div>
    </div>
</div>
</body>
</html>
  

Ответ №7:

Способ Moe довольно классный, но он не стандартный. Это лучший способ.

Используйте CSS-команду «float» точно так же, как это:

HTML-код:

   .gwt-Label
    {
        float: left;
        width: 50%
        }  
 <!doctype html>
    <html>
    <head>
        <link href="Style.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
    <div style="display: block; ">
        <div style="display: inline; ">
            <div class="gwt-Label" >Name:</div>
            <div class="gwt-Label" >test1</div>
        </div>
        <div style="display: inline; ">
            <div class="gwt-Label" >Address:</div>
            <div class="gwt-Label" >test2</div>
        </div>
    </div>
    </body>
    </html>



    

Или вы можете разместить все это в одном месте:

 <!doctype html>
    <html>
    <head>
    
        <style type="text/css">
            .gwt-Label{
            float: left;
            width: 50%
            }
        </style>
    
    </head>
    <body>
    <div style="display: block; ">
        <div style="display: inline; ">
            <div class="gwt-Label" >Name:</div>
            <div class="gwt-Label" >test1</div>
        </div>
        <div style="display: inline; ">
            <div class="gwt-Label" >Address:</div>
            <div class="gwt-Label" >test2</div>
        </div>
    </div>
    </body>
    </html>