Saya mencoba untuk memperbaiki div
sehingga selalu menempel di bagian atas layar, menggunakan:
position: fixed;
top: 0px;
right: 0px;
Namun, div
ada di dalam wadah terpusat. Ketika saya menggunakannya position:fixed
memperbaiki div
relatif ke jendela browser, seperti itu di sisi kanan browser. Sebaliknya, itu harus diperbaiki relatif terhadap wadah.
Saya tahu itu position:absolute
dapat digunakan untuk memperbaiki elemen relatif terhadap div
, tetapi ketika Anda menggulir ke bawah halaman elemen menghilang dan tidak menempel ke atas seperti dengan position:fixed
.
Apakah ada peretasan atau solusi untuk mencapai ini?
css
position
css-position
fixed
Zach Nicodemous
sumber
sumber
Jawaban:
Jawaban singkat:
tidak.(Sekarang dimungkinkan dengan transformasi CSS. Lihat hasil edit di bawah)Jawaban panjang: Masalah dengan menggunakan pemosisian "tetap" adalah ia menghilangkan elemen dari aliran . sehingga tidak dapat diposisikan kembali relatif terhadap induknya karena seolah-olah tidak memilikinya. Namun, jika wadah memiliki lebar tetap yang diketahui, Anda dapat menggunakan sesuatu seperti:
http://jsfiddle.net/HFjU6/1/
Edit (03/2015):
Ini adalah informasi yang sudah ketinggalan zaman. Sekarang dimungkinkan untuk memusatkan konten dengan ukuran dinamis (horizontal dan vertikal) dengan bantuan keajaiban transformasi CSS3. Prinsip yang sama berlaku, tetapi alih-alih menggunakan margin untuk mengimbangi wadah Anda, Anda bisa menggunakannya
translateX(-50%)
. Ini tidak berfungsi dengan trik margin di atas karena Anda tidak tahu berapa banyak untuk mengimbanginya kecuali lebarnya diperbaiki dan Anda tidak dapat menggunakan nilai relatif (seperti50%
) karena itu akan relatif terhadap induk dan bukan elemen itu diaplikasikan ke.transform
berperilaku berbeda. Nilai-nilainya relatif terhadap elemen yang diterapkannya. Jadi,50%
untuktransform
berarti setengah lebar elemen, sedangkan50%
untuk margin adalah setengah dari lebar induk. Ini adalah solusi IE9 +Menggunakan kode yang mirip dengan contoh di atas, saya membuat ulang skenario yang sama menggunakan lebar dan tinggi dinamis sepenuhnya:
Jika Anda ingin pusatnya, Anda bisa melakukannya juga:
Demo:
jsFiddle: Hanya
terpusat secara horizontal jsFiddle: Berpusat secara horizontal dan vertikal
Kredit asli diberikan kepada pengguna aaronk6 karena menunjukkannya kepada saya dalam jawaban ini
sumber
position:fixed
tanpa menentukantop
atauleft
terkadang berhasil? Beberapa browser nampak default elemen ke tempat biasanya, jika itu memiliki posisi normal. stackoverflow.com/questions/8712047/…left:inherit
elemen posisi tetap dapat memaksa browser untuk menghormati offset orangtua.Sebenarnya ini mungkin dan jawaban yang diterima hanya berurusan dengan sentralisasi, yang cukup mudah. Anda juga benar-benar tidak perlu menggunakan JavaScript.
Ini akan memungkinkan Anda menangani setiap skenario:
Set semuanya seperti yang Anda lakukan jika Anda ingin position: absolute dalam posisi: wadah relatif, dan kemudian membuat div posisi tetap baru di dalam div dengan
position: absolute
, tetapi tidak set top dan sifat kiri. Kemudian akan diperbaiki di mana pun Anda inginkan, relatif terhadap wadah.Sebagai contoh:
Sayangnya, saya berharap thread ini mungkin memecahkan masalah saya dengan Android WebKit piksel render kotak-bayangan blur sebagai margin pada unsur-unsur posisi tetap, tetapi tampaknya itu bug.
Bagaimanapun, saya harap ini membantu!
sumber
Ya, menurut spesifikasi, ada cara.
Sementara saya setuju bahwa Graeme Blackwood harus menjadi jawaban yang diterima, karena secara praktis menyelesaikan masalah, perlu dicatat bahwa elemen tetap dapat diposisikan relatif ke wadahnya.
Saya perhatikan secara tidak sengaja ketika melamar
ke tubuh, itu membuat anak tetap relatif terhadap itu (bukan viewport). Jadi elemen
left
dantop
properti tetap saya sekarang relatif terhadap wadah.Jadi saya melakukan riset, dan menemukan bahwa masalah itu sudah dibahas oleh Eric Meyer dan bahkan jika itu terasa seperti "trik", ternyata ini adalah bagian dari spesifikasinya:
http://www.w3.org/TR/css3-transforms/
Jadi, jika Anda menerapkan transformasi apa pun ke elemen induk, itu akan menjadi blok yang berisi.
Tapi...
Masalahnya adalah implementasinya nampak buggy / kreatif, karena elemen-elemennya juga berhenti berperilaku sebagai tetap (walaupun bit ini tampaknya tidak menjadi bagian dari spesifikasi).
Perilaku yang sama akan ditemukan di Safari, Chrome dan Firefox, tetapi tidak di IE11 (di mana elemen tetap akan tetap diperbaiki).
Hal lain yang menarik (tidak terdokumentasi) adalah ketika elemen tetap terdapat di dalam elemen yang ditransformasikan, sedangkan properti
top
danleft
propertinya sekarang akan terkait dengan wadah, menghormatibox-sizing
properti, konteks penggulirannya akan melampaui batas elemen, seolah-olah kotak -ukuran diatur keborder-box
. Untuk beberapa kreatif di luar sana, ini mungkin bisa menjadi mainan :)UJI
sumber
left:
(mengingat itu mengacaukannya)Jawabannya adalah ya, selama Anda tidak mengatur
left: 0
atauright: 0
setelah Anda mengatur posisi div untuk diperbaiki.http://jsfiddle.net/T2PL5/85/
Periksa div sidebar. Itu sudah diperbaiki, tetapi terkait dengan induknya, bukan ke titik tampilan jendela.
sumber
position: sticky
itu adalah cara baru untuk memposisikan elemen yang secara konsep mirip denganposition: fixed
. Perbedaannya adalah bahwa elemen denganposition: sticky
berperilaku sepertiposition: relative
di dalam induknya, sampai ambang offset yang diberikan terpenuhi di viewport.Di Chrome 56 (saat ini beta pada Desember 2016, stabil pada Januari 2017) posisi: sticky sekarang kembali.
https://developers.google.com/web/updates/2016/12/position-sticky
Lebih detail ada di Stick pendaratan Anda! posisi: tanah lengket di WebKit .
sumber
position:sticky
bagus. Didukung oleh semua browser kecuali IE caniuse.com/#feat=css-stickySOLUSI 2019: Anda dapat menggunakan
position: sticky
properti.Berikut adalah contoh CODEPEN yang menunjukkan penggunaan dan juga bagaimana perbedaannya
position: fixed
.Bagaimana perilakunya dijelaskan di bawah ini:
Elemen dengan posisi lengket diposisikan berdasarkan posisi gulir pengguna. Ini pada dasarnya bertindak seperti
position: relative
sampai elemen digulir di luar offset tertentu, dalam hal ini berubah menjadi posisi: diperbaiki. Ketika digulir kembali itu akan kembali ke posisi (relatif) sebelumnya.Ini efek aliran elemen lain di halaman yaitu menempati ruang tertentu di halaman (sama seperti
position: relative
).Jika itu didefinisikan di dalam beberapa wadah, itu diposisikan sehubungan dengan wadah itu. Jika wadah mengalami overflow (gulir), tergantung pada gulir offset itu berubah menjadi posisi: diperbaiki.
Jadi, jika Anda ingin mencapai fungsi tetap tetapi di dalam wadah, gunakan sticky.
sumber
position: sticky
itu. Banyak membantu, terima kasih!Ambil saja gaya atas dan kiri dari posisi tetap. Ini sebuah contoh
Div #content akan diletakkan di mana pun div induk berada, tetapi akan diperbaiki di sana.
sumber
Saya telah membuat plugin jQuery ini untuk menyelesaikan masalah serupa yang saya alami di mana saya memiliki wadah terpusat (data tabular), dan saya ingin header untuk memperbaiki ke bagian atas halaman ketika daftar digulir, namun saya ingin itu berlabuh ke data tabular sehingga akan berada di mana pun saya meletakkan wadah (tengah, kiri, kanan) dan juga memungkinkannya bergerak ke kiri dan kanan dengan halaman saat digulir secara horizontal.
Berikut ini tautan ke plugin jQuery ini yang dapat mengatasi masalah ini:
https://github.com/bigspotteddog/ScrollToFixed
Deskripsi plugin ini adalah sebagai berikut:
Plugin ini digunakan untuk memperbaiki elemen ke bagian atas halaman, jika elemen tersebut akan digeser keluar dari pandangan, secara vertikal; Namun, itu memungkinkan elemen untuk terus bergerak ke kiri atau ke kanan dengan gulir horizontal.
Diberikan marginTop pilihan, elemen akan berhenti bergerak vertikal ke atas setelah gulir vertikal telah mencapai posisi target; tetapi, elemen masih akan bergerak secara horizontal saat halaman digulir ke kiri atau kanan. Setelah halaman digulirkan kembali melewati posisi target, elemen akan dikembalikan ke posisi semula di halaman.
Plugin ini telah diuji di Firefox 3/4, Google Chrome 10/11, Safari 5, dan Internet Explorer 8/9.
Penggunaan untuk kasus khusus Anda:
sumber
Saya harus melakukan ini dengan iklan yang klien saya ingin duduk di luar area konten. Saya hanya melakukan yang berikut dan itu bekerja seperti pesona!
sumber
Dua elemen HTML dan CSS murni (browser modern)
Lihat contoh jsFiddle ini.Ubah ukuran dan lihat bagaimana elemen-elemen tetap bergerak dengan elemen-elemen terapung yang ada di dalamnya. Gunakan bilah gulir paling dalam untuk melihat bagaimana gulir akan bekerja di sebuah situs (elemen-elemen tetap tetap diperbaiki).
Seperti banyak orang di sini telah menyatakan, salah satu kunci tidak menetapkan pengaturan posisi pada
fixed
elemen (tidak adatop
,right
,bottom
, atauleft
nilai-nilai).Sebaliknya, kami menempatkan semua elemen tetap (perhatikan bagaimana kotak terakhir memiliki empat dari mereka) pertama di dalam kotak yang harus diposisikan, seperti:
Lalu kami menggunakan
margin-top
danmargin-left
"memindahkan" mereka terkait dengan wadahnya, seperti yang dilakukan CSS ini:Perhatikan bahwa karena
fixed
elemen mengabaikan semua elemen tata letak lainnya, wadah terakhir di biola kami dapat memiliki beberapafixed
elemen, dan masih memiliki semua elemen yang terkait dengan sudut kiri atas. Tapi ini hanya benar jika mereka semua ditempatkan pertama kali dalam wadah, karena biola perbandingan ini menunjukkan bahwa jika tersebar dalam konten wadah, penentuan posisi menjadi tidak dapat diandalkan .Apakah bungkusnya statis , relatif , atau absolut dalam penentuan posisi, itu tidak masalah.
sumber
Anda dapat mencoba plugin jQuery saya, FixTo .
Pemakaian:
sumber
Solusi aneh lain untuk mencapai posisi tetap relatif adalah mengubah wadah Anda menjadi iframe, sehingga elemen tetap Anda dapat diperbaiki ke viewport wadahnya dan bukan seluruh halaman.
sumber
Dengan CSS murni Anda tidak dapat mengaturnya; setidaknya saya belum. Namun Anda dapat melakukannya dengan jQuery dengan sangat sederhana. Saya akan menjelaskan masalah saya, dan dengan sedikit perubahan Anda dapat menggunakannya.
Jadi sebagai permulaan, saya ingin elemen saya memiliki top tetap (dari atas jendela), dan komponen kiri mewarisi dari elemen induk (karena elemen induk berpusat). Untuk mengatur komponen kiri, cukup masukkan elemen Anda ke dalam induk dan atur
position:relative
untuk elemen induk.Maka Anda perlu tahu berapa banyak dari atas elemen Anda saat bilah gulir ada di atas (y nol digulir); ada dua opsi lagi. Pertama adalah statis (beberapa angka) atau Anda harus membacanya dari elemen induk.
Dalam kasus saya ini 150 piksel dari statis atas. Jadi ketika Anda melihat 150 berapa elemen dari atas ketika kita belum menggulir.
CSS
jQuery
sumber
Ini mudah (sesuai HTML di bawah)
Triknya adalah untuk TIDAK menggunakan atas atau kiri pada elemen (div) dengan "position: fix;". Jika ini tidak ditentukan, elemen "konten tetap" akan muncul RELATIF ke elemen terlampir (div dengan "posisi: relatif;") BUKAN DARI relatif ke jendela browser !!!
Di atas memungkinkan saya menemukan tombol "X" penutup di bagian atas banyak teks dalam div dengan pengguliran vertikal. "X" berada di tempatnya (tidak bergerak dengan teks yang digulir, namun bergerak ke kiri atau ke kanan dengan wadah div penutup ketika pengguna mengubah ukuran lebar jendela browser! Dengan demikian "diperbaiki" secara vertikal, tetapi diposisikan relatif terhadap elemen penutup secara horizontal!
Sebelum saya mulai bekerja, "X" digulir ke atas dan tidak terlihat ketika saya menggulirkan konten teks ke bawah.
Permintaan maaf karena tidak menyediakan fungsi javascript hideDiv () saya, tetapi akan membuat posting ini lebih lama tidak perlu. Saya memilih untuk menyimpannya sesingkat mungkin.
sumber
Saya membuat jsfiddle untuk mendemonstrasikan cara kerjanya menggunakan transformasi.
HTML
CSS
jQuery
https://jsfiddle.net/bx6ktwnn/1/
sumber
Saya memiliki masalah yang sama, salah satu anggota tim kami memberi saya solusi. Untuk mengizinkan posisi fix div dan relatif ke div lainnya, solusi kami adalah menggunakan wadah ayah bungkus div fix dan gulir div.
css
sumber
sumber
Ya itu mungkin selama Anda tidak mengatur posisi (
top
atauleft
, dll.) Darifixed
elemen Anda (Anda masih dapat menggunakanmargin
untuk mengatur posisi relatif, meskipun). Simon Bos memposting tentang ini beberapa waktu lalu .Namun jangan berharap elemen tetap untuk menggulir dengan kerabat tidak tetap.
Lihat demo di sini .
sumber
Saya melakukan sesuatu seperti itu beberapa waktu lalu. Saya cukup baru dalam JavaScript, jadi saya yakin Anda dapat melakukan lebih baik, tetapi ini adalah titik awalnya:
Anda perlu mengatur lebar Anda, dan kemudian mendapatkan lebar jendela dan mengubah margin setiap beberapa detik. Saya tahu ini berat, tetapi berhasil.
sumber
Itu mungkin jika Anda menggunakan JavaScript. Dalam hal ini, plugin jQuery Sticky-Kit :
sumber
Proyek saya adalah .NET ASP Core 2 MVC Angular 4 template dengan Bootstrap 4. Menambahkan "sticky-top" ke dalam html komponen aplikasi utama (yaitu app.component.html) pada baris pertama berfungsi, sebagai berikut:
Apakah itu konvensi atau apakah saya terlalu menyederhanakan ini?
sumber
Ketika Anda menggunakan
position:fixed
aturan CSS dan mencoba menerapkantop
/left
/right
/bottom
posisikan elemen relatif ke jendela.Solusinya adalah menggunakan
margin
properti alih-alihtop
/left
/right
/bottom
sumber
Periksa ini:
sumber