[HTML] Frage zu Spaltenbreiten in Tabellen

TiKu

Administrator
Teammitglied
Mitglied seit
16.11.2001
Beiträge
21.664
Renomée
1.247
Standort
München
  • SIMAP Race
  • QMC Race
  • Spinhenge ESL
  • Docking@Home
  • BOINC Pentathlon 2021
Hi!

Ich habe eine Tabelle mit 2 Zeilen. In der 1. Zeile befindet sich ein Bild, in der 2. ein Text. Ich möchte, dass der Text genauso breit wie das Bild ist und ggf. umgebrochen wird. Geht das irgendwie? Die Breite des Bildes ist unbekannt, sonst wäre es ja kein Thema.

TiKu
 
Die Breite des Bildes ist dir durchgehend unbekannt?

Da fällt mir nix im HTML Standard ein, vielleicht haben die Browser aber was passendes.

zb. sowas hier

<table style='width:100%'>
<td style='width:100%'><img... /></td>
<td>text</td>
</table>

Vielleicht findest du auch was auf www.css4you.de
 
Original geschrieben von intel_hasser
Die Breite des Bildes ist dir durchgehend unbekannt?
Naja, ich könnte sie maximal mit PHP irgendwie aus der Datei auslesen, weiß aber nicht wie das gehen soll.

Original geschrieben von intel_hasser
zb. sowas hier

<table style='width:100%'>
<td style='width:100%'><img... /></td>
<td>text</td>
</table>
Die Tabelle auf 100% Breite setzen is nicht (sieht doof aus), aber vll. reicht es ja, <td> auf 100% zu setzen. *probier*
Werd mir auch mal css4you reinziehen.

Thx.
 
Hi.

Die Bildgröße mit PHP auslesen ist nicht schwer, das ist eine Zeile. Hab' ich auch gemacht, muss mal zu Hause schauen.

Ich verstehe das Problem aber nicht so ganz? Wenn du keine Tabellenbreite angibst, macht er dann die Tabelle nicht automatisch so breit wie der Inhalt?
Wenn der Text in der selben Tabelle wie das Bild ist, bricht er den doch automatisch um, falls nicht genug Platz nach rechts ist?
 
Laut HTML Standard müsste er die Tabelle so breit es geht machen, damit der Text möglichst nicht umgebrochen werden muss.

Die Bildspalte wird dann automatisch auch breiter. HTML ist schon eine hässliche Sprache ;)


@Tiku
Du kannst es aber auch mit <span> versuchen, einfach das Bild als "float:left" reinsetzen, und die Breite so gering wie möglich (1%), und dazu noch, dass er das Feld vergrößern soll, falls der Inhalt net reinpasst. Mit <div> könnte das auch klappen.
 
Also es geht um diese Seite. Der Text soll mit Zeilenumbruch unter's Bild.

Momentan sieht's so aus:
Code:
<table border="0">
  <tr>
    <td align="center">
      <a href="javascript:self.close()" title="Zum Schließen ins Bild klicken!">
        <img src="/pic/galleries/1/browseforfolder1.png" border="0">
      </a>
    </td>
  </tr>
  <tr>
    <td bgcolor="#CFCFCF">
      <font face="arial, helvetica, sans-serif" size="2">
        ExplorerTreeView erlaubt neben Imitationen des Ordner-suchen-Dialoges von Windows...
      </font>
    </td>
  </tr>
</table>
Mit style="width: bla" geht's nicht. Auf CSS4You habe ich auch erstmal nix gefunden, was (wenn es denn überhaupt etwas bringen sollte) mit allen Browsern geht.
Bleibt also entweder das Auslesen der Bildbreite per PHP oder eine Version ohne Tabellen.

@intel_hasser: Werd's gleich mal probieren.
 
Versuch mal "table-layout:fixed;" und schau dir damit im Zusammenhang mal display: an.
 
$size = getimagesize($image);
$size[0] (breite)
$size[1] (höhe)

ist wohl am einfachsten :)

edit: Alternativ die Tabelle zu klein definieren, er verbreitert sie ohnehin automatisch.
 
Original geschrieben von intel_hasser
@Tiku
Du kannst es aber auch mit <span> versuchen, einfach das Bild als "float:left" reinsetzen, und die Breite so gering wie möglich (1%), und dazu noch, dass er das Feld vergrößern soll, falls der Inhalt net reinpasst. Mit <div> könnte das auch klappen.
Das geht schon in die richtige Richtung. Jetzt ist der Textteil zu schmal, aber vll. bekomme ich das noch irgendwie hin.

/e: Okay, getimagesize() ist natürlich einfacher. Frisst zwar Plattenzugriff (obwohl, laden muss er es so oder so), aber so oft wird man sich die Bildergallerien sicherlich nicht anschauen.

Thx!
 
Du kannst auch für jedes Bild einen Eintrag in einer Datenbank plazieren, und dort die größe speichern. Das kannst du ja soweit automatisieren, dass er getimagesize benutzt wenn in der DB der Eintrag noch nicht da ist und das Ergebniss das in die Datenbank schreibt.

Das kannst du dann WriteBack Cache nennen ;)
 
Original geschrieben von intel_hasser
Du kannst auch für jedes Bild einen Eintrag in einer Datenbank plazieren, und dort die größe speichern. Das kannst du ja soweit automatisieren, dass er getimagesize benutzt wenn in der DB der Eintrag noch nicht da ist und das Ergebniss das in die Datenbank schreibt.

Das klingt doch gut. TiKu: machen! ;D
 
*lol* Ja, klingt ganz gut, hat aber einen Nachteil: Wenn ein Bild ausgetauscht wird, muss man an der DB rumschrauben. Das vergesse ich mit Sicherheit gerne.
Was mir aber an der getimagesize()-Methode nicht so ganz gefällt, ist folgendes: *aushol*
Die Seite basiert auf Templates und ich setze dann nur noch einige Variablen. Das Template für das Bild sieht so aus:
Code:
<img src="/pic/galleries/{galleryid}/{picture}" border="0">
Ich brauch also nur noch die ID der aktuellen Gallerie und den Dateinamen des Bildes einsetzen. Die Verzeichnisstruktur interessiert das PHP-Skript nicht. Wenn ich jetzt aber getimagesize() nutze, brauche ich ja den Pfad des Bildes. Da bleibt mir eigentlich nur, das noch weiter aufzusplitten und dem Pfad selbst ein eigenes Template zu geben. Naja, was soll's.
 
Inkludiere doch eine PHP-Datei mit einer Variable, wo du den Pfadnamen hinterlegst? Dann könntest du den bei Bedarf austauschen? Oder speicher doch den Pfad in der Datenbank? ;D

Da du den Pfadnamen zum Bild nie mitgibst, darf der sich ja ohnehin nicht großartig verändern, oder?
 
Tach erstmal

scheiß doch auf die Breite, die wird automatisch halbwegs vernünftig dargestellt!!!

OK, am anfang (bevor das Bild geladen ist), wird nur wenig platz dafür beansprucht werden, aber hinterher, wenn höhe und breite des bildes für den browser bekannt sind wird er das halbwegs vernünftig darstellen, auf jeden fall.

und das layout auf der seite sieht auch nicht so aus als ob es pixelgenau programmiert ist ;)
 
Original geschrieben von skyphab
Inkludiere doch eine PHP-Datei mit einer Variable, wo du den Pfadnamen hinterlegst? Dann könntest du den bei Bedarf austauschen? Oder speicher doch den Pfad in der Datenbank?
Naja, wenn dann einheitlich - sprich: alle Templates bleiben zusammen. Momentan ist noch jedes Template eine eigene Datei, aber das werde ich wohl früher oder später aus Performancegründen in die DB packen.
Original geschrieben von skyphab
Da du den Pfadnamen zum Bild nie mitgibst, darf der sich ja ohnehin nicht großartig verändern, oder?
Doch, eigentlich schon. Momentan müsste ich nur das eine Template anpassen. Das Template muss nur eine Variable {picture} haben, alles andere ist frei änderbar.
 
Zuletzt bearbeitet:
Original geschrieben von Procyon_theEvil
scheiß doch auf die Breite, die wird automatisch halbwegs vernünftig dargestellt!!!

OK, am anfang (bevor das Bild geladen ist), wird nur wenig platz dafür beansprucht werden, aber hinterher, wenn höhe und breite des bildes für den browser bekannt sind wird er das halbwegs vernünftig darstellen, auf jeden fall.
Naja, nee. Hast Du die alte Version gesehen? Da war der Text eine einzige Zeile und entsprechend erheblich breiter als das Bild. Das sah reichlich blöd aus.
Original geschrieben von Procyon_theEvil
und das layout auf der seite sieht auch nicht so aus als ob es pixelgenau programmiert ist ;)
:P Ich weiß, das Design is nich das beste (bin auch alles andere als künstlerich begabt). Aber es ist funktionell und funktioniert mit allen halbwegs brauchbaren Browsern.
 
Original geschrieben von TiKu
Doch, eigentlich schon. Momentan müsste ich nur das eine Template anpassen. Das Template muss nur eine Variable {picture} haben, alles andere ist frei änderbar.

Achso. Ob man auslesen kann, wo sich das Bild befindet? Also quasi den Pfad zur Laufzeit herausfinden und dann die Größe auslesen?
 
Original geschrieben von skyphab
Achso. Ob man auslesen kann, wo sich das Bild befindet? Also quasi den Pfad zur Laufzeit herausfinden und dann die Größe auslesen?
Würde auch gehen, macht am Ende aber zu folgender Methode wohl keinen Unterschied:
Template 1
Code:
<img src="{picturepath}" border="0">
Template 2
Code:
/pic/galleries/{galleryid}/{picture}
So lese ich erst den Pfad aus, setze die Variablen ein, bastle damit dann den img-Tag und ermittle nebenbei die Breite des Bildes, welche ich dann mit in das Template für die Tabelle einsetze.
 
Tach erstmal

Original geschrieben von TiKu
Naja, nee. Hast Du die alte Version gesehen? Da war der Text eine einzige Zeile und entsprechend erheblich breiter als das Bild. Das sah reichlich blöd aus.

nee, die hab ich leider nicht gesehen ...

Ich würd's ganz einfach so machen:

Beim Hochladen/Ändern des Bildes einfach einmal Breite und Höhe auslesen und in der DB speichern ... und dann beim Ausgeben des Bildes einfach diese Werte in das img-Tag reinschreiben (nicht unbedingt in das table-Tag, weil es ja noch Tabellenränder und nen Abstand zwischen Tabellenrand & Bild gibt) ...

Du hast die Pfade zu den Bildern doch in einer Tabelle, oder?

naja und viel Code ist das auch nicht ... etwa so:

PHP:
<?php

function insert_new_img_width_height_into_db($img_id,$img_path)
{
	global $db;

	settype($img_id,'integer');
	settype($img_path,'string');
	if	(	$img_id < 0
		||	strlen($img_path) < 1
		) // falsche Parameter
	{
		trigger_error('Falsche Parameter!',E_USER_WARNING);
		return(false);
	}
	// else
	$img_path=realpath($img_path);
	
	$imageinfo=@getimagesize($img_path);
	
	if(!$imageinfo)
	{	// $img_path ist falsch oder enthält kein gültiges bild
		trigger_error('Kein gültiges Bild gefunden!',E_USER_WARNING);
		return(false);
	}
	// else
	$img_width=$imageinfo[0];
	$img_height=$imageinfo[1];
	
	$update_query=@mysql_query
		(	'UPDATE '.
				'bilder'.
			' SET '.
				'width='.$img_width.','.
				'height='.$img_height.','.
			' WHERE '.
				'img_id='.$img_id.
			' LIMIT 1',
			$db
		) or trigger_error('Query error: '.mysql_error($db),E_USER_ERROR);
	
	if(mysql_affected_rows($db)!=1)
		return(false);
	// else
	return(true);
} // end function insert_new_img_width_height_into_db

?>
 
Original geschrieben von Procyon_theEvil
Beim Hochladen/Ändern des Bildes einfach einmal Breite und Höhe auslesen und in der DB speichern ...
Das Hochladen läuft über FTP, genauso wie Änderungen an der DB über phpMyAdmin laufen. Ein Admin-Panel für solche Sachen ist zwar geplant, hat aber niedrigste Priorität.
Original geschrieben von Procyon_theEvil
Du hast die Pfade zu den Bildern doch in einer Tabelle, oder?
Nur die Dateinamen, die Pfade werden dann mit Templates zusammengebaut.

Naja, die jetzige Version funktioniert ja gut, so werde ich es lassen.
 
Zurück
Oben Unten