Diberi templat di mana HTML tidak dapat dimodifikasi karena persyaratan lain, bagaimana mungkin menampilkan (mengatur ulang) di div
atas yang lain div
ketika mereka tidak dalam urutan itu dalam HTML? Keduanya div
berisi data yang bervariasi dalam tinggi dan lebar.
<div id="wrapper">
<div id="firstDiv">
Content to be below in this situation
</div>
<div id="secondDiv">
Content to be above in this situation
</div>
</div>
Other elements
Semoga jelas bahwa hasil yang diinginkan adalah:
Content to be above in this situation
Content to be below in this situation
Other elements
Ketika dimensi diperbaiki mudah untuk memposisikannya di tempat yang diperlukan, tetapi saya perlu beberapa ide ketika kontennya variabel. Demi skenario ini, anggap saja lebarnya 100% untuk keduanya.
Saya secara khusus mencari solusi CSS saja (dan mungkin harus dipenuhi dengan solusi lain jika itu tidak berhasil).
Ada elemen lain yang mengikuti ini. Sebuah saran bagus disebutkan mengingat skenario terbatas yang saya tunjukkan — mengingat bahwa itu mungkin jawaban terbaik, tetapi saya juga ingin memastikan elemen-elemen berikut ini tidak terpengaruh.
img { max-width: 100% }
tidak akan berfungsi di dalam elemen yang disusun ulang.Solusi khusus CSS (berfungsi untuk IE10 + ) - gunakan
order
properti Flexbox :Demo: http://jsfiddle.net/hqya7q6o/596/
Info lebih lanjut: https://developer.mozilla.org/en-US/docs/Web/CSS/order
sumber
#flex { display: flex; flex-direction: column; }
akan menampilkan baris lebar 100%. jsfiddle.net/2fcj8s9etransform
dengan menggunakan dukungan browser yang lebih luasSeperti yang orang lain katakan, ini bukan sesuatu yang ingin Anda lakukan di CSS. Anda dapat menggunakannya dengan posisi absolut dan margin aneh, tapi itu bukan solusi yang kuat. Opsi terbaik dalam kasus Anda adalah beralih ke javascript. Di jQuery, ini adalah tugas yang sangat sederhana:
atau lebih umum:
sumber
Ini dapat dilakukan menggunakan Flexbox.
Buat wadah yang menggunakan kedua tampilan: flex dan flex-flow: kolom-mundur .
Sumber:
sumber
Sama sekali tidak ada cara untuk mencapai apa yang Anda inginkan melalui CSS saja sambil mendukung agen pengguna pra-flexbox ( kebanyakan IE lama ) - kecuali :
Jika hal di atas benar maka Anda dapat melakukan apa yang Anda inginkan dengan benar-benar memposisikan elemen -
Sekali lagi, jika Anda tidak tahu ketinggian yang diinginkan untuk setidaknya #firstDiv, tidak mungkin Anda dapat melakukan apa yang Anda inginkan melalui CSS saja. Jika ada konten ini yang dinamis, Anda harus menggunakan javascript.
sumber
Inilah solusinya:
Tapi saya curiga Anda memiliki beberapa konten yang mengikuti ...
sumber
Dengan modul tata letak flexbox CSS3, Anda dapat memesan divs.
sumber
Jika Anda tahu, atau dapat menegakkan ukuran untuk elemen yang akan menjadi bagian atas, Anda bisa menggunakannya
Di css Anda dan berikan posisi mereka pada div.
jika tidak, javascript sepertinya satu-satunya cara:
atau yang serupa.
sunting: Saya baru saja menemukan ini yang mungkin berguna: dokumen w3 css3 pindah ke
sumber
Margin teratas negatif dapat mencapai efek ini, tetapi mereka harus disesuaikan untuk setiap halaman. Misalnya, markup ini ...
... dan CSS ini ...
... akan memungkinkan Anda untuk menarik paragraf kedua di atas paragraf pertama.
Tentu saja, Anda harus men-tweak CSS Anda secara manual untuk panjang deskripsi yang berbeda sehingga paragraf intro melonjak jumlah yang sesuai, tetapi jika Anda memiliki kontrol terbatas atas bagian-bagian lain dan kontrol penuh atas markup dan CSS maka ini mungkin menjadi pilihan .
sumber
Nah, dengan sedikit positioning absolut dan beberapa pengaturan margin yang cerdik, saya bisa mendekati, tapi itu tidak sempurna atau cantik:
"Margin-top: 4em" adalah bit yang sangat jahat: margin ini perlu disesuaikan sesuai dengan jumlah konten di firstDiv. Bergantung pada kebutuhan Anda yang sebenarnya, ini mungkin saja terjadi, tetapi saya tetap berharap bahwa seseorang mungkin dapat membangun ini untuk solusi yang solid.
Komentar Eric tentang JavaScript mungkin harus dikejar.
sumber
Ini hanya dapat dilakukan dengan CSS!
Silakan periksa jawaban saya untuk pertanyaan serupa ini:
https://stackoverflow.com/a/25462829/1077230
Saya tidak ingin menggandakan posting jawaban saya tetapi singkatnya adalah bahwa orang tua perlu menjadi elemen flexbox. Misalnya:
(hanya menggunakan awalan vendor webkit di sini.)
Kemudian, bertukar div di sekitar dengan menunjukkan pesanan mereka dengan:
sumber
Di CSS Anda, apungkan div pertama dengan kiri atau kanan. Apung div kedua dengan kiri atau kanan sama dengan yang pertama. Terapkan
clear: left
atauright
sama dengan dua div di atas untuk div kedua.Sebagai contoh:
sumber
Jika Anda hanya menggunakan css, Anda bisa menggunakan flex.
sumber
Saya sedang mencari cara untuk mengubah perintah div hanya untuk versi mobile sehingga saya dapat menata dengan baik. Terima kasih kepada nickf reply, saya harus membuat kode ini yang bekerja dengan baik untuk apa yang saya inginkan, jadi saya berbagi dengan kalian:
sumber
Solusi dengan dukungan browser yang lebih besar daripada flexbox (berfungsi di IE≥9):
Berbeda dengan
display: table;
solusi , solusi ini bekerja ketika.wrapper
memiliki jumlah anak berapa pun.sumber
Cukup gunakan flex untuk div induk dengan menentukan
display: flex
danflex-direction : column
. Kemudian gunakan perintah untuk menentukan div anak mana yang lebih dulusumber
CSS seharusnya tidak digunakan untuk merestrukturisasi backend HTML. Namun, adalah mungkin jika Anda mengetahui ketinggian kedua elemen yang terlibat dan merasa peretasan. Juga, pemilihan teks akan kacau ketika pergi antara divs, tapi itu karena urutan HTML dan CSS berlawanan.
Di mana XXX dan YYY adalah ketinggian firstDiv dan secondDiv masing-masing. Ini akan bekerja dengan elemen tambahan, tidak seperti jawaban teratas.
sumber
Saya memiliki kode yang jauh lebih baik, dibuat oleh saya, itu sangat besar, hanya untuk menunjukkan kedua hal ... buat tabel 4x4 dan selaraskan vertikal lebih dari satu sel.
Itu tidak menggunakan hack IE, tidak ada vertical-align: middle; sama sekali...
Itu tidak digunakan untuk tampilan-tabel centering vertikal, display: table-rom; display: table-cell;
Menggunakan trik wadah yang memiliki dua divs, satu disembunyikan (posisi bukan yang benar tetapi membuat orang tua memiliki ukuran variabel yang benar), satu terlihat setelah disembunyikan tetapi dengan atas: -50%; jadi penggerak untuk memperbaiki posisi.
Lihat kelas div yang menghasilkan trik: BloqueTipoContenedor BloqueTipoContenedor_VerticalmenteCentrado BloqueTipoContenido_VerticalmenteCentrado_Oculto BloqueTipoContenido_VerticalmenteCentrado_Visible
Mohon maaf karena menggunakan bahasa Spanyol pada nama kelas (itu karena saya berbicara bahasa Spanyol dan ini sangat rumit sehingga jika saya menggunakan bahasa Inggris saya tersesat).
Kode lengkap:
sumber
Agak terlambat ke pesta, tetapi Anda juga bisa melakukan ini:
sumber
Atau atur posisi absolut ke elemen dan atur margin dengan mendeklarasikannya dari tepi halaman, bukan dari tepi objek. Gunakan% karena lebih cocok untuk ukuran layar lain, dll. Ini adalah bagaimana saya mengatasi masalah ini ... Terima kasih, harap ini yang Anda cari ...
sumber
Untuk solusi CSS Only 1. Ketinggian wrapper harus diperbaiki atau 2. tinggi div kedua harus diperbaiki
sumber
sumber
Mudah dengan css, cukup gunakan
display:block
danz-index
propertiBerikut ini sebuah contoh:
HTML:
CSS:
Sunting: Adalah baik untuk mengatur beberapa
background-color
agardiv-s
dapat melihat sesuatu dengan benar.sumber
Saya punya cara sederhana untuk melakukan ini.
sumber