Zasadniczo dodałeś więcej bałaganu w swoim kodzie, co powoduje więcej zamieszania, więc najpierw próbuję usunąć bałagan, który utrudnia zrozumienie prawdziwego problemu.
Przede wszystkim musimy ustalić, jakie jest prawdziwe pytanie?
Właśnie dlatego inline-block
element „ ” jest przesuwany w dół.
Teraz zaczynamy to rozumieć i najpierw usuwamy bałagan.
1 -
Dlaczego nie nadać wszystkim trzem divom tej samej szerokości obramowania?
Dajmy to.
2 - Czy element pływający ma jakieś połączenie z elementem blokowym wstawionym w dół? Nie, to nie ma z tym nic wspólnego.
Więc całkowicie usunęliśmy ten div . I jesteś świadkiem tego samego zachowania elementu inline-block popychanego w dół.
Nadchodzi kolejna literatura, aby zrozumieć ideę pól liniowych i sposób ich wyłożenia w tej samej linii, szczególnie uważnie przeczytaj ostatni akapit, ponieważ leży odpowiedź na twoje pytanie.
Linia bazowa „bloku śródliniowego” jest linią bazową ostatniego pola liniowego w normalnym przepływie, chyba że nie ma żadnych pól liniowych w dopływie lub jeśli jego właściwość „przepełnienia” ma obliczoną wartość inną niż „widoczna”, w w takim przypadku linia bazowa jest dolną krawędzią marginesu.
Jeśli nie masz pewności co do linii bazowej, oto krótkie wyjaśnienie w prostych słowach.
Wszystkie znaki z wyjątkiem „gjpqy” są zapisywane na linii podstawowej, którą można pomyśleć o linii podstawowej, tak jakby narysować prostą linię poziomą, taką samą jak podkreślenie tuż pod tymi „losowymi znakami”, wówczas będzie to linia podstawowa, ale teraz, jeśli napiszesz dowolną z „gjpqy” znaki w tej samej linii, a następnie dolna część tych znaków spadnie poniżej linii.
Możemy więc powiedzieć, że wszystkie znaki oprócz „gjpqy” są napisane całkowicie powyżej linii podstawowej, podczas gdy część tych znaków jest zapisana poniżej linii podstawowej.
3 - Dlaczego nie sprawdzić, gdzie jest linia bazowa naszej linii? Dodałem kilka znaków, które pokazują linię bazową naszej linii.
4 - Dlaczego nie dodać także niektórych postaci do div, aby znaleźć ich linie bazowe w div? Tutaj niektóre znaki dodane w div, aby wyjaśnić linię bazową .
Teraz, gdy zrozumiesz o linii bazowej, przeczytaj następującą uproszczoną wersję o linii bazowej bloków wbudowanych.
i) Jeśli dla danego bloku wbudowanego właściwość przepełnienia jest ustawiona na widoczną (co jest domyślnie, więc nie trzeba go ustawiać). Wtedy jego linia bazowa byłaby linią bazową zawierającego blok linii.
ii) Jeśli dla danego bloku wbudowanego widoczna jest właściwość przepełnienia INNA NIŻ. Wtedy jego dolny margines będzie na linii podstawowej linii zawierającej pole.
- Pierwszy punkt w szczegółach
Teraz spójrz na to jeszcze raz, aby wyjaśnić swoją koncepcję tego, co dzieje się z zielonym divem . Jeśli jeszcze jakieś zamieszanie, to tutaj dodaje się więcej znaków w pobliżu zielonej div, aby ustalić linię bazową zawierającego blok a zielona linia bazowa div jest wyrównana.
Cóż, teraz twierdzę, że mają tę samą linię bazową? DOBRZE?
5 - Dlaczego więc ich nie nakładać i nie sprawdzać, czy są odpowiednio dopasowane? Tak więc przynoszę trzeci div-left: 35px; sprawdzić, czy mają teraz ten sam poziom podstawowy ?
Teraz nasz pierwszy punkt został udowodniony.
- Drugi punkt w szczegółach
Cóż, po wyjaśnieniu pierwszego punktu, drugi punkt jest łatwo przyswajalny i widać, że pierwszy div, który ma właściwość przepełnienia ustawioną na inną niż widoczna (ukryta), ma dolny margines na linii podstawowej linii.
Teraz możesz wykonać kilka eksperymentów, aby dodatkowo to zilustrować.
- Ustaw pierwsze przepełnienie div: widoczne (lub całkowicie je usuń) .
- Ustaw drugi przelew div: inny niż widoczny .
- Ustaw przepełnienie obu div: inne niż widoczne .
Teraz przywróć swój bałagan i sprawdź, czy wszystko jest w porządku.
- Przynieś swój pływający div (oczywiście trzeba
zwiększyć szerokość ciała) Widzisz, że to nie ma wpływu.
- Przywróć te same nieparzyste marginesy .
- Ustaw zielony div na przepełnienie: widoczny, jak ustawiłeś w swoim pytaniu (to przesunięcie jest spowodowane wzrostem szerokości ramki z 1px do 5px, więc jeśli dostosujesz lewą stronę , zobaczysz, że nie ma problemu)
- Teraz usuń dodatkowe znaki, które dodałem, aby pomóc w zrozumieniu . (i oczywiście usuń lewy minus)
- Wreszcie zmniejsz szerokość ciała, ponieważ nie potrzebujemy już szerszego.
A teraz wróciliśmy do miejsca, od którego zaczęliśmy.
Mam nadzieję, że odpowiedziałem na twoje pytanie.