Saya telah memeras otak saya untuk menciptakan perataan vertikal di css menggunakan yang berikut ini
.base{
background-color:green;
width:200px;
height:200px;
overflow:auto;
position:relative;
}
.vert-align{
padding-top:50%;
height:50%;
}
<!-- and used the following div structure. -->
<div class="base">
<div class="vert-align">
Content Here
</div>
</div>
Sementara ini tampaknya bekerja untuk kasus ini, saya terkejut bahwa ketika saya menambah atau mengurangi lebar div basis saya, perataan vertikal akan patah. Saya mengharapkan bahwa ketika saya mengatur properti padding-top, itu akan mengambil padding sebagai persentase dari ketinggian wadah induk, yang merupakan dasar dalam kasus kami, tetapi nilai di atas 50 persen dihitung sebagai persentase dari lebar. :(
Apakah ada cara untuk mengatur padding dan / atau margin sebagai persentase dari tinggi, tanpa menggunakan JavaScript?
sumber
top
berfungsi bagus untuk mengubah ukuran berdasarkan tinggi browser / jendela. Bagaimana kalau punya div di bawah div itu? Bagaimana Anda bisaclear
div ke-2 berada di bawah div yang digeser ke bawah olehtop:50%
??top: 50%
tidak terlalu berguna jika Anda perlu menyelaraskan konten dengan pusatnya sendiri.Jawaban untuk pertanyaan yang sedikit berbeda: Anda bisa menggunakan
vh
unit untuk menempelkan elemen ke tengah viewport :sumber
vh
hampir sama dengan persentase ... bahkan lebih buruk dalam beberapa kasus. Jawaban ini tidak relevan dengan pertanyaanBerikut adalah dua opsi untuk meniru perilaku yang dibutuhkan. Bukan solusi umum, tetapi dapat membantu dalam beberapa kasus. Spasi vertikal di sini dihitung berdasarkan ukuran elemen luar, bukan induknya, tetapi ukuran ini sendiri dapat relatif terhadap induk dan dengan cara ini jarak akan relatif juga.
Opsi pertama: gunakan elemen pseudo, di sini jarak vertikal dan horisontal relatif ke luar. Demo
Memindahkan jarak horizontal ke elemen luar membuatnya relatif terhadap induk dari bagian luar. Demo
Opsi kedua: gunakan penentuan posisi absolut. Demo
sumber
Untuk membuat elemen anak diposisikan secara absolut dari elemen induknya, Anda perlu mengatur posisi relatif pada elemen induk DAN posisi absolut pada elemen turunan.
Kemudian pada elemen anak 'top' adalah relatif terhadap ketinggian induk. Jadi, Anda juga perlu 'menerjemahkan' anak ke atas 50% dari tinggi badannya sendiri.
Ada solusi lain menggunakan kotak fleksibel.
Anda akan menemukan keuntungan / kerugian bagi keduanya.
sumber
Ini dapat dicapai dengan
writing-mode
properti. Jika Anda mengatur elemenwriting-mode
ke mode penulisan vertikal, sepertivertical-lr
, nilai persentase turunannya untuk padding dan margin, di kedua dimensi, menjadi relatif terhadap tinggi daripada lebar.Dari spec :
Definisi ukuran sebaris :
Contoh, dengan elemen yang dapat diubah ukurannya, di mana margin horizontal relatif terhadap lebar dan margin vertikal relatif terhadap tinggi.
Menggunakan mode penulisan vertikal dapat sangat berguna dalam situasi di mana Anda ingin rasio aspek suatu elemen tetap konstan, tetapi ingin ukurannya untuk skala berkorelasi dengan tinggi dan bukannya lebar.
sumber
-webkit-
awalan, tetapi menurut caniuse itu tidak memerlukan awalan sejak Safari 11. Apakah Anda mencobanya dengan peramban yang tidak berfungsi?Cara lain untuk memusatkan teks satu baris adalah:
atau hanya
sumber
Bantalan 50% tidak akan memusatkan anak Anda, itu akan menempatkannya di bawah pusat. Saya pikir Anda benar-benar menginginkan padding-top 25%. Mungkin Anda hanya kehabisan ruang karena konten Anda semakin tinggi? Anda juga sudah mencoba mengatur margin-top bukan padding-top?
EDIT: Nevermind, kata situs w3schools
Jadi mungkin selalu menggunakan lebar? Saya tidak pernah memperhatikan.
Apa yang Anda lakukan dapat dilakukan menggunakan display: table though (setidaknya untuk browser modern). Tekniknya dijelaskan di sini .
sumber
line-height
, yaitu, membuat 200px garis-tinggi?Ini adalah bug yang sangat menarik. (Menurut pendapat saya, ini adalah bug) Temuan bagus!
Mengenai cara mengaturnya, saya akan merekomendasikan jawaban Camilo Martin. Tapi untuk alasannya , aku ingin menjelaskan ini sedikit jika kalian tidak keberatan.
Dalam spesifikasi CSS yang saya temukan:
... yang aneh, tapi oke.
Jadi, dengan orangtua
width: 210px
dan anakpadding-top: 50%
, saya mendapatkan nilai yang dihitung / dihitungpadding-top: 96.5px
- yang bukan yang diharapkan105px
.Itu karena di Windows (saya tidak yakin tentang OS lain), ukuran scrollbar umum adalah per default
17px × 100%
(atau100% × 17px
untuk bilah horizontal). Itu17px
dikurangi sebelum menghitung50%
, karenanya50% of 193px = 96.5px
.sumber