我在这里遇到问题,我正在尝试从我的数据库中获取所有标题并按字母顺序列出它们,第一个字母表示我们所处的位置,所以更清楚:
A:
Animal
Alex
B:
Boo
C:
Crap
实际上这就是我使用的,它完美无缺:
<?php
$conn = mysql_connect('localhost','user','pw') or die(mysql_error());
$db = mysql_select_db('dbname') or die(mysql_error());
$sql = "select * from games order by title";
$result = mysql_query($sql, $conn) or die(mysql_error());
while ($list = mysql_fetch_array($result)) {
$letter = strtoupper(substr($list['title'],0,1));
if ($letter != $prev_row) {
echo "<br><b><u>$letter</u></b><br>";
}
echo '<li><a href="/play/id/' . $list['id'] . '/">'.$list['title'].'</a></li>';
$prev_row = $letter;
} // end while
?>
但我希望如此,当它到达我的div的末尾时,让我们说400px的高度,它开始于一个新的列,如:
A: C:
Alien Crap
B: D:
Boo Dododododo
此刻我真的很无能为力,所以任何帮助都会得到很大的帮助!
非常感谢
答案 0 :(得分:3)
由于HTML尚未广泛支持列,因此您必须计算打印的行数并将其乘以您定义的行高。
<?php
$conn = mysql_connect('localhost','user','pw') or die(mysql_error());
$db = mysql_select_db('dbname') or die(mysql_error());
$sql = "select * from games order by title";
$result = mysql_query($sql, $conn) or die(mysql_error());
echo "<div style='float:left;height:400px;width:150px;'>";
$current_height = 0;
$line_height = '12px'; // replace by your value
while ($list = mysql_fetch_array($result)) {
$letter = strtoupper(substr($list['title'],0,1));
if ( $current_height >= (400 - 2 * (int) $line_height) ) {
echo "</div><div style='float:left;height:400px;width:150px;'>";
$current_height = 0;
}
if ($letter != $prev_row) {
echo "<br><b><u>$letter</u></b><br>";
$current_height += (int) $line_height;
}
echo '<li><a href="/play/id/' . $list['id'] . '/">'.$list['title'].'</a></li>';
$current_height += (int) $line_height;
$prev_row = $letter;
} // end while
echo "</div>";
?>
答案 1 :(得分:1)
HTML没有提供任何方法来判断文本的渲染高度,因此无法确定何时需要跳转到第二列。
我过去如何做到这一点只是一个随意的决定,例如,'A'和'B'将在第一列,'C'和'D'在第二列
当CSS3真正滚动时,它可以指定多列布局:http://www.quirksmode.org/css/multicolumn.html