Jak mogę wyrównać dwa bloki inline, tak aby jeden był po lewej, a drugi po prawej w tej samej linii? Dlaczego to takie trudne? Czy jest coś takiego jak \ hfill LaTeX-a, które może zająć przestrzeń między nimi, aby to osiągnąć?
Nie chcę używać pływaków, ponieważ dzięki blokom inline mogę wyrównać linie bazowe. A kiedy okno jest za małe dla nich obu, za pomocą bloków inline mogę po prostu zmienić wyrównanie tekstu na środek, a zostaną wyśrodkowane jeden na drugim. Pozycjonowanie względne (nadrzędne) + bezwzględne (element) ma te same problemy, co elementy zmiennoprzecinkowe.
HTML5:
<header>
<h1>Title</h1>
<nav>
<a>A Link</a>
<a>Another Link</a>
<a>A Third Link</a>
</nav>
</header>
CSS:
header {
//text-align: center; // will set in js when the nav overflows (i think)
}
h1 {
display: inline-block;
margin-top: 0.321em;
}
nav {
display: inline-block;
vertical-align: baseline;
}
Są tuż obok siebie, ale ja chcę nav
po prawej stronie.
position: absolute
iinline-block
Odpowiedzi:
Edycja: minęły 3 lata odkąd odpowiedziałem na to pytanie i myślę, że potrzebne jest bardziej nowoczesne rozwiązanie, chociaż obecne robi to :)
1. Flexbox
To zdecydowanie najkrótszy i najbardziej elastyczny. Zastosuj
display: flex;
do kontenera nadrzędnego i dostosuj położenie jego elementów podrzędnych wjustify-content: space-between;
następujący sposób:Można go zobaczyć online tutaj - http://jsfiddle.net/skip405/NfeVh/1073/
Należy jednak pamiętać, że obsługa flexbox to IE10 i nowsze. Jeśli potrzebujesz obsługi przeglądarki IE 9 lub starszej, użyj następującego rozwiązania:
2. Możesz użyć tej
text-align: justify
techniki tutaj.Działający przykład można zobaczyć tutaj: http://jsfiddle.net/skip405/NfeVh/4/ . Ten kod działa od IE7 i nowszych
Jeśli elementy inline-block w HTML nie są oddzielone spacjami, to rozwiązanie nie zadziała - zobacz przykład http://jsfiddle.net/NfeVh/1408/ . Może tak być w przypadku wstawiania treści za pomocą JavaScript.
Jeśli nie obchodzi nas IE7, po prostu pomiń właściwości star-hack. Działający przykład wykorzystujący twoje znaczniki jest tutaj - http://jsfiddle.net/skip405/NfeVh/5/ . Właśnie dodałem
header:after
część i uzasadniłem treść.W celu rozwiązania problemu dodatkowej przestrzeni wstawianej z
after
pseudoelementem można wykonać sztuczkę polegającą na ustawieniu wartościfont-size
0 dla elementu nadrzędnego i zresetowaniu go z powrotem do 14 pikseli dla elementów potomnych. Działający przykład tej sztuczki można zobaczyć tutaj: http://jsfiddle.net/skip405/NfeVh/326/źródło
font-size
jest raczej niepożądane. Proponuję inne rozwiązanie. Zauważ, że.header:after
dekorator dodaje jedną linię o wysokości równejfont-size
. Na szczęście wiemy, ile to kosztuje. To jest dokładnie1em
! A więc ujemne marże na ratunek! To skrzypce pokazuje, jak to zrobić .Korzystając z odpowiedzi @ skip405, stworzyłem dla niej mixin Sass:
Przyjmuje 3 parametry. Kontener, lewy i prawy element. Na przykład, aby dopasować pytanie, możesz użyć tego w następujący sposób:
źródło
Jeśli nie chcesz używać pływaków, będziesz musiał zawinąć swoją nawigację:
... i dodaj bardziej szczegółowe css:
Być może będziesz musiał zrobić trochę więcej, ale to początek.
źródło
Jeśli już używasz JavaScript do wyśrodkowania rzeczy, gdy ekran jest zbyt mały (zgodnie z komentarzem do twojego nagłówka), dlaczego nie cofnąć ruchów / marginesów za pomocą JavaScript, gdy jesteś przy tym i normalnie używaj pływaków i marginesów.
Możesz nawet użyć zapytań o media CSS, aby zmniejszyć ilość używanego kodu JavaScript.
źródło
Myślę, że jednym z możliwych rozwiązań jest użycie
display: table
:JSFiddle: http://jsfiddle.net/yxxrnn7j/1/
źródło
Nowe sposoby wyrównania elementów w prawo:
Siatka :
Próbny
Bootstrap 4. Wyrównaj do prawej :
Próbny
źródło
Wyświetlanie lewej środkowej i prawej strony rodziców. Jeśli masz więcej niż 3 elementy, użyj dla nich nth-child ().
Przykład HTML:
Przykład CSS:
źródło
daj mu float: right i h1 float: left i wstaw element z clear: oba po nich.
źródło
Do obu elementów użyj
do użycia elementu „nav”
źródło