Avatar billede htx98i17 Professor
01. juni 2016 - 12:01 Der er 7 kommentarer og
2 løsninger

Combinators i CSS som går uden for parent

Jeg synes det er træls at der er begrænsning på combinators, at de kun kan "betjene" childs.

Jeg vil gerne kunne rykke uden for childs. Er der en metode til det?

Jeg kan desværre ikke bruge pseudo-class :target da den kun kan styre een object af gangen.

Se eksempel
http://christian-nielsen.dk/comb.htm

Koden til eksempel.

<!DOCTYPE html >
<html>
    <head>
        <META http-equiv="Content-Type" content="text/html; charset=utf-8" >

        <style>
       
            label {
                display    :    block;
                width    :    650px;
                height    :    30px;
                border    :    2px solid #333;
            }
           
           
            input:checked + span {
                display    :    none;
            }
           
            label span:target  {
                display    :    none;
            }
           
        </style>
    </head>
<body>
   
    <p>
        <label>
            <input type="checkbox" >
            <span>Når checkbox er checked forsvinder denne tekst fordi den er child</span>
        </label>
    </p>
    <p>   
        <label>
            <input type="checkbox" > Det er dette eksempel jeg gerne vil finde en ren CSS løsning til.
        </label>
        <span>Når checkbox er checked forsvinder denne tekst ikke fordi den er uden for parent</span>
    </p>
    <p>   
        <label>
            <a href="#tryk1" >#tryk1</a>
                <span id="tryk1" >Når man bruger :target er det ikke både og, men enten eller. Og det kan jeg ikke bruge.</span>

        </label>
    </p>
    <p>   
        <label>
            <a href="#tryk2" >#tryk2</a>
                <span id="tryk2" >Når man bruger :target er det ikke både og, men enten eller. Og det kan jeg ikke bruge.</span>

        </label>
    </p>
       
</body>
</html>
Avatar billede Slater Ekspert
01. juni 2016 - 12:20 #1
Beklager, men jeg er ikke sikker på, jeg forstår hvad du mener.

Umiddelbart læser jeg det som om, du vil have CSS til at lade være med at skjule teksten, men det sker jo kun fordi du gør det med vilje med display: none;

Det er muligt jeg bare er dum i nakken i dag, men kan du ikke forklare hvad det er, du vil have den til at gøre, som ikke sker nu?
Avatar billede htx98i17 Professor
01. juni 2016 - 13:08 #2
Der skal to til en tango :)

På linket findes 4 bokse. Funktionen i boks 1 fungere som det skal fordi den tekst sol skal skjules ligger inden for parent.

I boks 2 fungere det ikke fordi teksten ligger UDEN for parent. Og det er det som er træls. Jeg kunne godt bruge en combinator som kan styre uden for parent.

Håber det hjalp på forståelsen ellers spørg igen
Avatar billede Rune1983 Ekspert
01. juni 2016 - 13:15 #3
Kan noget i stil med det her bruges?

<script type="text/javascript">
    function VisDIV(x,z){   
        var DIVTekst1 = document.getElementById(x);
        var CheckboxID = document.getElementById(z);
        if(CheckboxID.checked){
            DIVTekst1.style.display = 'none';
        }else{
            DIVTekst1.style.display = 'block';
        }
    }
</script>

<label>
    <input onclick="VisDIV('DIVTekst1','checkbox1')" id="checkbox1" type="checkbox" >
    <div id="DIVTekst1">Når checkbox er checked forsvinder denne tekst fordi den er child</div>
</label>

<label>
    <input onclick="VisDIV('DIVTekst2','checkbox2')" id="checkbox2" type="checkbox" >
    <div id="DIVTekst2">Når checkbox er checked forsvinder denne tekst fordi den er child</div>
</label>
Avatar billede Morten Riis Novice
01. juni 2016 - 13:18 #4
Hmm, det har vel ikke så meget med parent at gøre... du skriver i din CSS: "input:checked + span" men har ikke en span rundt om den anden tekst.
Avatar billede Slater Ekspert
01. juni 2016 - 13:24 #5
Ja, det kan så vidt jeg ved ikke lade sig gøre i ren CSS, da CSS ikke har nogen parent-selector. Du kan ikke modificere noget der er højere i hierarkiet, end det element du laver reglen for.
Avatar billede htx98i17 Professor
01. juni 2016 - 13:45 #6
#3 jeg vil gerne holde det i CSS kun, men ellers ville det helt sikkert kunne bruges.

#4 jeg kan godt se det forvirrer lidt, men det er naturligvis <span> som ligger lige uden for boks 2

#5 Ok, så har jeg da fået det bekræftet. Men hvad er årsagen til det?

Jeg havde et lille håb om at der var noget jeg havde overset. Nu da der er så mange andre muligheder med CSS, ikke mindst med :target som er ligeglad med hieraki.
Avatar billede Morten Riis Novice
01. juni 2016 - 14:34 #7
OK, hvis det er fordi at du ikke vil have det semantiske rod med span inde i label kan "for" attributten benyttes:

<p>
  <label for="chk2"> Det er dette eksempel jeg gerne vil finde en ren CSS løsning til.
  </label><input id="chk2" type="checkbox">
  <span>Når checkbox er checked forsvinder denne tekst ikke fordi den er uden for parent</span>
</p>
Avatar billede htx98i17 Professor
01. juni 2016 - 14:46 #8
#7 det var ikke helt derfor, men det vil jeg da benytte mig af. Tak for det.
Avatar billede htx98i17 Professor
02. juni 2016 - 07:33 #9
Tak for deltagelsen
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

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