Permalänk
Medlem

HTML/CSS hjälp

Hej, jag håller på med en enklare hemsida åt en bekant. Jag skriver koden för hand i Notepad++.

Vad jag försöker få till är en sida med ett antal efterföljande rutor med innehåll. Överst har jag navigering och lite annat som fungerar som det ska och i botten har jag en footer som också fungerar. Emellan dessa så har jag ett antal divar som egentligen bara är rutor med innehåll. Det som ska presenteras är produktpaket så i varje ruta har jag typ en rubrik, en lista med vad som ingår, lite text som beskriver närmare och en textruta. Tanken är att rubriken ska vara överst och resten av innehållet ska ligga bredvid varandra under rubriken, typ i spalter.

Problemet är att jag inte kan få de tre spalterna att ligga bredvid varandra utan att själva rutan bara hamnar runt rubriken. Sätter jag divarna som utgör spalterna till float:left så hamnar de utanför rutan, sätter jag dem till något annat hamnar de i rutan men inte bredvid varandra. Jag skulle kunna sätta själva rutan till en fast höjd men då måste jag ha olika för varje (då innehållet varierar i längd) och det är alldeles för jobbigt.

Koden ser ut typ så här (HTML):

<div id="content"> ... <div class="produkter"> <a id="produkt1"><h2 class="produktRubrik">Produktpaket 1</h2></a> <ul class="prodLista1"> <li>bla bla</li> <li>bla bla</li> </ul> <p class="prodInfo1">Närmare information....</p> <p class="prodInfo2">Information om beställning osv....</p> </div> Och sen kommer ett antal till som ser typ likadana ut </div>

Och CCS:en ser ut ungefär så här:

#container { margin-left:auto; margin-right:auto; width:1024px; background-color:hsla(120,0%,100%,0.8); } .produkter { margin:20px; padding:10px; background-color:hsla(120,0%,100%,0.8); box-shadow: 0 0 20px rgba(0,0,0,0.4); height:auto; } .produktRubrik {margin:left35px;} .prodLista1 { width:260px; /*här har jag prövat med exempelvis float:left, olika positions osv. men det hjälper inte*/ } .prodInfo1 { margin-left: 10px; padding: 10px; border-left: 1px solid grey; width: 300px; top:1em; /*även här har jag prövat med float, olika positions och liknande men till ingen hjälp. } .prodInfo2 { font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif; border: 2px solid #9D906F; border-radius: 0.5em; background-color: lightgrey; padding: 20px; width: 200px; top:2em; /*även här har jag prövat med float, olika positions och liknande men till ingen hjälp. }

Vad är det jag missar? Om man har ett antal objekt innanför div-taggar så borde ju diven omsluta objekten, eller? Sätter jag ett av objekten till float:left så hamnar det utanför rutan hur jag än gör. Alla tips välkomnas.

Permalänk
Medlem

Lättast löser du det med en table-layout istället för att floata divar. Det är enkelt och snabbt. Dock inte "bäst" i just detta fallet.

Fördelen med flytande divar är att om skärmen blir smalare, t.ex i en telefon, knuffas rutorna med de olika produkterna ner, nedaför varandra, vilket betyder att på en stor widescreen kan du ha 10 boxar bredvid varandra och när skärmen blir smalare blir det en 5-kolumn-layout, ner till en kolumn.

div.produkter måste ha en fast bredd för att det ska fungera bra. div.produkter ska ha float:left.

En flytande div kan det vara problem att sätta dynamiskt höjd på. För att lösa det problemet, sätt in en <div style="clear: both;"></div> innan sluttaggen på den flytande diven.

Elementen inne i div.produkter behöver / ska inte ha någon float.

Innan slutet på div#content (har du klass för den?) bör du lägga in en till sådan där fin "clear float div" som jag skrev ovan.

När du debuggar är det ofta bra att lägga till en border på dina divar i CSSen så du serv vad som händer.

Permalänk
Medlem
Skrivet av Ernesto:

Lättast löser du det med en table-layout istället för att floata divar. Det är enkelt och snabbt. Dock inte "bäst" i just detta fallet.

Jo, jag funderade på det men det känns ganska "old-school" att använda tabeller för layout. Nu blev det dock så i alla fall.

Citat:

Fördelen med flytande divar är att om skärmen blir smalare, t.ex i en telefon, knuffas rutorna med de olika produkterna ner, nedaför varandra, vilket betyder att på en stor widescreen kan du ha 10 boxar bredvid varandra och när skärmen blir smalare blir det en 5-kolumn-layout, ner till en kolumn.

Jo precis. Tanken var att ha en sida för alla typer av enheter och bara skilja på CSS:en.

Citat:

div.produkter måste ha en fast bredd för att det ska fungera bra. div.produkter ska ha float:left.

En flytande div kan det vara problem att sätta dynamiskt höjd på. För att lösa det problemet, sätt in en <div style="clear: both;"></div> innan sluttaggen på den flytande diven.

Jo, men diven behöver inte vara flytande, alltså "produkter", den får gärna ligga i ordning som default. Smart grej i alla fall.

Citat:

Elementen inne i div.produkter behöver / ska inte ha någon float.

Nej, det är lite det som är problemet. Jag vill ju att de ska "flyta" bredvid varandra inne i "produkter"-diven.

Citat:

Innan slutet på div#content (har du klass för den?) bör du lägga in en till sådan där fin "clear float div" som jag skrev ovan.

Nja, det är inte kopierad kod utan sammanfattad, content är id inte class. "clear float div" verkar mycket bra, men det krävs en del pill för att få till det och nu har jag redan gjort tables.

Tack för hjälpen hur som helst.

Citat:

När du debuggar är det ofta bra att lägga till en border på dina divar i CSSen så du serv vad som händer.

Javisst. Lite som printlines när man programmerar. FF har dock ett ganska bra inspektionsläge (Ctrl+Shift+I) där man får se alla objekt osv. det räcker ganska långt så slipper man lägga till och ta bort så mycket.

Permalänk
Medlem

Jag antar att det är något sådant här du menar?

http://cdpn.io/ypkwa

Det kan vara lite krångligt att förstå sig på floats i webbutveckling; det är förmodligen ett av absolut vanligaste felet även på professionell nivå. Om man inte clearar sina floats så kommer kringliggande objekt att bete sig på ofta oväntade sätt.

Det finns många sätt att cleara floats på, men jag brukar använda mig av något som liknar detta. Kort och gott: få med CSSen i länken i ditt CSS-dokument och lägg till class="clearfix" på alla containrar till objekt som har floats. I mitt exempel skapade jag en container bara för att cleara, men i övrigt är det samma struktur som din.

Du skulle kunna lägga class="clearfix" på min .box, förmodligen fungerar det ungefär lika bra, men för att vara helt säker på att allt beter sig korrekt är det förmodligen bättre att lämna din h2 utanför floatsen helt och hållet.

Visa signatur
Permalänk
Medlem

Jag använder clearfix och floatar så ofta att de i samtliga projekt jag jobbar med har klassnamnen "L", "R" och "C"

Permalänk
Medlem
Skrivet av Mest:

Jag antar att det är något sådant här du menar?

http://cdpn.io/ypkwa

Ja, ganska så.

Citat:

Det kan vara lite krångligt att förstå sig på floats i webbutveckling; det är förmodligen ett av absolut vanligaste felet även på professionell nivå. Om man inte clearar sina floats så kommer kringliggande objekt att bete sig på ofta oväntade sätt.

Jo jag har märkt det. Men det är inte logiskt i mina ögon, float:left borde ju låta objekt flyta till vänster eller på nästa rad om det inte finns plats, något som ligger inom div-taggar borde visas i den diven, clear borde bara behöva användas när man vill att objektet ska "cleara".

Citat:

Det finns många sätt att cleara floats på, men jag brukar använda mig av något som liknar detta. Kort och gott: få med CSSen i länken i ditt CSS-dokument och lägg till class="clearfix" på alla containrar till objekt som har floats. I mitt exempel skapade jag en container bara för att cleara, men i övrigt är det samma struktur som din.

Du skulle kunna lägga class="clearfix" på min .box, förmodligen fungerar det ungefär lika bra, men för att vara helt säker på att allt beter sig korrekt är det förmodligen bättre att lämna din h2 utanför floatsen helt och hållet.

Detta var en bra lösning. Den borde vara bättre dokumenterad (eller så är jag bara kass på att söka). H2 är utanför floatsen redan så de ska inte påverka.

Skrivet av Ernesto:

Jag använder clearfix och floatar så ofta att de i samtliga projekt jag jobbar med har klassnamnen "L", "R" och "C"

Jo det känns nästan som läge för det. Det känns dock lite som ett hack, det borde finnas något sånt "inbyggt" i CSS, typ float-collapse:false/0 eller nåt.

Permalänk
Medlem
Skrivet av snajk:

... Det känns dock lite som ett hack, det borde finnas något sånt "inbyggt" i CSS, typ float-collapse:false/0 eller nåt.

Det gör det. Sätt overflow: hidden på container-diven. Läs mer här: #12866493

Det är inte ofta du behöver använda clearfix-klasser eller värre hack som tur är.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

Det gör det. Sätt overflow: hidden på container-diven. Läs mer här: #12866493

Det är inte ofta du behöver använda clearfix-klasser eller värre hack som tur är.

Det låter ju som en smidig lösning. Logiskt sett så borde den ju dölja det som flyter över, inte anpassa diven till innehållet, men det kanske fungerar. Jag har inte riktigt tid att göra om det nu dock så det fick bli tables i detta läge. De ska ge feedback på min design och sen kommer jag säkerligen att få göra om en massa så tipset lär komma till användning ändå.

Så här ser min design ut, work in progress dock så allt är inte på plats ännu och koden ser ut som skit. Inget mästerverk precis men i mina ögon en klar förbättring mot vad de har nu: http://www.gronahusetevent.se/

Permalänk
Medlem

overflow:hidden hade någon rätt allvarlig drawback om jag inte missminner mig som ställde till det i tid och otid därav alla dessa clearing divar. Kanske ska kolla på det igen om du säger att man inte behöver clearingdivar så ofta.

Permalänk
Medlem
Skrivet av snajk:

Så här ser min design ut, work in progress dock så allt är inte på plats ännu och koden ser ut som skit. Inget mästerverk precis men i mina ögon en klar förbättring mot vad de har nu: http://www.gronahusetevent.se/

Du verkar vara på god väg, lite detaljer att platta till, sen blir nog det där fint.

PS. du använder en urgammal version av jquery, ladda in en nyare med latestVersion från google CDN istället, då är chansen större att den är cachad hos besökaren.

Permalänk
Medlem
Skrivet av Ernesto:

overflow:hidden hade någon rätt allvarlig drawback om jag inte missminner mig som ställde till det i tid och otid därav alla dessa clearing divar. Kanske ska kolla på det igen om du säger att man inte behöver clearingdivar så ofta.

Innehåll som inte får plats klipps av eller döljs delvis naturligtvis. Det är inte lika mycket problem som det kanske låter som, då inline-material radbryts och höjden på elementet med overflow: hidden anpassas för att kunna hålla sitt innehåll, såvida man inte satt en specifik höjd.

För de allra flesta fall är overflow: hidden vad man är ute efter. Jag kan inte dra mig till minnes att jag någonsin behövt clearfix eller clear-element.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Ernesto:

Du verkar vara på god väg, lite detaljer att platta till, sen blir nog det där fint.

PS. du använder en urgammal version av jquery, ladda in en nyare med latestVersion från google CDN istället, då är chansen större att den är cachad hos besökaren.

Jepp, tänkte inte alls på det utan bara utgick från någon gammal fil när jag började. Ordnat nu i alla fall.

Annars går det sakta men säkert framåt. Jag utvecklar direkt i dropboxen så är ni intresserade så är det bara att kolla in länken ovan.