Jak mogę uzyskać następującą strukturę bez użycia tabel lub JavaScript? Białe obramowania reprezentują krawędzie div i nie mają związku z pytaniem.
Rozmiar obszaru pośrodku będzie się różnić, ale będzie miał dokładne wartości pikseli, a cała struktura powinna być skalowana zgodnie z tymi wartościami. Aby to uprościć, potrzebuję sposobu ustawienia szerokości „100% - n px” na górne środkowe i dolne środkowe divy.
Doceniłbym czyste rozwiązanie dla różnych przeglądarek, ale w przypadku, gdy nie jest to możliwe, hacki CSS się sprawdzą.
Oto bonus. Kolejna struktura, z którą się zmagam, i ostatecznie używam tabel lub JavaScript. Jest nieco inny, ale wprowadza nowe problemy. Używam go głównie w systemie okienkowym opartym na jQuery, ale chciałbym zachować układ poza skryptem i kontrolować tylko jeden element (środkowy).
Odpowiedzi:
Możesz użyć zagnieżdżonych elementów i wypełnienia, aby uzyskać lewą i prawą krawędź paska narzędzi. Domyślna szerokość
div
elementu toauto
, co oznacza, że wykorzystuje on dostępną szerokość. Następnie możesz dodać dopełnienie do elementu, który nadal będzie utrzymywał dostępną szerokość.Oto przykład, którego można użyć do umieszczania obrazów jako zaokrąglonych narożników po lewej i prawej stronie oraz obrazu środkowego, który powtarza się między nimi.
HTML:
CSS:
źródło
>
operatora wciąż nie było wystarczająco dobre, aby było niezawodne.calc
w IE 8 lub bieżących wersjach Anroid Browser lub Opera. caniuse.com/#search=calcNowy sposób, na który właśnie natknąłem się: css
calc()
:Źródło: szerokość css 100% minus 100px
źródło
Podczas gdy odpowiedź Guffa działa w wielu sytuacjach, w niektórych przypadkach możesz nie chcieć, aby lewy i / lub prawy kawałek paddingu był rodzicem środkowego diva. W takich przypadkach możesz użyć kontekstu formatowania bloków na środku i przesunąć div padding lewy i prawy. Oto kod
HTML:
CSS:
Wydaje mi się, że ta hierarchia elementów jest bardziej naturalna w porównaniu do zagnieżdżonych div div i lepiej reprezentuje to, co jest na stronie. Z tego powodu granice, wypełnienie i margines można normalnie zastosować do wszystkich elementów (tj .: ta „naturalność” wykracza poza styl i ma konsekwencje).
Zauważ, że działa to tylko dla div i innych elementów, które mają wspólną właściwość „domyślnie wypełniają 100% szerokości”. Dane wejściowe, tabele i ewentualnie inne będą wymagać zawinięcia ich w div kontenera i dodanie trochę więcej css, aby przywrócić tę jakość. Jeśli masz pecha, aby znaleźć się w takiej sytuacji, skontaktuj się ze mną, a ja wykopię css.
jsfiddle tutaj: jsfiddle.net/RgdeQ
Cieszyć się!
źródło
Możesz skorzystać z układu Flexbox . Musisz ustawić
flex: 1
element, który musi mieć odpowiednio dynamiczną szerokość lub wysokośćflex-direction: row and column
.Szerokość dynamiczna:
HTML
CSS
Wynik:
Pokaż fragment kodu
Wysokość dynamiczna:
HTML
CSS
Wynik:
Pokaż fragment kodu
źródło
Typowym sposobem na to jest, jak opisano w zagnieżdżonych elementach Guffa. To trochę smutne, gdy trzeba dodać dodatkowe znaczniki, aby uzyskać potrzebne haki, ale w praktyce jest to div otoki lub nikogo nie skrzywdzi.
Jeśli musisz to zrobić bez dodatkowych elementów (np. Gdy nie masz kontroli nad znacznikami strony), możesz użyć rozmiaru pudełka , który ma całkiem przyzwoitą, ale niepełną lub prostą obsługę przeglądarki. Prawdopodobnie więcej zabawy niż poleganie na skryptach.
źródło
Może jestem głupi, ale czy to nie jest oczywiste rozwiązanie?
Innym sposobem, który wymyśliłem w chromie, jest jeszcze prostszy, ale człowieku, to hack!
To samo powinno wypełnić resztę wiersza poziomo, tak jak robią to komórki tabeli. Występują jednak dziwne problemy z przekraczaniem 100% jego elementu nadrzędnego, ale ustawienie szerokości na wartość procentową naprawia to.
źródło
Możemy to bardzo łatwo osiągnąć za pomocą Flex-Box.
Jeśli mamy trzy elementy, takie jak Header, MiddleContainer i Footer. I chcemy nadać pewną stałą wysokość nagłówkom i stopkom. wtedy możemy napisać w ten sposób:
W przypadku React / RN (domyślnie są to „display” jako flex i „flexDirection” jako kolumna), w web css będziemy musieli określić kontener kontenera lub kontener zawierający je jako display: „flex”, flex-direction: „column” jak poniżej:
źródło
co jeśli div zawijania był w 100% i użyłeś dopełniania dla liczby pikseli, to jeśli dopełnianie # musi być dynamiczne, możesz łatwo użyć jQuery do zmodyfikowania ilości dopełniania, gdy uruchamiają się zdarzenia.
źródło
Miałem podobny problem, w którym chciałem mieć baner na górze ekranu, który miał jeden obraz po lewej stronie i powtarzający się obraz po prawej stronie do krawędzi ekranu. Skończyło się to tak:
CSS:
Kluczem był właściwy tag. Zasadniczo określam, że chcę, aby powtarzał się od 131 pikseli z lewej do 0 pikseli z prawej.
źródło
W niektórych kontekstach możesz wykorzystać ustawienia marginesów, aby skutecznie określić „szerokość 100% minus N pikseli”. Zobacz zaakceptowaną odpowiedź na to pytanie .
źródło