Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CSS]Dopasowanie liniowych divów do szerokości niezależnie od treści
Forum PHP.pl > Forum > Przedszkole
Slash0r
Witam,
mam następujący problem. Mam 4 divy o dynamicznie ustalanej szerokości w lini (całkowita szerokość <800px), umieszczone w kolejnym divie o szerokości 800px. Co powinienem zrobić aby krawędź lpierwszego diva w rzędzie zawsze przylegała do lewej krawędzi kontenera a krawędź czwartego w rzędzie do prawej krawędzi kontenera. Innymi słowy potrzebuje dynamiczne marginesy między każdym divem w kontenerze, tak aby wszystkie 4 zawsze wypełniały całe 800 pikseli. Jak?

pozdrawiam
Sebek87
Ustal na sztywno w css prawy margines dla wszystkich elementów tak, aby wypełniały cały kontener, ale z czwartego usuwaj go poprzez style="margin:0;". Jeśli wyświetlasz te elementy pętlą np. w PHP to:
  1. $n=0;
w pętli:
  1. $n ++; $n = ($n % 4);
i warunek w elemencie:
  1. <div<?= ($n === 0 ? ' style="margin-right:0;"' : '') ?>></div>
Slash0r
No niestety właśnie tak robiłem i daje to efekt taki jak u góry mojego profesjonalnego rysunku:

Mi chodzi o efekt ten w drugiej lini. Divy 1 i 4 (licząc od lewej) są przywiązane do krawędzi kontenera stałym marginesem, 2 i 3 niejako środkują się między nimi. Wszystko niezależnie od szerokości diva.
AdIoS_Neo
Witam,
napisałem mały skrypcik który rozwiązuje sprawę, mam nadzieje że się połapiesz (jeśli te divy mają jakieś paddingi to je też trzeba uwzględnić i odjąć od zmiennej m za pętlom):
  1. <!DOCTYPE html>
  2. <html lang="pl">
  3. <title>Dynamiczne marginesy</title>
  4. <meta charset="utf-8" />
  5. <style type="text/css">
  6. *{
  7. margin: 0px;
  8. padding: 0px;
  9. }
  10. #content{
  11. width: 758px; /* 758 + 2*20 + 2 */
  12. height: 358px; /* 358 + 2*20 + 2 */
  13. margin: 100px 0 0 100px;
  14. padding: 20px;
  15. border: 1px solid #0000ff;
  16. text-align: center;
  17. }
  18. #content > div{
  19. float: left;
  20. height: 98px;
  21. border: 1px solid #000000;
  22. }
  23. #content > div:last-child{
  24. float: right;
  25. }
  26. </style>
  27. </head>
  28. <div id="content">
  29. <div>1</div>
  30. <div>2</div>
  31. <div>3</div>
  32. <div>4</div>
  33. </div>
  34. <script type="text/javascript">
  35. window.onload = function(){
  36. /* losowanie szerokości div'ów na potrzeby testów */
  37. var divs = document.getElementById("content").getElementsByTagName("div");
  38. for(var i=0;i<divs.length;i++){
  39. divs[i].style.width = Math.floor(Math.random()*101+90) + "px";
  40. }
  41.  
  42. /* liczenie marginesu */
  43. var divs = document.getElementById("content").getElementsByTagName("div");
  44. var m = 758; // --- #contetn width
  45. for(var i=0;i<divs.length;i++){
  46. m -= parseInt(divs[i].style.width);
  47. }
  48. m -= 2 * 1 * 4; // m - 2 borders ( left border & right border ) * border width * 4 divs
  49. divs[1].style.margin = "0px " + m/3 +"px";
  50. }
  51. </body>
  52. </html>
Slash0r
@AdIoS_Neo
Super, bardzo mi pomogłeś! Widzę, że skrypt pobiera wartość width z taga style="". O szerokości diva decyduje jednak obrazek. Czy byłbyś w stanie nieznacznie zmodyfikować ten skrypt, tak aby zamiast pobierania wartości z taga style="", pobierał wartość z wstawionego w każdy div obrazka (obrazek wstawia PHP, a konkretnie to tylko link do niego w tag src="")? Niestety dopiero raczkuję w JS i miałbym z tym problem. Byłbyś moim mistrzem smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.