Pertanyaan yang ditautkan stackoverflow.com/questions/11093943/… memberikan jawaban kompatibel yang menarik, tetapi tidak sepenuhnya terbelakang, mungkin Anda juga ingin melihatnya.
11684
5
Bagi siapa pun yang melewati pertanyaan ini, Chad menjawab bahwa peramban modern mendukungnya width: calc(100% - 100px);, beberapa jawaban turun dan saya harap penanya akan memperbarui pertanyaannya :) :)
Saya menemukan ketika saya menggunakan calc(100% - 6px)misalnya itu ditampilkan sebagai calc(94%), saya harus menghindarinya sebagai berikut dan sekarang berfungsiwidth: calc(~"100% - 6px");
nsilva
12
Sadarilah, Anda harus memiliki spasi putih di sekitar karakter -(atau +). Ini berfungsi: calc(100% - 100px); Dan ini tidak:calc(100%-100px);
Freefaller
Saya sedikit terkejut tidak ada pilihan untuk secara otomatis mengurangi 2x padding dari elemen, yang biasanya akan menjadi usecase yang cukup umum. Misalnya, saya akhirnya harus melakukan padding: 0.25em; width: calc(100% - 2 * 0.25em - 2em);, dan harus mengubah 0.25emdi dua tempat sekarang jika harus diubah.
cnst
Terima kasih banyak, juga ingin mencatat bahwa ini berfungsi sebagai tambahan: (100% + 100px)
Viktor Mellgren
99
Bisakah Anda membuat sarang dengan margin-left: 50px;dan margin-right: 50px;di dalam <div>dengan width: 100%;?
Solusi pertama benar, wadah mungkin bukan jendela dan oleh karena itu 100vh mungkin tidak sama dengan 100%
Ben Taliadoros
1
Saya menemukan ketika saya menggunakan calc(100% - 6px)misalnya itu ditampilkan sebagai calc(94%), saya harus menghindarinya sebagai berikut dan sekarang berfungsiwidth: calc(~"100% - 6px");
Mengatur margin tubuh ke 0, lebar wadah luar hingga 100%, dan menggunakan wadah bagian dalam dengan margin kiri / kanan 50px tampaknya berfungsi.
<style>
body {margin:0;padding:0;}.full-width
{width:100%;}.innerContainer
{margin:0px50px0px50px;}</style><body><divclass="full-width"style="background-color:#ff0000;"><divclass="innerContainer"style="background-color:#00ff00;">
content here
</div></div></body>
Bekerja dengan panel bootstrap, saya mencari cara menempatkan tautan "hapus" di panel header, yang tidak akan dikaburkan oleh elemen tetangga yang panjang. Dan inilah solusinya:
html:
<divclass="with-right-link"><aclass="left-link"href="#">Long link header Long link header</a><aclass="right-link"href="#">Delete</a></div>
Itu mulai bekerja untuk saya hanya ketika saya memeriksa semua spasi. Jadi, tidak berfungsi seperti ini: width: calc(100%- 20px)atau calc(100%-20px)dan bekerja dengan sempurna width: calc(100% - 20px).
Sunting: Solusi saya salah. Solusi diposting oleh Aric TenEyck menyarankan menggunakan div dengan lebar 100% dan kemudian bersarang div lain menggunakan margin tampaknya lebih benar.
Jika Anda melakukan ini, tidakkah Anda akan berakhir dengan total lebar 100% + 100px?
Adam Crume
: o (Maaf. Haruskah saya menghapus posting saya atau haruskah saya meninggalkannya dan membiarkan suara turun menekannya?
Tina Orooji
1
down vote biasanya dimaksudkan untuk mendorong Anda untuk membersihkan posting Anda sehingga Anda bisa mendapatkan kembali poin rep yang hilang oleh suara negatif. Jika Anda tahu solusi Anda salah, Anda dapat menghapus jika dengan atau tanpa suara atau memperbaruinya untuk memperbaikinya.
aleemb
@AdamCrume - Tidak. Itu hanya akan menjadi kasus jika Anda juga menentukan width:100%. Sebuah div akan secara otomatis mengisi wadah kecuali Anda menimpanya, misalnya, dengan menetapkan secara eksplisit width, atau dengan menggunakan floatatau penentuan posisi absolut. Menambahkan margin ke div hanya akan menyebabkannya untuk mengisi wadahnya, dikurangi jumlah yang ditentukan oleh margin.
gilly3
@aleemb - Dalam hal ini, downvotes adalah oleh pengguna yang tidak mengerti css karena jawaban ini sangat tepat.
gilly3
1
Padding pada div luar akan mendapatkan efek yang diinginkan.
Ada 2 teknik yang bisa berguna untuk skenario umum ini. Masing-masing memiliki kekurangan tetapi keduanya dapat berguna pada saat-saat tertentu.
box-sizing: kotak batas termasuk padding dan lebar perbatasan di lebar item. Misalnya, jika Anda mengatur lebar div dengan bantalan 20px 20px dan batas 1px ke 100px, lebar sebenarnya adalah 142px tetapi dengan kotak batas, kedua bantalan dan margin berada di dalam 100px.
.bb{-webkit-box-sizing: border-box;/* Safari/Chrome, other WebKit */-moz-box-sizing: border-box;/* Firefox, other Gecko */
box-sizing: border-box;
width:100%;
height:200px;
padding:50px;}
Tidak ada yang sempurna tentu saja, ukuran kotak tidak benar-benar cocok dengan pertanyaan karena elemen sebenarnya 100% lebar, daripada 100% - 100px (namun div anak akan). Dan penentuan posisi absolut jelas tidak dapat digunakan dalam setiap situasi, tetapi biasanya baik-baik saja selama ketinggian induk ditetapkan.
CSS tidak dapat digunakan untuk animasi, atau modifikasi gaya apa pun pada acara.
Satu-satunya cara adalah dengan menggunakan fungsi javascript, yang akan mengembalikan lebar elemen yang diberikan, kemudian, kurangi 100px untuk itu, dan atur ukuran lebar baru.
Dengan asumsi Anda menggunakan jQuery, Anda bisa melakukan sesuatu seperti itu:
Anda dapat melihat menggunakan KURANG , yang merupakan file JavaScript yang pra-proses CSS Anda sehingga Anda dapat memasukkan logika dan variabel ke dalam CSS Anda. Jadi sebagai contoh, di KURANG Anda akan menulis width: 100% - 100px;untuk mencapai apa yang Anda inginkan :)
Bisakah Anda menambahkan penjelasan pada jawaban Anda?
Michał Perłakowski
Saya sudah mencoba: calc (100% -100px) dan hasilnya tidak konsisten di semua platform / browser, kemudian saya mencoba untuk benar-benar menyederhanakan dan menggunakan margin-right: 100px; lebar: otomatis; dan itu berhasil ...
user1552559
calc adalah komponen CSS3 dan css ini akan berfungsi pada browser yang mendukung CSS3.
Sushan
-2
Jawaban singkatnya adalah Anda TIDAK melakukan ini dalam CSS. Internet Explorer memiliki dukungan untuk sesuatu yang disebut Ekspresi CSS, tetapi ini bukan standar dan jelas tidak didukung oleh browser lain seperti FireFox misalnya.
Ya kira saya harus tetap menyimpannya di javascript, saya refractoring beberapa kode dan ingin menghapus javascript yang melakukan itu tks.
fmsf
1
Silakan jika Anda dapat menghindarinya jangan lakukan ini di JavaScript. HTML + CSS mungkin rumit dan solusinya mungkin tidak jelas, tetapi kemungkinan dapat melakukan hampir semua yang Anda butuhkan. Menggunakan JavaScript untuk tata letak statis hampir selalu merupakan ide yang buruk.
width: calc(100% - 100px);
, beberapa jawaban turun dan saya harap penanya akan memperbarui pertanyaannya :) :)Jawaban:
Browser modern sekarang mendukung:
Untuk melihat daftar versi browser yang didukung, checkout: Dapatkah saya menggunakan calc () sebagai nilai unit CSS?
Ada fallback jQuery: lebar css: calc (100% -100px); alternatif menggunakan jquery
sumber
calc(100% - 6px)
misalnya itu ditampilkan sebagaicalc(94%)
, saya harus menghindarinya sebagai berikut dan sekarang berfungsiwidth: calc(~"100% - 6px");
-
(atau+
). Ini berfungsi:calc(100% - 100px);
Dan ini tidak:calc(100%-100px);
padding: 0.25em; width: calc(100% - 2 * 0.25em - 2em);
, dan harus mengubah0.25em
di dua tempat sekarang jika harus diubah.Bisakah Anda membuat sarang dengan
margin-left: 50px;
danmargin-right: 50px;
di dalam<div>
denganwidth: 100%;
?sumber
Anda dapat mencoba ini ...
vw: lebar viewport
vh: tinggi viewport
sumber
calc(100% - 6px)
misalnya itu ditampilkan sebagaicalc(94%)
, saya harus menghindarinya sebagai berikut dan sekarang berfungsiwidth: calc(~"100% - 6px");
kode saya, dan berfungsi untuk IE6:
sumber
Anda harus memiliki wadah untuk div konten Anda yang Anda inginkan 100% - 100px
Anda mungkin perlu menambahkan div kliring sebelum yang terakhir
</div>
jika div konten Anda meluap.sumber
Mengatur margin tubuh ke 0, lebar wadah luar hingga 100%, dan menggunakan wadah bagian dalam dengan margin kiri / kanan 50px tampaknya berfungsi.
sumber
Bekerja dengan panel bootstrap, saya mencari cara menempatkan tautan "hapus" di panel header, yang tidak akan dikaburkan oleh elemen tetangga yang panjang. Dan inilah solusinya:
html:
css:
Tentu saja Anda dapat memodifikasi nilai "atas" dan "benar", sesuai dengan lekukan Anda. Sumber
sumber
Itu mulai bekerja untuk saya hanya ketika saya memeriksa semua spasi. Jadi, tidak berfungsi seperti ini:
width: calc(100%- 20px)
ataucalc(100%-20px)
dan bekerja dengan sempurnawidth: calc(100% - 20px)
.sumber
Bisakah Anda melakukannya:
Sunting: Solusi saya salah. Solusi diposting oleh Aric TenEyck menyarankan menggunakan div dengan lebar 100% dan kemudian bersarang div lain menggunakan margin tampaknya lebih benar.
sumber
width:100%
. Sebuah div akan secara otomatis mengisi wadah kecuali Anda menimpanya, misalnya, dengan menetapkan secara eksplisitwidth
, atau dengan menggunakanfloat
atau penentuan posisi absolut. Menambahkan margin ke div hanya akan menyebabkannya untuk mengisi wadahnya, dikurangi jumlah yang ditentukan oleh margin.Padding pada div luar akan mendapatkan efek yang diinginkan.
sumber
Ada 2 teknik yang bisa berguna untuk skenario umum ini. Masing-masing memiliki kekurangan tetapi keduanya dapat berguna pada saat-saat tertentu.
box-sizing: kotak batas termasuk padding dan lebar perbatasan di lebar item. Misalnya, jika Anda mengatur lebar div dengan bantalan 20px 20px dan batas 1px ke 100px, lebar sebenarnya adalah 142px tetapi dengan kotak batas, kedua bantalan dan margin berada di dalam 100px.
Berikut ini adalah artikel yang sangat bagus: http://css-tricks.com/box-sizing/ dan inilah biola http://jsfiddle.net/L3Rvw/
Dan kemudian ada posisi: absolut
http://jsfiddle.net/Mw9CT/1/
Tidak ada yang sempurna tentu saja, ukuran kotak tidak benar-benar cocok dengan pertanyaan karena elemen sebenarnya 100% lebar, daripada 100% - 100px (namun div anak akan). Dan penentuan posisi absolut jelas tidak dapat digunakan dalam setiap situasi, tetapi biasanya baik-baik saja selama ketinggian induk ditetapkan.
sumber
CSS tidak dapat digunakan untuk animasi, atau modifikasi gaya apa pun pada acara.
Satu-satunya cara adalah dengan menggunakan fungsi javascript, yang akan mengembalikan lebar elemen yang diberikan, kemudian, kurangi 100px untuk itu, dan atur ukuran lebar baru.
Dengan asumsi Anda menggunakan jQuery, Anda bisa melakukan sesuatu seperti itu:
Dan dengan javascript asli:
Kami berasumsi bahwa Anda memiliki gaya css yang diatur dengan 100%;
sumber
Apakah Anda menggunakan mode standar? Solusi ini tergantung padanya, saya pikir.
Jika Anda mencoba membuat 2 kolom, Anda bisa melakukan sesuatu seperti ini:
Kemudian gunakan CSS untuk menatanya:
Jika Anda tidak ingin 2 kolom, Anda mungkin dapat menghapus
<div id="left">
sumber
sumber
Anda dapat melihat menggunakan KURANG , yang merupakan file JavaScript yang pra-proses CSS Anda sehingga Anda dapat memasukkan logika dan variabel ke dalam CSS Anda. Jadi sebagai contoh, di KURANG Anda akan menulis
width: 100% - 100px;
untuk mencapai apa yang Anda inginkan :)sumber
Kamu tidak bisa
Namun, Anda dapat menggunakan margin untuk menghasilkan hasil yang sama.
sumber
Ini bekerja:
sumber
Jawaban singkatnya adalah Anda TIDAK melakukan ini dalam CSS. Internet Explorer memiliki dukungan untuk sesuatu yang disebut Ekspresi CSS, tetapi ini bukan standar dan jelas tidak didukung oleh browser lain seperti FireFox misalnya.
Anda sebaiknya melakukan ini dalam JavaScript.
sumber