Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Div annidati

  1. #1

    Div annidati

    Salve nuovamente a tutti

    spero questa volta di riuscire ad ottenere aiuto da parte vostra

    la domanda è unica e secca: come si fa con un div annidato all'interno di un altro a fare in modo che quando il primo si ingrandisce anche quello che lo contiene si ingrandisca di conseguenza? insomma come per le tabelle

    Attualmente invece non capisco perchè ognuno resta "per i fatti suoi" anche se sono annidati

    evidentemente sto sbagliando qualcosa ma non capisco cosa


    Ecco il codice della pagina

    codice:
    <body>
    
    ...	
    
    <div id="main">
    	<div id="news">		
    	</div>
    </div>
    
    </body>
    </html>

    Ed ecco il CSS

    codice:
    body {
    background-image: url(../images/bg_darkgreen.gif);
    background-repeat: repeat;
    background-color: #9BD094;
    
    }
    
    a:link {
    color: #CC3333;
    
    }
    
    a:visited {
    color: #990033;
    
    }
    
    div#main {
    background-image: url(../images/bg_lightgreen.gif);
    background-repeat: repeat;
    background-color: #EFFEED;
    border: 1px solid #006600;
    position: absolute;
    width: 80%;
    left: 10%;
    right: 10%;
    top: 195px;
    bottom: 30px;
    
    }
    
    div#news {
    position: absolute;
    left: 50px;
    top: 20px;
    right: 70px;
    bottom: 400px;
    border: 1px solid #CC3300;
    
    
    }

  2. #2
    Dipende da cosa intendi per "si ingrandisce". Un <div> è per default un elemento block-level, quindi ha le stesse caratteristiche di tutti gli elementi block-level:

    1. La larghezza, se non impostata esplicitamente, è tale da occupare sempre per intero l'elemento che contiene il <div> (sia esso un altro <div>, un

    , un <h1>, ecc. oppure lo stesso <body>).

    2. L'altezza, se non impostata esplicitamente, è tale da racchiudere esattamente tutto il contenuto del <div>.

    Nel tuo codice vedo che il <div> #main ha larghezza 80%, mentre #news non ha specificata nessuna larghezza. Quindi, per default, #news sarà largo il 100% dell'elemento che lo contiene, ovvero #main. Se la finestra del browser (e quindi #main) si allarga, si allargherà anche #news.
    L'unica cosa che mi lascia un po' perplesso nel codice è quel position: absolute del #main. Inoltre, e questo non dovrebbe essere affatto corretto, hai inpostato l'offset (lo scostamento) di entrambi i <div> usando delle proprietà opposte tra loro (se usi top, non puoi usare bottom e se usi left, non puoi usare right). Questo perché il "punto" da cui viene calcolato lo spostamento del box posizionato in modo assoluto (o anche relativo) è diverso a seconda che utilizzi ad es. left o right.

  3. #3
    mamma mia sono molto più scarso di quanto pensavo

    cmq il codice l'ho generato usando Dreamweaver nn l'ho fatto da solo

    cmq quello che vorrei è che il tag main diventasse man mano più lungo man mano che il contenuto del news aumenta ................... in pratica nel div news devo integrare l'output di un news manager e quind nn so quanto sarà grande ............. mi scriveresti un codice base senza nessun fronzolo per fare questa cosa?


    spero di nn essere stato contorto

  4. #4
    Il problema è che #main è sempre largo l'80% del suo elemento contenitore. Quindi, se #news si allarga, #main non si allargherà mai finché #news non supererà la larghezza dell'80% impostata per il #main. Quello che vorrei capire è cosa intendi per "lungo": vuoi che #main si allarghi o che diventi più alto? Perché nel primo caso non puoi fare niente. Non puoi controllare la larghezza di un box tramite un box contenuto in esso (in realtà potresti "simulare" la cosa usando min-width e max-width, ma per la prima serve un hack per IE, visto che non la supporta direttamente, mentre la seconda non è proprio supportata da IE!).
    Se invece vuoi che #main diventi più alto, non devi fare assolutamente nulla...lo fa già da solo.

    Un consiglio: visto che sei "alle prime armi" con i CSS, evita Dreamweaver o per lo meno usalo solo come "editor di testo" per il codice XHTML. E' il modo migliore per imparare.

  5. #5
    Qusta cosa mi lascia alquanto perplesso per il semplice motivo che quello che voglio io è proprio farlo diventare più alto (lungo)

    insomma che il valore di height si autoregoli in base al contenuto cosa che invece al momento non succede ................... da quanto ho capito tu dici che invece dovrebbe funzionare così normalmente solo che io se provo a visualizzare la pagina non funzia affatto

    mi resta il box verde (main) di dimensioni fisse mentre il box rossiccio (news) si allunga in base al suo contenuto superando persino main

    ecco una preview per farti capire come lo vedo io: come vedi il box main resta fisso e non gliene frega niente di quanto diventa alto news (che cmq continua anche oltre quanto si vede nello screenshot)





    allego anche il codice intero della pagina e del CSS magari è qualcos'altro a dare l'errore

    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type" />
    <title>Isle der Engel</title>
    <link rel="stylesheet" type="text/css" href="styles/main.css" />
    </head>
    
    <body>
    
    	<div id="header">
    	</div>
    	
    	<div id="top_right">
    	</div>
    	
    	<div id="main">
    
    		<div id="news">
    		
    			<div id="news_header"></div>
    		
    		</div>
    			
    		<div id="extra">
    		</div>
    		
    		<div id="disclaimer">Copyright &copy; 2005-2006 Isle der Engel by ssjx
    
    	    [img]images/php-logos/php-icon.png[/img]
    		</div>
    		
    		<div id="bottom_girl"> </div>
    		
    	</div>
    
    </body>
    </html>

    codice:
    body {
    	background-image: url(../images/bg_darkgreen.gif);
    	background-repeat: repeat;
    	background-color: #9BD094;
    
    }
    
    a:link {
    	color: #CC3333;
    }
    a:visited {
    	color: #990033;
    }
    
    
    div#header {
    	background-image: url(../images/bg_header.gif);
    	background-repeat: repeat-x;
    	position: absolute;
    	width: 100%;
    	height: 75px;
    	top: 35px;
    	left: 0px;
    
    }
    
    div#top_right {
    	background-image: url(../images/top_right.gif);
    	position: absolute;
    	width: 250px;
    	height: 157px;
    	top: 112px;
    	right: 6%;
    	z-index: 1;
    
    }
    
    div#main {
    	background-image: url(../images/bg_lightgreen.gif);
    	background-repeat: repeat;
    	background-color: #EFFEED;
    	border: 1px solid #006600;
    	position: absolute;
    	width: 80%;
    	left: 10%;
    	right: 10%;
    	top: 195px;
    	bottom: 30px;
    
    }
    
    div#extra {
    	background-image: url(../images/bg_extra.gif);
    	background-repeat: repeat;
    	border: 1px solid #006600;
    	position: absolute;
    	width: 150px;
    	right: 40px;
    	top: 20px;
    	background-color: #FFFFFF;
    
    
    }
    
    div#disclaimer {
    	font-family: "Trebuchet MS", Sans-Serif;
    	background-color: #FFFFFF;
    	border: 1px solid #006600;
    	position: absolute;
    	font-size: 11px;
    	z-index: 2;
    	text-align: center;
    	padding: 5px;
    	bottom: 100px;
    	left: 25%;
    	right: 25%;
    
    }
    
    div#bottom_girl {
    	background-image: url(../images/bottom_girl.gif);
    	position: absolute;
    	width: 150px;
    	height: 350px;
    	z-index: 2;
    	right: 0px;
    	bottom: 0px;
    
    }
    
    div#news {
    	position: absolute;
    	left: 50px;
    	top: 20px;
    	right: 70px;
    	border: 1px solid #CC3300;
    
    
    }
    
    div#news_header {
    
    }

  6. #6
    nessuno sa aiutarmi?

  7. #7
    Ora mi è tutto chiaro! E' normalissimo che lo faccia, e anzi, è la cosa corretta! Se hai un box posizionato in modo relativo, fisso o assoluto (e il tuo #news lo è) questo viene estratto dal normale flusso del documento e quindi non influisce più sul layout di tutti gli altri box. I box posizionati in modo assoluto hanno per default uno z-index maggiore di tutti i box posizionati staticamente. Solo non ho capito a cosa ti serve quel position: absolute (e ti ricordo che non puoi usare left insieme a right e top insieme a bottom...non ha significato!). Se il tuo box #news è interno a #main, basta che li lasci posizionati in modo statico, quindi elimina quel position: absolute (almeno in #news) e tutte le dichiarazioni di offset (scostamento). Quindi, puoi centrare orizzontalmente il box #news in #main con queste regole:

    codice:
    #main {
    width: 80%;
    text-align: center; /* Centra il box contenuto per IE. */
    }
    
    #news {
    width: 90%; /* Larghezza riferita a quella di #main. */
    text-align: left; /* Ripristina l'allineamento a sinistra del testo. */
    margin: 20px auto 0 auto; /* Centra il box nel suo contenitore per i browser aderenti agli standard e imposta un margine superiore di 20px. */
    }
    Ricorda sempre che i box flottanti (float), posizionati in modo relativo, assoluto e fisso (position: relative, absolute e fixed) NON influiscono MAI sul layout di tutti gli altri box posizionati in modo statico. Nel tuo caso avresti dovuto assegnare uno z-index identico sia a #main che a #news, in modo da portarli sullo stesso "piano" (essendo position: absolute entrambi, il secondo ha z-index maggiore del primo per default). Tuttavia, penso sia più comodo e corretto evitare il posizionamento assoluto e lasciare entrambi i box posizionati normalmente (in modo statico). Hai un controllo maggiore, eviti parecchi bug di IE e soprattutto hai il comportamento di default degli elementi block-level, ovvero: se non dichiari l'altezza, si adattano perfettamente al loro contenuto in senso verticale (influendo su eventuali box contenitori).

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.