expandiert einen Inline-Block und springt zur obigen Zeile

8

Ich habe eine Reihe von Artikeln

%Vor%

angeordnet in einem Raster von drei pro Zeile

%Vor%

und ich möchte, dass sie horizontal expandieren, um ihre Zeile vollständig zu belegen, wenn sie angeklickt werden.

Ich erstelle eine expanded Klasse

%Vor%

und wenden Sie es bei Klick an

an %Vor%

Ich bin fast da, wie Sie in der Geige hier Ссылка

sehen können

Wenn ich auf einen der Artikel klicke, expandiert er auf die volle Breite der Reihe; aber das Problem ist, dass wenn ich auf den ersten Artikel einer Zeile (außer der ersten Zeile) klicke " springt " in die Zeile direkt darüber.

Ich habe versucht, die position und display Attribute von article und .expanded zu ändern, aber ich kann nicht das Verhalten bekommen, das ich brauche. Zum Beispiel: Wenn ich position:absolute von .expanded ändere, "springen" die Blöcke 5 und 6 in die darunter liegende Zeile. Ähnlich, wenn ich display:inline-block entferne und zu float:left ändere.

Haben Sie irgendwelche Ideen, warum dies passiert und wie Sie es korrigieren können?

    
PA. 06.10.2015, 14:30
quelle

4 Antworten

2

Wenn position:absolute auf ein <article> -Element gesetzt ist, wird es aus dem normalen Inhaltsfluss entfernt und verursacht den Offset. Wir können es korrigieren, indem wir einen leeren <article> als Platzhalter hinzufügen, wenn der Klick ausgelöst wird, und ihn bei einem erneuten Klick entfernen.

%Vor%

S. Ich bin bei jQuery nicht so gut, Vorschläge sind willkommen.

jsfiddle

    
Stickers 06.10.2015, 15:32
quelle
3

Wenn Sie die Lösung von @Rick (abzüglich der css top edit) verwenden und dann ein zusätzliches Element umschalten, um andere Elemente an Ort und Stelle zu halten, sollten Sie Folgendes tun: Geige

%Vor%

Um weiter zu erklären, wenn auf das Element geklickt wird:

Wenn Sie die Klasse 'expanded' hinzufügen , wird auch ein leeres Artikelelement (zuvor) als Platzhalter hinzugefügt, um den Fluss konsistent zu halten. Dies ist wichtig, denn wenn das Element mit der Klasse "expanded" zu position: absolute wird, wird es aus dem normalen Fluss des Inhalts entfernt.

Wenn Sie die Klasse 'expanded' entfernen (), wird dadurch auch das Platzhalterelement für leere Artikel entfernt. Die Funktion prevAll durchsucht alle vorherigen Elemente mit der Klasse "blank" und nimmt dann die erste () und entfernt sie. Da es 'vorher' eingefügt wurde, wird dadurch garantiert, dass der richtige Platzhalter für leere Artikel entfernt wird.

    
deebs 06.10.2015 15:33
quelle
1

Ich kann mir keine reine CSS-Lösung vorstellen, aber da Sie jQuery sowieso verwenden, schreiben Sie einfach das top :

des erweiterten Elements fest %Vor%

Geige

Der top Stil wird ignoriert, sobald die erweiterte Klasse entfernt wurde.

    
Rick Hitchcock 06.10.2015 15:12
quelle
-1

Versuchen Sie es

%Vor%     
faisal 06.10.2015 15:24
quelle

Tags und Links