Mam stronę (XHTML Strict), na której umieszczam obraz obok zwykłych akapitów tekstu. Wszystko idzie dobrze, z wyjątkiem sytuacji, gdy zamiast akapitów używana jest lista. Punktory listy nachodzą na pływający obraz.
Zmiana marginesu listy lub elementów listy nie pomaga. Margines jest obliczany od lewej strony, ale pływak wypycha elementów listy na prawo wewnątrz w li
sobie. Tak więc margines pomaga tylko wtedy, gdy poszerzę go niż obraz.
Pływak listy obok obrazu również działa, ale nie wiem, kiedy lista znajduje się obok pływaka. Nie chcę przesuwać każdej listy w mojej zawartości, aby to naprawić. Ponadto ruch w lewo powoduje zakłócenie układu, gdy obraz jest przesuwany w prawo zamiast na lewo od listy.
Ustawienie li { list-style-position: inside }
przenosi punktory wraz z zawartością, ale powoduje również, że zawijane wiersze zaczynają się w linii z punktorem, a nie w linii powyżej.
Problem jest oczywiście spowodowany wyrenderowaniem pocisku na zewnątrz pudełka, a pływak wypycha zawartość pudełka w prawo (nie samo pudełko). W ten sposób IE i FF radzą sobie z tą sytuacją i o ile wiem, nie źle zgodnie ze specyfikacją. Pytanie brzmi, jak mogę temu zapobiec?
Dodanie ulepszenia do rozwiązania Glen E. Ivey :
http://jsfiddle.net/mblase75/TJELt/
Wolę tę technikę, ponieważ działa, gdy lista musi opływać pływający obraz, a
overflow: hidden
technika nie. Jednak konieczne jest również dodaniepadding-right: 1em
do,li
aby zapobiec przepełnieniu pojemnika.źródło
position: relative;
do elementu zamówienia, stwarza to problem ze stosem z zawartością pływającą. Zauważyłem (w Chrome i Firefox), że trudno było najechać kursorem i kliknąć linki w pływającej treści. Rozwiązaniem dla mnie było dodanieposition: relative; z-index: 1;
elementu pływającego, co wydawało się rozwiązać problem z układaniem.ul {overflow: hidden;}
rozwiązano ten problem we wszystkich przeglądarkach, powyższe rozwiązanie było jedynym działającym rozwiązaniem tego problemu z Prince XML , konwerterem XHTML + CSS3 na PDF.Tutaj pojawia się właściwość „display”. Ustaw CSS poniżej, aby lista działała razem z zawartością pływającą.
wyświetlacz: stół; działa z zawartością pływającą (wypełniając lukę), ale bez ukrywania zawartości za nią. Podobnie jak stół :-)
EDYCJA: Pamiętaj, aby dodać klasę, aby wyodrębnić listy, dla których chcesz to zrobić. Np. „Ul.in-content” lub bardziej ogólnie „.content ul”
źródło
Wypróbuj list-style-position: inside, aby zmienić układ punktorów.
źródło
list-style-position:inside
byłoby świetnym rozwiązaniem, ale powoduje, że zawijane wiersze zaczynają się w linii z punktorem, a nie w linii powyżej.Pod adresem http://archivist.incutio.com/viewlist/css-discuss/106382 znalazłem sugestię, która w moim przypadku zadziałała: nadaj styl elementom „li”:
Gdzie zamieniasz „1em” na szerokość lewego dopełnienia / marginesu, jaką miałyby elementy listy, gdyby nie było pływaka. Działa to świetnie w mojej aplikacji, nawet obsługując przypadek, w którym dół pływaka występuje na środku list - punktory przesuwają się z powrotem do (lokalnego) lewego marginesu tuż po prawej stronie.
źródło
Dlaczego
overflow: hidden
działaRozwiązanie jest tak proste, jak:
Pole bloku z
overflow:
innym niżvisible
ustanawia nowy kontekst formatowania bloku dla swojej zawartości. Zalecenie W3C: http://www.w3.org/TR/CSS2/visuren.html#block-formattingPrzykład
Przyciski na mojej stronie , które są
<li>
zamaskowane, są wykonane w ten sposób. Zmniejsz widoczny obszar (okno) przeglądarki, aby zobaczyć wcięcie w akcji .Powiązane odpowiedzi
Artykuł z przykładami
źródło
Dodając przynajmniej dla mnie
overflow: auto;
swojeul
prace.Aktualizacja
Zaktualizowałem jsfiddle, aby wizualizować, co się dzieje. Mając
ul
obok pływającegoimg
, zawartośćul
będzie wypychana przez pływak, ale nie przez rzeczywisty pojemnik. Dodającoverflow: auto
całeul
-box zostanie wypchnięty przez float zamiast tylko zawartości.źródło
Możesz przypisać
position: relative; left: 10px;
doli
. (Możesz dodatkowo chcieć nadać mu literęmargin-right: 10px;
, w przeciwnym razie może stać się zbyt szeroki po prawej stronie).Lub, jeśli chcesz użyć
float
doul
- jak sugerowali inni - prawdopodobnie możesz zatrzymać resztę przed pływaniem na prawo od ul, używającclear: left
na elemencie następującym po ul.źródło
Używam tego do rozwiązania tego problemu:
źródło
Zrzeczenie się
Listy obok elementów pływających powodują problemy. Moim zdaniem najlepszym sposobem zapobiegania tego rodzaju pływającym problemom jest unikanie pływających obrazów, które przecinają się z treścią. Pomoże również, gdy będziesz musiał wspierać projektowanie responsywne.
Prosty projekt z wyśrodkowanymi obrazami między akapitami będzie wyglądał bardzo atrakcyjnie i będzie o wiele łatwiejszy w obsłudze niż próba uzyskania zbyt fantazyjnego. Jest też o krok od a
<figure>
.Ale naprawdę chcę pływających obrazów!
Ok, więc jeśli jesteś
szalonauporczywy wystarczająco, aby kontynuować tę ścieżkę, istnieje kilka technik, które mogą być użyte.Najprościej jest użyć listy
overflow: hidden
luboverflow: scroll
tak, aby lista była zasadniczo zawinięta, co powoduje cofnięcie wypełnienia do miejsca, w którym jest przydatne:Ta technika ma jednak kilka problemów. Jeśli lista stanie się długa, w rzeczywistości nie zawija się wokół obrazu, co w zasadzie podważa cały cel użycia
float
na obrazie.Ale naprawdę chcę zawijać listy!
Ok, więc jeśli jesteś jeszcze
bardziej szalony,bardziej wytrwały i absolutnie musisz kontynuować tę ścieżkę, istnieje inna technika, której można użyć do zawijania elementów listy i utrzymywania pocisków.Zamiast wypełniać
<ul>
i próbować sprawić, by zachowywał się ładnie z pociskami (czego nigdy nie chce robić), wyjmij te kule<ul>
i daj je<li>
s. Kule są niebezpieczne, a po<ul>
prostu nie są wystarczająco odpowiedzialne, aby właściwie się z nimi obchodzić.To zachowanie zawijania może robić dziwne rzeczy w złożonej zawartości, więc nie polecam dodawania go domyślnie. O wiele łatwiej jest ustawić go jako coś, na co można się zdecydować, niż coś, co należy zastąpić.
źródło
Spróbuj wykonać następujące czynności na swoim znaczniku UL. Powinno to zająć się kulami nakładającymi się na twój obraz i nie musisz zepsuć lewego wyrównania spowodowanego przez
list-position: inside
.źródło
Sam się z tym zmagałem. Najlepsze, jakie udało mi się osiągnąć, to:
W rzeczywistości tekst nie jest wcięty, ale widać punktor.
źródło
Zmieniono w celu aktualizacji na podstawie komentarza OP
ok, a następnie podziel go na 2 zagnieżdżone razem elementy div
spróbuj zmienić ul li css na
ul {float: left; tło: niebieskie; }
źródło
Po walce z tym interesującym problemem w kilku projektach i zbadaniu, dlaczego tak się dzieje, w końcu wierzę, że znalazłem zarówno działające, jak i „responsywne” rozwiązanie.
Oto magiczna sztuczka, przykład na żywo: http://jsfiddle.net/superKalo/phabbtnx/
źródło
display: flex;
doli
, aby punktor był wyśrodkowany w pionie, kiedy zmieniam rozmiar czcionki:before
części.Pracując w systemie LMS bez dostępu do głównego dokumentu, łatwiej było
margin-right: 20px
zastosować styl wbudowany dla obrazu. Co zawdzięczam tej stronie .źródło
Spróbuj tego:
Jeśli chcesz, żeby poszły w lewo, po prostu wpisz wartość - ## px.
źródło
lub możesz to zrobić:
a następnie usuń całą stylizację z li
źródło
Co powiesz na to?
źródło
margin-left: auto spowoduje wyrównanie elementu do prawej strony. Ustaw wysokość i szerokość żądanego elementu - w moim przypadku jest to obraz tła w div wewnątrz
źródło
Możesz również spróbować przesunąć kursor w
ul
lewo i zdefiniować odpowiedniwidth
dla niego, tak aby unosił się obok obrazu.Coś takiego jak ten jsfiddle ?
źródło
Naprawiłem to z
źródło
źródło
Dodaj
display:table;
doul
:źródło