Rumah hujung hadapan web tutorial js 详解CSS百分比padding制作图片自适应布局

详解CSS百分比padding制作图片自适应布局

Dec 26, 2017 am 09:39 AM
padding peratusan

<p>本文主要和大家分享详解CSS百分比padding制作图片自适应布局,css知识点:当padding/margin取形式为百分比的值时,无论是left/right,还是top/bottom,都是以父元素的width为参照物的!

<p>一、CSS百分比padding都是相对宽度计算的

<p>在默认的水平文档流方向下,CSS marginpadding属性的垂直方向的百分比值都是相对于宽度计算的,这个和top, bottom等属性的百分比值不一样。

<p>这么设计的原因在我的新书(应该不出几个月就要出版了)中会有说明,这里不展开。

<p>对于padding属性而言,任意方向的百分比padding都现对于宽度计算可以让我们轻松实现固定比例的块级容器,举个例子,假设现在有个<p>元素:

p { padding: 50%; }
Salin selepas log masuk
<p>

<p>或者:

p { padding: 100% 0 0; }
Salin selepas log masuk
<p>

<p>或者:

p { padding-bottom: 100%; }
Salin selepas log masuk
<p>

<p>则这个<p>元素尺寸就是一个宽高1:1的正方形,无论其父容器宽度是多少,这个<p>元素总能保持比例不变。

<p>这种能固定比例的特性什么作用呢?

<p>对于绝大多数都布局,我们并不要求非要比例固定,但是有一种情况例外,那就是图片,因为图片原始尺寸它是固定的。在传统的固定宽度的布局下,我们会通过给图片设定具体的宽度和高度值,来保证我们的图片占据区域稳固;但是在移动端或者在响应式开发情况下,图片最终展现的宽度很可能是不确定的,例如手机端的一个通栏广告,iPhone7下宽度是375,iPhone7 Plus下是414,还有360等尺寸,此时需要的不是对图片进行固定尺寸设定,而是比例设定。

<p>通常有如下一些实现:

<p>

<p>

<p>1. 固定一个高度,然后使用background-size属性控制,如下:

.banner {
 height: 40px;
 background-size: cover;
}
Salin selepas log masuk
<p>

<p>实时效果如下:

<p>可以看到随着宽度的变化,总会有部分图片区域(宽度或高度)无法显示,并不是完美的做法。

<p>2. 使用视区宽度单位vw,如下:

.banner {
 height: 15.15vw;
 background-size: cover;
}
Salin selepas log masuk
<p>

<p>如果对兼容性要求不是很高,使用vw也是一个不错的做法,至少理解起来要更轻松一点。

<p>但是,如果我们的图片不是通栏,而是需要离左右各1rem的距离,此时,我们的CSS代码就要啰嗦点了,想要保持完美比例,就使用借助CSS3 calc()计算:

.banner {
 height: calc(0.1515 * (100vw - 2rem));
 background-size: cover;
}
Salin selepas log masuk
<p>

<p>如果,图片距离两侧的宽度是动态不确定的,则,此时calc()也捉襟见肘了,但,恰恰是普普通通其貌不扬的padding属性,其兼容性和适应性都一级棒。

<p>3. 使用百分比padding,如下:

.banner {
 padding: 15.15% 0 0;
 background-size: cover;
}
Salin selepas log masuk
<p>

<p>此时无论图片的外部元素怎么变动,比例都是恒定不变的。

<p>二、CSS百分比padding与宽度自适应图片布局

<p>但是有时候我们的图片是不方便作为背景图呈现的,而是内联的<img>,百分比padding也是可以轻松应对的,求套路是比较固定的,图片元素外面需要一个固定比例的容器元素,例如下面的HTML结构:

<br/>
Salin selepas log masuk
Salin selepas log masuk

<p class="banner">
 <img src=""banner.jpg>
</p>
Salin selepas log masuk
<p>

<p>.banner元素同样负责控制比例,然后图片填充.banner元素即可,CSS代码如下:

.banner {
 padding: 15.15% 0 0;
 position: relative;
}
.banner > img {
 position: absolute;
 width: 100%; height: 100%;
 left: 0; top: 0;
}
Salin selepas log masuk
<p>

<p>效果就达成了!

<p>眼见为实,去年起点中文网手机版诸多页面的通栏广告就都是这么实现的,最终的效果参见下面的gif截图(如果图无法显示,可以评论反馈):

<p>

<p>可以看到,无论屏幕宽度多宽,我们的广告图片比例都是固定的,不会有任何剪裁,不会有任何区域缺失,布局就显得非常有弹性,也更健壮。

<p>————-

<p>其实,我之前一直低估百分比padding的实际应用价值,因为有vw单位的存在,毕竟理解vw看上去要更简单一些,所以,一直就没做相关技巧的介绍。但是,随着图片相关布局处理越来越多,我发现,百分比padding的实用价值要比想象的大,要比vw单位适用场景更多,兼容性更好(百分比特性IE6+支持,图片100%覆盖IE8+支持)。

<p>对于复杂布局,如果图片的宽度是不固定的自适应的,我们通常会想到这么一个取巧的做法,就是只设定图片的宽度,例如:

img { width: 100%; }
Salin selepas log masuk
<p>

<p>此时浏览器默认会保持图片比例显示,图片宽度大了,高度也跟着一起变大;图片宽度小了,高度也跟着一起变小。开发人员似乎无需关心图片真实比例是怎样的。

<p>然而这种技巧有一个非常不好的体验问题,那就是随着页面加载的进行,图片占据的高度会有一个从0到计算高度的图片变化,视觉上会有明显的元素跳动,代码层面会有布局重计算。

<p>所以对图片高宽进行同时约定还是有必要的,但是同时要保证宽度自适应,似乎有点难度。记住,如果遇到这种需求场景,没有比百分比padding布局更好的做法!

<p>缩小浏览器宽度可以看到不同宽度下的布局效果,Gif效果截图如下:

<p>

<p>此demo难点就是图片自适应同时保持比例,以及页面刷新的时候没有布局稳固不晃动,其核心HTML和CSS代码如下:

<br/>
Salin selepas log masuk
Salin selepas log masuk

<p class="works-item-t">
  <img src="./150x200.png">
</p>
Salin selepas log masuk
<p>

.works-item-t {
 padding-bottom: 133%;
 position: relative;
}
.works-item-t > img {
 position: absolute;
 width: 100%; height: 100%;
}
Salin selepas log masuk
<p>

<p>可以看到,当把垂直方向padding值只使用padding-bottom表示的时候,如果没有text-align属性干扰,<img>元素的left:0;top:0是可以省略的。

<p>对于这种图片宽度100%容器,高度按比例的场景,padding-bottom的百分比值大小就是图片元素的高宽比,就这么简单。

<p>但,有时候,图片宽度并不是100%容器的,例如,图片宽度50%容器宽度,图片高宽比4:3,此时,CSS垂直方向百分比就666了,如下:

.img-box {
 padding: 0 50% 66.66% 0;
}
Salin selepas log masuk
<p>相关推荐:

<p>一个CSS+div高度自适应布局模型_html/css_WEB-ITnose

<p>CSS3自适应全屏焦点图切换的特效怎么做

<p>响应式和自适应有什么区别

<p>

Atas ialah kandungan terperinci 详解CSS百分比padding制作图片自适应布局. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menukar pecahan kepada peratusan dalam Python? Bagaimana untuk menukar pecahan kepada peratusan dalam Python? Aug 25, 2023 pm 01:25 PM

Pecahan dan peratusan ialah dua konsep asas matematik yang digunakan dalam pelbagai bidang seperti kewangan, analisis data dan statistik. Menukar pecahan kepada peratusan ialah operasi yang mudah tetapi perlu yang membolehkan kita mewakili nilai pecahan dengan cara yang lebih mudah difahami. Python, salah satu bahasa pengaturcaraan yang paling popular, menawarkan beberapa kaedah untuk menukar pecahan kepada peratusan, dan memahami kaedah ini adalah penting bagi sesiapa yang bekerja dengan data dalam Python. Artikel ini melihat secara mendalam tentang menukar pecahan kepada peratusan dalam Python. Kami akan meneroka cara yang berbeza untuk melakukan ini dan memberikan contoh untuk membantu anda memahami setiap kaedah. Sama ada anda seorang pemula atau pengaturcara Python yang berpengalaman, artikel ini memberi anda kunci untuk melakukan ini dalam Python

Penjelasan terperinci tentang sifat sempadan CSS: padding, margin dan sempadan Penjelasan terperinci tentang sifat sempadan CSS: padding, margin dan sempadan Oct 21, 2023 am 11:07 AM

Sifat sempadan CSS dijelaskan secara terperinci: padding, margin dan borderCSS ialah bahasa helaian gaya yang digunakan untuk mengawal dan susun atur elemen halaman web. Dalam reka bentuk web, atribut sempadan adalah salah satu bahagian yang paling penting. Artikel ini akan memperkenalkan secara terperinci cara menggunakan atribut sempadan dalam CSS dan memberikan contoh kod khusus. padding Sifat padding digunakan untuk menetapkan padding elemen, iaitu ruang antara kandungan elemen dan sempadan elemen. Kita boleh menetapkan padding menggunakan nombor positif atau nilai peratusan

Program Python untuk mendapatkan peratusan kekerapan perkataan Program Python untuk mendapatkan peratusan kekerapan perkataan Sep 08, 2023 pm 06:29 PM

Dalam artikel ini, kita akan belajar cara mendapatkan kekerapan perkataan sebagai peratusan dalam Python. Katakan kita telah memperoleh senarai input rentetan. Sekarang, kita akan mencari peratusan setiap perkataan dalam senarai rentetan input yang diberikan. Kaedah yang digunakan oleh formula (OccurrenceofXword/Totalwords)*100 ialah menggunakan fungsi sum(), Counter(), join() dan split() untuk menggunakan fungsi join(), split() dan count() untuk digunakan fungsi countOf() modul operator. Kaedah 1: Gunakan fungsi sum(), Counter(), join() dan split() join() ialah Py

Penjelasan terperinci tentang sifat susun atur teks CSS: limpahan teks dan ruang putih Penjelasan terperinci tentang sifat susun atur teks CSS: limpahan teks dan ruang putih Oct 20, 2023 am 11:19 AM

Penjelasan terperinci tentang sifat susun atur teks CSS: limpahan teks dan ruang putih Dalam reka bentuk web, reka letak teks ialah pautan yang sangat penting Susun atur yang munasabah boleh menjadikan teks lebih mudah dibaca dan cantik. CSS menyediakan beberapa sifat untuk mengawal cara teks dipaparkan, termasuk limpahan teks dan ruang putih. Artikel ini akan memperincikan penggunaan dan kod sampel kedua-dua sifat ini. 1. teks atribut limpahan-teks

Cara menggunakan atribut padding dalam css Cara menggunakan atribut padding dalam css Dec 07, 2023 pm 02:58 PM

Dalam CSS, sifat padding digunakan untuk menetapkan padding sesuatu elemen. Ini bermakna ia mentakrifkan ruang antara kandungan elemen dan sempadannya. Sintaks asas ialah "padding: value;".

Bagaimana untuk membolehkan paparan peratusan bateri pada iPhone? Bagaimana untuk membolehkan paparan peratusan bateri pada iPhone? May 08, 2023 pm 12:07 PM

Cara Menunjukkan Peratusan Bateri pada iPhone Sebelum ini, anda perlu meleret ke bawah untuk membuka Pusat Kawalan untuk mencari peratusan tepat baki kuasa bateri. Walau bagaimanapun, pilihan untuk melihat peratusan bateri yang tepat pada tepi atas skrin kunci kembali. Untuk menunjukkan peratusan bateri pada iPhone anda: Buka apl Tetapan daripada skrin utama iPhone anda. Leret ke bawah menu Tetapan dan ketik Bateri daripada senarai. Seterusnya, tukar butang peratusan bateri ke kedudukan hidup. Akhir sekali, anda akan melihat peratusan tepat baki kuasa di atas ikon bateri di penjuru kanan sebelah atas skrin. Apabila ciri didayakan, nombor peratusan akan muncul apabila anda menyemak imbas skrin Kunci, Skrin Utama dan kebanyakan apl. Tidak dapat melihat peratusan bateri? Jika anda tidak melihat

Penjelasan terperinci tentang arahan atas linux Penjelasan terperinci tentang arahan atas linux Feb 20, 2024 am 09:20 AM

Tekan 1 untuk melihat penggunaan setiap CPU Baris pertama ialah masa semasa Masa berjalan ialah pengguna yang dilog masuk (1 minit, 5 minit, 10 minit). setiap 5 saat dan mengira nilainya. Jika nombor dibahagikan dengan bilangan CPU logik melebihi 5, sistem akan terlebih beban. Baris kedua mempunyai sejumlah 248 proses, 1 berjalan, 247 tidur, 0 berhenti, 0 proses zombie Baris ketiga us (ruang pengguna): peratusan cpu yang diduduki oleh ruang pengguna sy (sysctl): peratusan cpu yang diduduki oleh. ruang kernel ni()— Peratusan CPU yang diduduki oleh proses yang telah mengubah id keutamaan (idola): peratusan CPU terbiar wa (tunggu): IO menunggu diduduki CP

Satu daripada lima PC kini telah memasang Windows 11, tetapi penggunaan nampaknya semakin perlahan Satu daripada lima PC kini telah memasang Windows 11, tetapi penggunaan nampaknya semakin perlahan Apr 30, 2023 pm 05:10 PM

Windows 11 Microsoft terus berkembang, seperti yang ditunjukkan oleh data Februari 2022 terkini daripada laporan AdDuplex. Sistem pengendalian dengan cepat menghampiri angka 20%, bermakna kira-kira satu daripada lima PC kini menjalankan Windows 11. Versi awam Windows 11, Windows 1121H2, kini berada pada tahap 19.3%. Sementara itu, kadar orang dalam menjalankan pelbagai binaan pratonton kini ialah 0.3%. Ini menjadikan jumlah bahagian Windows 11 kepada 19.6%, dan menjelang Mac, bahagian peratusan ini mungkin melebihi 20%. Windows 11 dan banyak Wind

See all articles