Tidak mungkin dengan CSS Murni mengingat Batasan
Tampaknya apa yang Anda tanyakan dalam banyak kasus secara matematis tidak mungkin (kecuali panjang teksnya sama) hanya dengan css karena kendala Anda.
Pertimbangkan contoh hanya dua tab dan empat persyaratan khusus (dan bertentangan) berikut ini (asumsikan 500px
wadah dengan lebar tetap; persyaratan telah disusun ulang sebagai ilustrasi):
(1) Setiap Tab memiliki lebar yang tidak diketahui (tergantung pada teks di dalamnya).
Asumsikan Tab2 memiliki teks dua kali lebih panjang dari Tab1. Jadi ilustrasinya, Tab1 = 10px
, Tab2 = 20px
, lalu...
(2) Semua Tab harus memiliki padding yang sama (spasi dari huruf paling luar hingga batas dalam tab harus sama, diwakili oleh ".." di atas). Padding ini tidak harus diperbaiki tetapi harus sama di antara tab-tabnya.
Dan...
(3) Tanpa Perhitungan. Semua harus berfungsi tanpa mengubah css jika satu atau lebih tab ditambahkan atau dihapus.
Cukup jelas, tapi...
(4) Tab tidak boleh meluas melebihi div tersebut, namun harus mengisinya.
Ini berarti salah satu dari berikut ini:
A. Setiap Tab akan memiliki lebar 50% dan lebar teks tetap tidak berubah, jadi Tab1 = 120px 10px 120px
, Tab2 = 115px 20px 115px
, yang tidak memenuhi (1) karena ukuran keseluruhan keduanya akan memiliki lebar yang sama, atau (2) karena lebar bantalan akan bervariasi sesuai ilustrasi, tetapi mungkin memenuhi (3) dan (4). Ini bukan yang Anda inginkan.
B. Setiap Tab akan memiliki lebar 50%, namun lebar teks harus melar untuk Tab1 atau kompres untuk Tab2 agar lebar teks sama . Secara teknis ini masih gagal memenuhi (1), namun memenuhi (2) & (4) karena keduanya disetel ke 120px 10px 120px
atau 115px 20px 115px
, karena teks terdistorsi sedemikian rupa agar "sesuai" dengan ruangnya. Apakah hal ini mungkin terjadi tanpa melakukan (3) masih dipertanyakan, namun mungkin tidak relevan, karena saya yakin ini bukan yang Anda inginkan.
C. Setiap Tab akan disetel sesuai keinginan Anda untuk (1) dan (2) dengan (2) pada jumlah tetap (misalnya 10 piksel), yang menyisakan celah di antara atau di sekitar tab, seperti 10px 10px 10px
, selisih 430px
, lalu 10px 20px 10px
. Ini mungkin dapat memenuhi (3), tetapi tidak memenuhi (4) karena mereka tidak akan benar-benar "mengisi" ruang wadah tetap--akan ada "celah" di suatu tempat. Ini bukan yang Anda inginkan.
D. Apa yang pada akhirnya Anda inginkan adalah agar setiap Tab memiliki padding yang disetel sama, yang dapat dilakukan sehubungan dengan (1) dan (2), tetapi tidak dengan batasan Anda (3) , sebagai perhitungan diperlukan. Dalam contohnya adalah (500px - 30px) / 4 = 117.5px
. Ini menjadikan tab 117.5px 10px 117.5px
dan 117.5px 20px 117.5px
. Namun seperti yang Anda lihat, karena teks memiliki lebar fleksibel, hal ini harus dilakukan secara dinamis, kira-kira dengan rumus:
(containerWidth - totalTextWidths) / (2 x numTabs) = padding
Jika Anda menginginkan semacam celah kecil antar tab, maka itu perlu ditambahkan ke dalam rumus (di sini diasumsikan ada celah 2 piksel, jadi gapWidths = ((numTabs - 1) x 2px)
):
(containerWidth - totalTextWidths - gapWidths) / (2 x numTabs) = padding
Jadi batasan yang Anda berikan membuat solusi menjadi tidak mungkin--perhitungan harus diperbolehkan, atau Anda perlu memikirkan kembali bagaimana Anda ingin tab Anda ditampilkan.
person
ScottS
schedule
11.11.2013