de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 molf
molf
Question

Floating gambar ke kanan bawah dengan membungkus teks di sekitar

Saya memiliki sebuah wadah teks dengan paragraf dan judul. Di bagian bawah halaman saya ingin mengapung gambar di sebelah kanan halaman, sementara membungkus teks di sekitar gambar. Bagian bawah dari gambar harus rata dengan bagian bawah paragraf terakhir.

Halaman lebar variabel (responsif), tapi gambar dimensi yang tetap. Adalah mungkin untuk mencapai hal ini di HTML dan CSS (CSS3 baik-baik saja)? Jika tidak, hal itu dapat dilakukan dengan jumlah minimal Javascript?

Berikut ini's skematik contoh dari apa yang ingin saya capai:

Floating image ke kanan bawah

HTML saat ini terlihat sesuatu seperti ini, tetapi dapat diubah jika diperlukan. Saya don't peduli di mana dalam dokumen gambar berada. Menggunakan latar belakang gambar, bukan akan baik-baik juga.

<section>
  <h2>...</h2>
  <p>... ...</p>
  <p>... ...</p>
  ...
  <img src="...">
</section>

Ketika saya set float: right pada gambar, itu mengapung ke kanan tapi aku tidak bisa mendapatkannya untuk menyelaraskan ke bagian bawah halaman. Saran?

Edit: yang paling dekat aku adalah ini... :-)

49 2013-11-04T15:19:40+00:00 8
 molf
molf
Pertanyaan edit 4 November 2013 в 4:40
Pemrograman
image
html
css
Solution / Answer
 gilly3
gilly3
6 November 2013 в 7:06
2013-11-06T19:06:09+00:00
Lebih
Sumber
Sunting
#22709733

Buat spacer elemen dengan float: right dan tinggi yang sama dengan ketinggian konten minus tinggi gambar. Kemudian menggunakan float: right dan clear: right pada gambar:

<div class="spacer"></div>
<img class="bottomRight" src="" />
<div class="content"></div>
.spacer {
    height: calc(100% - 200px);
    width: 0px;
    float: right;
}
.bottomRight {
    height: 200px;
    float: right;
    clear: right;
}

http://cssdesk.com/bLNWs

Demo saya menggunakan dimensi tetap dalam wadah elemen. Sejak itu jarang yang realistis kasus ini, mungkin lebih masuk akal untuk menggunakan JavaScript untuk ukuran spacer. Memanggil fungsi ini, lewat referensi untuk spacer elemen ketika dokumen tersebut siap dan selama jendela.onresize acara.

function sizeSpacer(spacer) {
    spacer.style.height = 0;
    var container = spacer.parentNode;
    var img = spacer.nextElementSibling || spacer.nextSibling;
    var lastContentNode = container.children[container.children.length - 1];
    var h = Math.max(0, container.clientHeight - img.clientHeight);
    spacer.style.height = h + "px";
    while (h > 0 && img.getBoundingClientRect().bottom > lastContentNode.getBoundingClientRect().bottom) {
        spacer.style.height = --h + "px";
    }
}

Fungsi ini bekerja (lihat demo), dan dapat di ulang untuk jQuery atau library pilihan. It's tidak dimaksudkan untuk menjadi plug-in kualitas kode, tetapi berfungsi untuk menggambarkan konsep tersebut.

jsfiddle.net/n5RPV/9

Edit: saya membuat sebuah plugin jQuery versi (github | demo jsFiddle) yang mendukung floating kiri bawah atau kanan bawah. Hal ini juga mendukung menentukan elemen untuk menyelaraskan bawah dengan.

By the way, saya didn't repot-repot mencoba untuk mendukung IE7.

 Jesse
Jesse
Jawaban edit 15 Mei 2018 в 9:08
55
0
 Danield
Danield
10 November 2013 в 9:46
2013-11-10T21:46:49+00:00
Lebih
Sumber
Sunting
#22709736

Saya pikir masa depan dengan cara bagaimana untuk mengatasi masalah ini akan sama dengan CSS Pengecualian.

CSS Pengecualian memperpanjang gagasan konten pembungkus sebelumnya terbatas untuk mengapung. ... Unsur-unsur tata letak mereka inline konten dalam area konten dan membungkus di sekitar daerah eksklusi dalam berhubungan pembungkus konteks (--kutipan dari spec)

Ini baca artikel juga menjelaskan pengecualian

...web penulis sekarang dapat membungkus teks sehingga benar-benar mengelilingi unsur-unsur, sehingga menghindari keterbatasan tradisional mengapung. Bukan membatasi elemen-elemen mengambang baik ke kiri atau ke kanan relatif terhadap posisi mereka dalam dokumen aliran, CSS Pengecualian dapat terletak pada jarak tertentu dari bagian atas, bawah, kiri, atau sisi kanan yang berisi blok, sementara sisa bagian dari aliran dokumen.

Ironisnya, sampai saat ini hanya bekerja di IE10 (mencari bungkus-aliran:baik di sini)

Check out biola ini di IE10+

Ini adalah apa yang tampak seperti kode:

 <div class="container">
    <div class="exclusion">
        Exclusion positioned at bottom right hand side of text.
    </div>
    <div class="dummy_text">
        <p>text here</p>
    </div>
</div> 

CSS

.container {
    font-size: small;
    background: aqua;
    position: relative;
}

.exclusion {

    -ms-wrap-flow: both;
    -ms-wrap-margin: 10px;
    z-index: 1;
    position:absolute;
    right:0;
    bottom:0; /* try fiddling with this. For some reason bottom: -10px (or the like) works better here */
    width: 150px;
    height: 100px;
    background: url(http://placehold.it/150x100) no-repeat;
}

Sehingga anda dapat melihat - meskipun pengecualian adalah benar-benar diposisikan - masih bertindak seperti pelampung - dalam hal ini: float kanan bawah.

Mengenai browser yang mendukung:

Check out situs yang menunjukkan sifat-sifat yang didukung oleh browser (untuk saat ini: hanya IE10+ mendukung bungkus-aliran:kedua )

PS: update Terbaru mengenai CSS pengecualian (dan lain senada modul seperti CSS daerah dan CSS Shapes) dapat ditemukan pada Adobe Web Platform Blog Tim

 Danield
Danield
Jawaban edit 13 November 2013 в 7:10
6
0
 Stichoza
Stichoza
13 November 2013 в 12:58
2013-11-13T00:58:05+00:00
Lebih
Sumber
Sunting
#22709739

Saya kira itu's dipecahkan. Ia bekerja!

Dengan sedikit JavaScript dan CSS yang saya lakukan seperti ini:

Satu sederhana floatify() fungsi.

  • Responsif.
  • Mengubah ukuran jendela won't istirahat.
  • Setiap gambar lebar/tinggi.
  • Menempatkan banyak teks yang anda inginkan.

Ide yang diilhami oleh: http://www.csstextwrap.com/

 Stichoza
Stichoza
Jawaban edit 13 November 2013 в 1:05
2
0
Kris Hollenbeck
Kris Hollenbeck
6 November 2013 в 7:43
2013-11-06T19:43:35+00:00
Lebih
Sumber
Sunting
#22709734

Mungkin CSS Solusi: (hanya diuji di chrome)

Sepertinya ini mungkin bekerja menggunakan CSS3's flex kotak properties dan kombinasi dari background-image properties. Saya mampu untuk mendapatkan cukup dekat hanya menggunakan CSS. (Bekerja tetapi membutuhkan sedikit tweaking) Juga, ini mungkin tidak menjadi pilihan karena aku tidak harus mengubah markup sedikit untuk membuat karya ini. Tapi mungkin layak dicoba jika anda sedang mencari pure CSS solusi.

Berikut ini adalah Demo ->

Markup baru: (tidak jauh berbeda)

<section >
  <h2>Some Heading:</h2>
  <p>...</p>
  <p class="last">
     <span class="image"></span>
  </p>
</section>

CSS:

.last {
    display:inline-flex;
    flex-direction:row;
}
.image {
    padding:5px 0 0 5px;
    width:100%;
    background-image:url("http://dribbble.s3.amazonaws.com/users/200359/screenshots/758731/stackoverflow_logo.png");
    background-size:100%;
    background-repeat:no-repeat;
    background-position:bottom right;
}

Sumber:

  1. http://css-tricks.com/snippets/css/a-guide-to-flexbox/
  2. http://dev.w3.org/csswg/css-flexbox-1/
Kris Hollenbeck
Kris Hollenbeck
Jawaban edit 12 November 2013 в 3:15
2
0
 Terry
Terry
6 November 2013 в 7:54
2013-11-06T19:54:06+00:00
Lebih
Sumber
Sunting
#22709735

Saya telah bekerja pada jQuery berbasis solusi — mungkin tidak elegan seperti yang diposting oleh gilly3 meskipun ;) dan itu's juga lebih lambat dan sedikit membengkak...

Saya caranya adalah dengan menambahkan dua <div>s untuk bagian, yang melayang ke kiri dan tersembunyi lebar lebar 0. Salah satu div, yang ditunjuk hantu elemen yang akan memiliki dimensi yang sama seperti gambar, akan diposisikan di bawah div lain yang lebih tinggi yang ditunjuk spacer. Script menggunakan while loop untuk membangun jika hantu elemen telah mencapai bagian bawah dari bagian induk elemen. Jika hal ini tidak terjadi, akan menambah ketinggian tinggi spacer dengan 1, sampai kondisi puas.

Markup saya telah digunakan adalah sebagai berikut. I'm menggunakan HTML5 atribut data-bawah-gambar` untuk mengidentifikasi bagian-bagian yang telah anda gambar yang akan melayang ke bawah. Tentu saja hal ini dibuang, tergantung pada bagaimana anda ingin memilih untuk memperbaiki bagian elemen.

<section id="c1" data-bottom-image>
    <h2>...</h2>
    <p>...</p>
    <img src="http://placehold.it/250x100" />
</section>

Dan script jQuery:

$(function () {
    $("section > img:last-child").each(function () {
        // Offset image based on the bottom and right padding of parent
        var $par = $(this).parent();
        $(this).css({
            bottom: $par.css('padding-bottom'),
            right: $par.css('padding-right')
        });
    });

    // Function: adjust height of height-spacer, pixel by pixel
    function adjustHeightSpacer($par, $hs, $is) {
        // Stretch height spacer
        $hs.height(0);
        $hs.css({
            height: $par.find("img").position().top - parseInt($par.css('padding-top'))
        });

        // Adjust height spacer
        while($par.height() - $is.height() > $is.position().top - parseInt($par.css('padding-top'))) {
            $hs.height("+=1");
        }

        while($par.height() - $is.height() < $is.position().top - parseInt($par.css('padding-top'))) {
            $hs.height("-=1");
        }        
    };

    $("section[data-bottom-image]").each(function() {
        // Append two spacers:
        $(this).prepend('<div class="ghost height-spacer" /><div class="ghost image-spacer" />')

        var $hs = $(this).find(".height-spacer"),
            $is = $(this).find(".image-spacer");

        // Adjust image spacer dimension
        $is.css({
            height: $(this).find("img").height(),
            width: $(this).find("img").width()
        });

        // Adjust height spacer
        adjustHeightSpacer($(this), $hs, $is);
    });

    $(window).resize($.debounce(250,function() {
        $("section[data-bottom-image]").each(function() {
            // Adjust height spacer
            adjustHeightSpacer($(this), $(this).find(".height-spacer"), $(this).find(".image-spacer"));
        });
    }));
});

Dan di sini adalah kerja Biola:

 Terry
Terry
Jawaban edit 6 November 2013 в 8:37
2
0
 Oriol
Oriol
13 November 2013 в 7:35
2013-11-13T07:35:03+00:00
Lebih
Sumber
Sunting
#22709740

CSS-satunya Solusi.

Dengan menggunakan media query satu dapat mencapai tata letak ini.

HTML

<section>
  <h2>...</h2>
  <p>... ...</p>
  <p>... ...</p>
  <img src="..." class="show-medium">
  ...
  <img src="..." class="show-small">
</section>

CSS

html, body {
  height: 100%;
  width: 100%;
}

img {
  display: none;
  float: right;
  clear: right;
}

@media (max-width: Xpx), (max-height: Xpx) {
  /* show img for small screens */
  .show-small { display:block; }
}
@media (min-width: Xpx) and (max-width: Xpx) and (min-height:Xpx) and (max-height: Xpx) { 
 /* show img for medium screens */
 .show-medium { display:block; }
}

@media (min-width: Xpx) and (min-height: Xpx) {
  /* show img as body background for large screens */
  body {
    background: url("http://placehold.it/200x300") no-repeat fixed right bottom transparent;
  }
}

Hal ini memainkan dengan baik pada resolusi layar yang berbeda. Lihat demo.

Satu telah untuk bermain/menyesuaikan CSS media queries serta posisi gambar dalam markup dalam rangka untuk itu untuk bekerja.

CSS media query didukung di Firefox 3.5+, Opera 7+, Safari 3+, Chrome dan IE9+. Untuk versi IE yang lebih tua satu ini dapat digunakan untuk memperbaiki: http://code.google.com/p/css3-mediaqueries-js/

1
0
 isherwood
isherwood
12 November 2013 в 3:16
2013-11-12T15:16:07+00:00
Lebih
Sumber
Sunting
#22709738

Berikut ini's solusi ringan dengan sedikit jQuery:

<section class="flagpole">
    <div class="pole"></div>
    <img class="flag" src="..." />
    <p>Paragraphs...</p>
</section>

.pole, .flag {
    float: right;
    clear: right;
}
.pole {
    width: 0.1px
}

function setFlag() {
    $('section.flagpole').each(function () {
        var poleHeight = $(this).height() - $(this).find('.flag').height();
        $(this).find('.pole').height(poleHeight);
    });
}

setFlag();

$(window).on('resize', function () {
    setFlag();
});

Untuk menghilangkan kekhawatiran tentang plagiarisme, solusi ini didasarkan pada lain yang mirip jawaban yang saya berikan beberapa waktu lalu.

 Community
Community
Jawaban edit 23 Mei 2017 в 12:02
0
0
hesam jaferi
hesam jaferi
12 November 2013 в 8:08
2013-11-12T08:08:07+00:00
Lebih
Sumber
Sunting
#22709737

gunakan ini :

<section class="post">
  <h2>...</h2>
  <p>... ...</p>
  <p>... ...</p>
  ...
  <img src="...">
</section>

<style>
.post img {float:right;margin-top:80%}

</style>

perubahan 80% untuk mendapatkan hasil terbaik.

Good Luck.

0
0
Related communities 5
HTML dan CSS Indonesia
HTML dan CSS Indonesia
4 118 pengguna
Silahkan bertanya terkait mengenai HTML maupun CSS. Membaca, menulis, berbagi. Baca dahulu pesan tersemat di pinned post.
Buka telegram
Pemrograman Web Indonesia (HTML CSS Javascript PHP MySQL)
Pemrograman Web Indonesia (HTML CSS Javascript PHP MySQL)
306 pengguna
Official Website : www.pemweb.id Belajar Pemrograman Web (HTML CSS Javascript PHP MySQL) Grup Belajar Pemrograman Web. HTML + PHP + Javascript + MySQL DB Semoga menjadi forum belajar, menambah wawasan, peningkatan mutu personal kita semua.
Buka telegram
HTML INDONESIA
HTML INDONESIA
109 pengguna
Buka telegram
PHP HTML Indonesia
PHP HTML Indonesia
59 pengguna
~ Menerima Jasa Pembuatan Website untuk : Tugas & Instansi 💻 ~ Forum Diskusi Belajar Bersama ✅ ~ Promosi Jasa Minimal 1x Sehari ✅ ~ Dilarang Berbicara Kotor 🚫 ^ Other Grup : Whatsapp Group : Chat Admin untuk masuk ke Grup Whatsapp ^^
Buka telegram
Css Indonesia
Css Indonesia
19 pengguna
Css Indonesia group ini membahas tentang Css dan web design Bagi yg mau memperdalam Css atau ingin memulai Css atau bahkan Javascript dan html, bisa download aplikasi di bawah ini : https://play.google.com/store/apps/details?id=com.sololearn Thank you
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
UbiBot UK
Terdaftar 15 jam yang lalu
2
Галина Утяшова
Terdaftar 1 hari yang lalu
3
Asilbek Qadamboyev
Terdaftar 4 hari yang lalu
4
Akshit Mehta
Terdaftar 1 minggu yang lalu
5
me you
Terdaftar 1 minggu yang lalu
ID
KO
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi