Saya mencoba membuat halaman sederhana dengan CSS Grid.
Apa yang saya gagal lakukan adalah memusatkan teks dari HTML ke masing-masing sel kisi.
Saya sudah mencoba menempatkan konten dalam div
s terpisah baik di dalam maupun di luar left_bg
dan right_bg
pemilih dan bermain dengan beberapa properti CSS tidak berhasil.
Bagaimana saya melakukan ini?
html,
body {
margin: 0;
padding: 0;
}
.container {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: 100vh;
grid-gap: 0px 0px;
}
.left_bg {
display: subgrid;
background-color: #3498db;
grid-column: 1 / 1;
grid-row: 1 / 1;
z-index: 0;
}
.right_bg {
display: subgrid;
background-color: #ecf0f1;
grid-column: 2 / 2;
grid_row: 1 / 1;
z-index: 0;
}
.left_text {
grid-column: 1 / 1;
grid-row: 1 / 1;
position: relative;
z-index: 1;
justify-self: center;
font-family: Raleway;
font-size: large;
}
.right_text {
grid-column: 2 / 2;
grid_row: 1 / 1;
position: relative;
z-index: 1;
justify-self: center;
font-family: Raleway;
font-size: large;
}
<div class="container">
<!--everything on the page-->
<div class="left_bg">
<!--left background color of the page-->
</div>
</div>
<div class="right_bg">
<!--right background color of the page-->
</div>
<div class="left_text">
<!--left side text content-->
<p>Review my stuff</p>
<div class="right_text">
<!--right side text content-->
<p>Hire me!</p>
</div>
</div>
Jawaban:
Jawaban ini memiliki dua bagian utama:
Jika Anda hanya tertarik dengan solusinya, lewati bagian pertama.
Struktur dan Lingkup tata letak Grid
Untuk memahami sepenuhnya bagaimana pemusatan bekerja dalam wadah kisi, penting untuk terlebih dahulu memahami struktur dan cakupan tata letak kisi.
Struktur HTML wadah kotak memiliki tiga tingkatan:
Masing-masing level ini independen dari yang lain, dalam hal menerapkan properti grid.
The lingkup dari wadah grid terbatas pada hubungan orangtua-anak.
Ini berarti bahwa wadah kotak selalu orang tua dan item kotak selalu menjadi anak. Properti Grid hanya berfungsi dalam hubungan ini.
Keturunan wadah kotak di luar anak-anak bukan bagian dari tata letak kotak dan tidak akan menerima properti kotak. (Setidaknya tidak sampai
subgrid
fitur tersebut diimplementasikan, yang akan memungkinkan keturunan item kisi menghormati garis-garis wadah utama.)Berikut adalah contoh konsep struktur dan ruang lingkup yang dijelaskan di atas.
Bayangkan sebuah kotak seperti tic-tac-toe-like.
Anda ingin X dan O dipusatkan di setiap sel.
Jadi, Anda menerapkan pemusatan pada level kontainer:
Tetapi karena struktur dan cakupan tata letak kisi,
justify-items
pada wadah memusatkan item kisi, bukan konten (setidaknya tidak secara langsung).Tampilkan cuplikan kode
Masalah yang sama dengan
align-items
: Konten dapat dipusatkan sebagai produk sampingan, tetapi Anda kehilangan desain tata letak.Tampilkan cuplikan kode
Untuk memusatkan konten Anda perlu mengambil pendekatan yang berbeda. Merujuk kembali pada struktur dan cakupan tata letak kisi, Anda perlu memperlakukan item kisi sebagai induk dan konten sebagai anak.
Tampilkan cuplikan kode
Demo jsFiddle
Enam Metode untuk Pemusatan di CSS Grid
Ada beberapa metode untuk memusatkan item kisi dan kontennya.
Berikut kisi dasar 2x2:
Flexbox
Untuk cara sederhana dan mudah untuk memusatkan isi item kisi, gunakan flexbox.
Lebih khusus, jadikan item kisi-kisi menjadi wadah fleksibel.
Tidak ada konflik, pelanggaran spesifikasi atau masalah lain dengan metode ini. Ini bersih dan valid.
Tampilkan cuplikan kode
Lihat posting ini untuk penjelasan lengkap:
Tata Letak Kotak
Dengan cara yang sama bahwa item fleksibel juga bisa menjadi wadah fleksibel, item kotak juga bisa menjadi wadah kotak. Solusi ini mirip dengan solusi flexbox di atas, kecuali pemusatan dilakukan dengan properti grid, bukan flex.
Tampilkan cuplikan kode
auto
marginGunakan
margin: auto
untuk memusatkan item kisi secara vertikal dan horizontal.Tampilkan cuplikan kode
Untuk memusatkan konten item kisi Anda perlu membuat item menjadi wadah kisi (atau melenturkan), bungkus item anonim dalam elemen mereka sendiri ( karena mereka tidak dapat langsung ditargetkan oleh CSS ), dan menerapkan margin ke elemen baru.
Tampilkan cuplikan kode
Properti Alignment Box
Saat mempertimbangkan menggunakan properti berikut untuk menyelaraskan item kisi, baca bagian
auto
margin di atas.align-items
justify-items
align-self
justify-self
https://www.w3.org/TR/css-align-3/#property-index
text-align: center
Untuk memusatkan konten secara horizontal dalam item kisi, Anda dapat menggunakan
text-align
properti.Tampilkan cuplikan kode
Perhatikan bahwa untuk pemusatan vertikal,
vertical-align: middle
tidak akan berfungsi.Ini karena
vertical-align
properti hanya berlaku untuk inline dan wadah sel-tabel.Tampilkan cuplikan kode
Orang mungkin mengatakan bahwa
display: inline-grid
membangun wadah tingkat inline, dan itu akan benar. Jadi mengapa tidakvertical-align
berfungsi di item kisi?Alasannya adalah bahwa dalam konteks pemformatan kisi , item diperlakukan sebagai elemen tingkat blok.
Dalam konteks pemformatan blok , sesuatu yang
vertical-align
awalnya dirancang untuk properti itu, browser tidak berharap menemukan elemen level blok dalam wadah level inline. Itu HTML tidak valid.Pemosisian CSS
Terakhir, ada solusi pemusatan CSS umum yang juga berfungsi di Grid: penentuan posisi absolut
Ini adalah metode yang baik untuk memusatkan objek yang perlu dihapus dari aliran dokumen. Misalnya, jika Anda ingin:
Cukup atur
position: absolute
elemen yang akan dipusatkan, danposition: relative
pada leluhur yang akan berfungsi sebagai blok yang berisi (biasanya induknya). Sesuatu seperti ini:Tampilkan cuplikan kode
Berikut ini penjelasan lengkap tentang cara kerja metode ini:
Inilah bagian tentang penentuan posisi absolut dalam spesifikasi Kotak:
sumber
grid-container
&grid-item
adalah HTML tag?flex
dangrid
,align-items
tetap sama tetapi untuk beberapa alasanjustify-content
menjadijustify-items
Anda dapat menggunakan flexbox untuk memusatkan teks Anda. By the way tidak perlu wadah tambahan karena teks dianggap sebagai item fleksibel anonim.
Dari spesifikasi flexbox :
Jadi, buat saja item kisi sebagai wadah fleksibel (
display: flex
), dan tambahkanalign-items: center
danjustify-content: center
untuk memusatkan secara vertikal dan horizontal.Juga dilakukan optimasi HTML dan CSS:
sumber
Jangan coba-coba menggunakan flex; tetap dengan grid css !! :)
https://jsfiddle.net/ctt3bqr0/
sedang melakukan pekerjaan pemusatan di sini.
Jika Anda ingin memusatkan sesuatu yang ada di dalam
div
yang ada di dalam sel grid Anda perlu mendefinisikan grid bersarang untuk membuatnya berfungsi. (Silakan lihat biola kedua contoh yang ditunjukkan di sana.)https://css-tricks.com/snippets/css/complete-guide-grid/
Bersulang!
sumber
place-self: center;
.Properti steno CSS tempat-item mengatur masing-masing properti align-items dan justify-items. Jika nilai kedua tidak disetel, nilai pertama juga digunakan untuk itu.
sumber
place-items
saat ini tidak didukung di tepiCoba gunakan flex:
Demo Plunker: https://plnkr.co/edit/nk02ojKuXD2tAqZiWvf9
HTML
sumber
Kamu mau ini?
sumber
.text{ font-family: Raleway; font-size: large; text-align: center; -webkit-transform: rotate(-90deg); -moz-transform: rotate(-90deg); }
Saya tahu pertanyaan ini berumur beberapa tahun, tetapi saya terkejut menemukan bahwa tidak ada yang menyarankan:
ini adalah properti yang lebih universal daripada konten yang dapat dibenarkan, dan jelas tidak unik untuk kisi, tetapi saya menemukan bahwa ketika berhadapan dengan teks, yang merupakan pertanyaan khusus yang ditanyakan, bahwa hal itu menyelaraskan teks ke pusat tanpa mempengaruhi ruang antara item kisi, atau pemusatan vertikal. Ini pusat teks secara horizontal di mana berdiri pada sumbu vertikal. Saya juga menemukan itu untuk menghapus lapisan kompleksitas yang membenarkan konten dan menyelaraskan item. justify-content dan align-items mempengaruhi seluruh item kisi atau item, text-align memusatkan teks tanpa memengaruhi wadahnya. Semoga ini bisa membantu.
sumber