Avatar billede Mik2000 Professor
19. marts 2012 - 14:41 Der er 24 kommentarer og
1 løsning

Skift størrelse på div og image

Hej

Jeg leger lidt med responsive webdesigns og har på min side en div med et billede i (er nødt til at være i en container som f.eks. div, da det indsættes med noget javascript)

Jeg har nu fået billedet til at blive mindre ved at have:
.image{
  max-width: 90%;
}

Pt. står diven omkring til at være
#min_div {
  height: 165px;
}

Mit problem er at selvom billedet bliver mindre, så skifter kassen omkring ikke størrelse, så den forsætter med at være 165px. Det betyder der kommer mellemrum mellem billedet og indholdet under.

Jeg har prøvet at lege med noget max-height mv, men så hopper alt indholdet der står under, op og står inden under banneret. Dvs at min_div slet ikke skubber det ned.

Så hvordan får jeg div'ens højde til at følge med billedets højde?
Avatar billede mireigi Novice
19. marts 2012 - 15:09 #1
Fjern højden på din div:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Untitled Page</title>
</head>
<body>
    <div style="border: 1px solid black; width: 300px;">
        <img src="Foo.jpg" style="max-width: 90%;" />
    </div>
</body>
</html>
Avatar billede Mik2000 Professor
19. marts 2012 - 15:22 #2
Hej

Problemet er at hvis jeg fjerner højden på div'en, så kommer alt indholdet der står nedenunder op og står inde under billedet, da der ikke længere er en div, der fortæller hvor meget det skal skubbes ned
Avatar billede mireigi Novice
19. marts 2012 - 17:20 #3
mener du kan bruge clear til det:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Untitled Page</title>
</head>
<body>
    <div style="border: 1px solid black; width: 300px; clear: both;">
        <img src="Foo.jpg" style="max-width: 90%;" />
    </div>
    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.
</body>
</html>


Du kan også vælge at bruge float sammen med, hvis du vil have billedet i en bestemt side med teksten brydende omkring.
Avatar billede olebole Juniormester
19. marts 2012 - 23:23 #4
<ole>

@mireigi: Hvorfor clear: both?

/mvh
</bole>
Avatar billede mireigi Novice
19. marts 2012 - 23:48 #5
clear:both fortæller browseren at der ikke må stå tekst eller andre elementer på linje med elementet selv.
Avatar billede Mik2000 Professor
20. marts 2012 - 01:00 #6
Hej

Problemet her er at når der ikke er højde på div'en, så sættes div'en til 1 px eller lign. i højden, fordi billedet indsættes med javascript (det er sådan et bannerscript der gør man kan skifte mellem billeder).

Dvs. at selvom clear benyttes, så står det stadig bagved billedet fordi diven er så lille.

Så er nødt til på en måde at bede div'en være ligeså høj som billede - er det muligt?
Avatar billede mireigi Novice
20. marts 2012 - 09:12 #7
Indsendte kode virker fint, hvis du bruger den angivne doctype og xmlns.

Du kan dog prøve at ligge dette på billedet:
clear: both;
display: block;

Skulle gerne fixe problemer med browsere der ikke kan vise det rigtigt.
Avatar billede olebole Juniormester
20. marts 2012 - 12:53 #8
@mireigi: Du gætter i blinde! Du har komplet misforstået betydningen og virkemåden af clear. Der er absolut intet at bruge den property til i denne sammenhæng.

At gøre billedet til et block element har heller ikke nogen virkning - og der er intet i den virkemåde, standarden foreskriver, der retfærdigør brugen i denne sammenhæng.

Derudover er der ingen somhelst grund til at bruge XHTML 1.0 Transitional, der i følge standarden skal tolkes som ganske almindelig HTML. I øvrigt er det om et par måneder tre år siden, W3C opgav at fortsætte udviklingen af XHTML.

@mik2000: Prøv at vise noget mere kode, så vi kan se, hvordan problemet skal løses
Avatar billede mireigi Novice
20. marts 2012 - 14:15 #9
@olebole: Sjovt som det har virket i alle browsere at gøre det jeg foreslår. Vi brugte det altid på tidligere arbejde til at presse en div omkring indholdet og det har altid virket.

Måske det ikke er standarden, men det er et fix der løser et velkendt problem.

Og slap lidt af med måden du formulerer dig på. Jeg har på intet tidspunkt sagt at det er 100% korrekt eller at det var standarden. Mine udsagn er baseret på 3 års personlig erfaring som professionel web-udvikler.

Syntes generelt at din omgangstone i mange posts er nedladende og til ingen hjælp for den der stiller spørgsmålet, specielt når du mener at problemet er reduceret til det åbenlyse.

Men jeg gætter nok i blinde eller har misforstået betydningen og din virkemåde.
Avatar billede olebole Juniormester
20. marts 2012 - 15:05 #10
Jamen, jeg er skam ikke spor nedladende, jeg siger blot tingene, som de er. Hvis du har noget at bemærke til substansen i min kommentar, er jeg da yderst interesseret at høre, hvor jeg tager fejl  =)

Clear giver udelukkende mening i forbindelse med floated indhold. Det er der ikke tale om her, hvorfor den er uden betydning. Hvis du mener, det er en løsning på dette 'velkendte problem', må du meget gerne linke til et sted, jeg kan læse om det - eller se det i brug.

Et inline element som et IMG, spiler et evt. omkransende block elements højde ud på præcis samme måde som et block element gør det. Derfor gør det ingen forskel at gøre billedet til et block element. Også her må du meget gerne linke til eksempler eller tekster, som kan gøre mig klogere. Jeg har kun 12 års efaring som professionel webudvikler, så der er stadig masser af områder, hvor jeg kan lære noget nyt  =)
Avatar billede mireigi Novice
20. marts 2012 - 19:39 #11
http://senzor.dk/

Kig under referencer. Langt de fleste sider der er lavet med brug af netop ovenstående fix. Fjerner du det fra "content" divs (altså dem der wrapper sig uden om andet), folder div'en sig bare sammen bagved indholdet.

Brug en in-browser debugger/editor (som fx FireBug) og søg efter "clearfix", prøv at fjerne det fra nogle af de content divs der er, og du kan se at det hele går galt.

Beklager mine hårde ord, men bliver lidt aggressiv når jeg får at vide jeg ikke ved hvad jeg snakker om, uden at der kommer saglige beviser den anden vej... Sikkert brugt for meget tid på newz.dk og er blevet skadet :)
Avatar billede olebole Juniormester
20. marts 2012 - 19:54 #12
Jeg finder ikke noget, der hedder "clearfix", og jeg forstår ikke, hvad du mener med "content" divs. Du må være lidt mere konkret
Avatar billede mireigi Novice
20. marts 2012 - 20:07 #13
http://megascope.dk/
Vis kilde
Find <div id="ContentMainWrapper" class="clearfix">
Find <div id="ContentWrapperShadow" class="clearfix">
Fjerner du class="clearfix" fra begge, trækker den fine hvide skal om det hele sig sammen i toppen.

Content divs er fx det som mik2000 har uden om hans IMG tag. En beholder for andet indhold.
Avatar billede olebole Juniormester
20. marts 2012 - 20:29 #14
Jamen, det er jo netop min pointe! Clear giver - som i det eksempel du linker til - mening i forbindelse med float. Ellers giver det absolut ikke mening.

Der er stort set aldrig brug for clear, da float kun bør bruges yderst sjældent. Det er således en stor misforståelse at bruge float til at få block elementer til at ligge ved siden af hinanden.

Float er vældig anvendelig til f.eks. at skabe tekstomløb omkring et billede. Bruger man det derimod til at lægge block elementer ved siden af hinanden, er man bagefter nødt til at hacke sig ud af problemerne med at have flået elementet ud af sidens naturlige flow med clear.

Bloc elementer, der skal ligge ved siden af hinanden bør i stedet gives display:inline-block. Så opfører de sig udadtil som inline elementer og indadtil som block elementer. Det er ikke uden grund, at float af mange anses for at være tabellernes afløser som layout abuse nummer ét.

Jeg ved godt, hvad der normalt menes med et content div. På den side, du linkede til i #11 er der to divs, og ingen af dem havde noget, der kunne minde om et "clearfix".
Avatar billede mireigi Novice
21. marts 2012 - 00:43 #15
Det jeg mente i #11 var at du skulle følge nogle af linksne under "Referencer". Dårlig forklaring fra min side :(

Ok, den del vidste jeg så ikke. Må prøve at spørge designeren fra tidligere arbejde, hvorfor han brugte float i stedet for inline-block til de ting.

Tak for en fyldestgørende forklaring :)
Avatar billede olebole Juniormester
21. marts 2012 - 00:58 #16
Selvtak. Begge dokumenter burde nu også få rettet de værste HTML-fejl. Specielt megascope.dk er der mange i  *o)
Avatar billede olebole Juniormester
23. marts 2012 - 13:20 #17
Hvordan gik det med dette problem? Kom du videre?
Avatar billede Mik2000 Professor
10. april 2012 - 22:14 #18
Hej

Undskyld den meget lange svartid - havde vist fået fjernet overvåg tråd by mistake.

1:
Omkring jeres samtale - er problemet med inline-block så ikke at den har 4px space på hver side, som kræver man bruger små mærkelige fixes - således at det er grunden til folk bruger float, for at kunne lave designs uden de mellemrum?

2:
Nej desværre ikke rigtigt
Har i bund og grund:
<section role="banner" id="image-banner">
  <div id="imagechange_banner">
    <div id="imagechange_navigation_banner"></div>
  </div>
</section>
<section role="main" id="content-left">
  Indhold
</section>
<section role="complementary" id="content-right">
  Indhold
</section>

Det er hele den section: role="banner" id="image-banner"
som kommer til at stå oven på det andet.
Hele image change delen er en del af et script jeg hentede som gør man kan skifte billede i banneret (der er også js)

Herunder er CSS

#image-banner{
    margin-bottom: 10px;
}
#imagechange_banner {
    /*height: 165px;
    border:5px solid red;*/
}
.image{
    max-width: 90%;
    clear: both;
}
#imagechange_banner .image {
    position: absolute;
    display: none;
}
#imagechange_banner #imagechange_navigation_banner {
    position: absolute;
    text-align: right;
    padding: 8px 2px;
}
#imagechange_banner #imagechange_navigation_banner a {
    background: #333;
    color: #a59e89;
    border: 1px solid #a59e89;
    text-decoration: none;
    padding: 0px 4px;
    margin: 1px;
    display: inline;
}
#imagechange_banner #imagechange_navigation_banner a:hover {
    background: #000;
    color: #867e67;
    border: 1px solid #867e67;
}
#imagechange_banner #imagechange_navigation_banner a.current {
    background: #4a3e3a;
}


#content-left{
    width: 35%;
    min-height: 50px;
    float: left;
}
#content-right{
    width: 59%;
    min-height: 50px;
    float: left;
    margin-left: 30px;
}
Avatar billede olebole Juniormester
10. april 2012 - 22:57 #19
"Omkring jeres samtale - er problemet med inline-block så ikke at den har 4px space på hver side, som kræver man bruger små mærkelige fixes - således at det er grunden til folk bruger float, for at kunne lave designs uden de mellemrum?"

Jo, det lyder sandsynligt. Ikke fordi der sker noget mærkeligt ved brugen af inline-block - men fordi rigtig mange ikke er særlig godt inde i, hvordan de mest basale HTML-ting faktisk virker.

Block elementer kan i udgangspunktet ikke ligge ved siden af hinanden, men lægger sig over/under hinanden. De frembringer en blok.

Inline elementer kan ligge ved siden af hinanden - på linje med hinanden. Inline elementer kan kun indeholde andre inline elementer, men ikke block elementer.

Når to inline elementer skrives på denne måde:

<span>Ole</span>
<span>Bole</span>

- er det ret elementært, at de ikke renderes som:

OleBole

- men som:

Ole Bole

Skriver man dem derimod sådan:

<span>Ole</span><span>Bole</span>

- er det ligså velkendt, at de vil blive renderet som:

OleBole

Derfor er det helt forventeligt og logisk, at der ved en liste, der er skrevet sådan:

<style type="text/css">
ul {
    padding: 0;
    margin: 0;
    list-style: none;
}
li {
    display: inline-block;
    background: yellow;
}
</style>

<ul>
<li>Emne 1</li>
<li>Emne 2</li>
<li>Emne 3</li>
</ul>

- vil opstå mellemrum mellem de enkelte LI elementer. Fuldstændig ligesom ved alle andre inline elementer, hvilket jo ikke plejer at forvirre nogen.

Vil man undgå disse mellemrum, kan man bare fjerne mellemrummet mellem LI elementerne:

<ul>
<li>Emne 1</li><li>Emne 2</li><li>Emne 3</li>
</ul>

- eller:

<ul>
<li>Emne 1</li><li>
    Emne 2</li><li>
    Emne 3</li>
</ul>

- eller:

<ul>
<li>Emne 1</li><!--
--><li>Emne 2</li><!--
--><li>Emne 3</li>
</ul>

Du er ikke vidne til mærkeligheder ... blot HTML, der udfolder en af sine helt grundlæggende og velkendte sider  *o)
Avatar billede olebole Juniormester
10. april 2012 - 22:58 #20
Er der noget, der kræver små mærkelige fixes, så er det netop float - der jo flår elementet ud af sidens naturlige flow  *o)
Avatar billede Mik2000 Professor
11. april 2012 - 00:00 #21
Hehe det havde jeg faktisk slet ikke tænkt på, men kan sagens se ideen når du lige skriver det helt logisk :)
Men man kan stadig sige at det bliver en mindre pæn opsat kode, hvis det er den måde man skal opbygge sit design på.

Hvad omkring selve spørgsmålet - var det til at finde hoved og hale i
Avatar billede mireigi Novice
11. april 2012 - 01:21 #22
Og lige præcis det som Olebole nævner er et rent helvede når man prøver at manipulere HTML med JavaScript :)

Angående dit spørgsmål:
Har du et link til siden, hvorpå du har problemer? Der kan være andre ting der spiller ind end lige det du har vist herinde.

Jeg vil dog gætte på at det er position: absolute der er årsag til problemet. Så vidt jeg husker, har denne ingen effekt, hvis ikke elementet/blocken den befinder sig i, er angivet til enten absolute eller relative position. Jeg kan dog huske forkert :)
Avatar billede Mik2000 Professor
11. april 2012 - 20:10 #23
Jeg har den desværre ikke online endnu :(
Prøver at kigge lidt på det og ser om jeg kan få den til at lade være
Avatar billede Mik2000 Professor
18. juni 2012 - 21:30 #24
Hej. Har desværre ikke måtte ligge den online endnu.
Jeg afventer stadig.

Men måske I kan hjælpe hvis I får koden til det script.

Javascriptet ser således ud:
<script>
    var images = ['images/image.jpg','images/image2.jpg'
    ];
    var nextImage = 1;
    var t;
   
    function showImage(n)
    {
        $('#imagechange_banner .image').fadeOut(800);
        $('#imagechange_banner #image'+n).fadeIn(1000);
        $('#imagechange_banner .current').removeClass('current');
        $('#imagechange_banner #link'+n).addClass('current');
        nextImage = (n+1)%images.length;
        clearTimeout(t);
        t = setTimeout("showImage(nextImage)","6500");
    }
   
    $(document).ready(function() 
    {
        // Laver navigation_bannerslisten og henter billeder
        for (n in images) {
            var image_change_images_array = images[n].split("|");
            $('#imagechange_banner #imagechange_navigation_banner').append('<a href="#" id="link'+n+'">'+(parseInt(n)+1)+'</a>');
            $('#imagechange_banner').prepend('<a href="'+image_change_images_array[3]+'" title="'+image_change_images_array[4]+'"><img class="image" id="image'+n+'" src="'+image_change_images_array[0]+'" alt="'+image_change_images_array[1]+'" title="'+image_change_images_array[2]+'" /></a>');
        }
        // Eventhandler til navigation_banner/billedskift
        $('#imagechange_banner #imagechange_navigation_banner a').click(function() {
            clearTimeout(t);
            showImage($(this).attr('id').substring(4));
        });
        // Fremviser første billede
        showImage(0);
    });
</script>
Avatar billede Mik2000 Professor
21. juli 2012 - 22:35 #25
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester