Cara menyisipkan baris sebelum elemen menggunakan CSS


170

Saya merasa seperti melihat cara, menggunakan properti konten CSS, untuk menyisipkan tag baris sebelum elemen. Jelas ini tidak berhasil:

#restart:before { content: '<br/>'; }

Tetapi bagaimana Anda melakukan ini?


2
CSS bukan untuk menambah atau mengedit konten, tetapi untuk mengontrol bagaimana konten ditampilkan.
Todd Moses

40
Menurut saya tata letak dan aliran (pemisah garis dapat dianggap baik) jelas berada dalam domain CSS.
Trevor

12
CSS mutlak untuk menambahkan atau mengedit konten ketika itu adalah elemen gaya yang konsisten yang merupakan bagian dari tema Anda. Terutama dengan sistem manajemen konten seperti Wordpress yang tidak memungkinkan Anda untuk mengedit konten Anda, ini sangat berguna. Itu sebabnya properti "konten" ada. Untuk menambah dan / atau mengedit konten.
Fei Lauren

Jawaban:


266

Mungkin saja menggunakan \A urutan pelarian dalam konten yang dihasilkan elemen psuedo. Baca lebih lanjut di spec CSS2.

#restart:before { content: '\A'; }

Anda juga mungkin perlu menambahkan white-space:pre;untuk #restart.

note: \Amenunjukkan akhir dari sebuah garis.

ps Perawatan lain yang akan dilakukan

:before { content: ' '; display: block; }

11
Coba juga ruang putih: pra-bungkus; jika Anda ingin teks Anda dibungkus.
Jazzy

6
Cemerlang. Perlu dicatat, bahwa untuk ini bekerja - #restartjuga harusdisplay: inline;
Troy Alford

23
Ini tidak berhasil untuk saya, saya gunakan :before { content: ' '; display: block; }sebagai gantinya.
Bogdanio

1
Untuk beberapa alasan tidak ada solusi yang bekerja dengan inline-blockelemen. Mereka tidak akan pergi ke baris berikutnya. Satu-satunya solusi adalah benar-benar menambahkan yang kosong <div></div>dalam HTML.
Adam Reis

2
Jika garis tidak putus, Anda dapat menggunakan properti 'white-space': before {content: '\ A'; white-space: pre; }
Amr

35

Jika #restartelemen inline (mis. <span>, <em>Dll) maka Anda dapat mengubahnya menjadi elemen blok menggunakan:

#restart { display: block; }

Ini akan memiliki efek memastikan garis terputus sebelum dan sesudah elemen.

Tidak ada cara untuk membuat CSS menyisipkan sesuatu yang bertindak seperti satu baris saja sebelum elemen dan bukan sesudahnya. Anda mungkin dapat menyebabkan break-line sebelumnya sebagai efek samping dari perubahan lain, misalnya float: left, atau clear: leftsetelah elemen melayang, atau bahkan sesuatu yang gila, #restart:before { content: 'a load of non-breaking spaces'; }tetapi ini mungkin bukan ide yang baik dalam kasus umum.


1
Itu tidak dapat menampilkan: blok - karena dengan begitu saya perlu menampilkan lebar untuk elemen agar latar belakangnya tidak berjalan sepanjang halaman. Itu harus dapat secara otomatis mengatur lebar untuk elemen.
mheavers

3
Suatu float: leftelemen mungkin berguna, karena mereka menyusut dan mulai pada baris baru. Kalau tidak, apa yang Anda inginkan mungkin tidak mungkin.
bobince

Penyebab downvoted kadang-kadang pengembang bekerja di proyek besar di mana mereka tidak memiliki kontrol atau tidak dapat mengambil keputusan untuk menerapkan solusi lain.
eyurdakul

19

Ini bekerja untuk saya:

#restart:before {
    content: ' ';
    clear: right;
    display: block;
}

Untuk beberapa alasan, berbagai karakter unicode untuk baris baru tidak berfungsi untuk saya ..? Solusi ini berhasil meskipun - terima kasih!
Gene Bo

1
Ya, tetapi apa yang terjadi ketika Anda harus memasukkan teks ke dalam konten juga !? answer
Sándor Zuboly

12

Masukkan saja karakter unicode baris baru ke dalam elemen pseudo sebelumnya:

#restart:before { content: '\00000A'; }

11

CSS berikut berfungsi untuk saya:

/* newline before element */
#myelementId:before{
    content:"\a";
    white-space: pre;
}

Ide bagus dengan css biasa
NaveenDA

Bekerja sebagai pesona bagi saya. Saya menggunakan ini:content: 'bar: \a' attr(data-description);
Jimmy Adaro

Ini adalah jawaban yang benar 👍
cronoklee

10

Ada dua alasan mengapa Anda tidak dapat menambahkan konten yang dihasilkan melalui CSS dengan cara yang Anda inginkan:

  1. konten yang dihasilkan menerima konten dan bukan markup. Markup tidak akan dievaluasi tetapi hanya ditampilkan.

  2. :beforedan :afterkonten yang dihasilkan ditambahkan di dalam elemen, sehingga bahkan menambahkan spasi atau huruf dan mendefinisikannya sebagai blocktidak akan berfungsi.

Ada ::outsideelemen pseudo yang dapat melakukan apa yang Anda inginkan. Namun, tampaknya tidak ada dukungan browser. (Baca lebih lanjut di sini: http://www.w3.org/TR/css3-content/#wrapping )

Taruhan terbaik adalah menggunakan sedikit jQuery di sini:

$('<br />').insertBefore('#restart');

Contoh: http://jsfiddle.net/jasongennaro/sJGH9/1/


"Menggunakan CSS". Saya menemukan jawaban yang mirip dengan karya Jesse Kinsman.
RonnyKnoxville

4

Ya, benar-benar bisa dilakukan tetapi jelas merupakan peretasan total (orang-orang mungkin memberi Anda tampilan yang kotor untuk menulis kode seperti itu).

Ini HTML-nya:

<div>lorem ipdum dolor sit <span id="restart">amit e pluribus unum</span></div>

Inilah CSS-nya:

#restart:before { content: 'hiddentext'; font-size:0; display:block; line-height:0; }

Ini biola: http://jsfiddle.net/AprNY/


+1 Untuk kreativitas. Saya punya sesuatu yang saya sertakan dari sumber eksternal dan tidak dapat mengubah HTML yang sebenarnya ... ini tampaknya berfungsi dengan baik :) Terima kasih!
lawan

3

Coba yang berikut ini:

#restart::before {
  content: '';
  display: block;
}

Kiat: Tambahkan setidaknya satu komentar satu baris, jadi kiriman Anda tidak berakhir di VLQQ secara default.
Deduplicator

1

dengan asumsi Anda ingin tinggi garis menjadi 20 px

  .restart:before { 
     content: 'First Line';
     padding-bottom:20px;
  }
  .restart:after { 
    content: 'Second-line';
    position:absolute;
    top:40px;
  }

1

Saya tidak beruntung sama sekali dengan memasukkan jeda dengan: sebelumnya. Solusi saya adalah menambahkan span dengan kelas dan meletakkan break di dalam span. Kemudian ubah kelas untuk ditampilkan: tidak ada; atau tampilan: blokir sesuai kebutuhan.

HTML

    <div>
         <span class="ItmQty"><br /></span>
         <span class="otherclass">
              <asp:Label ID="QuantityLabel" runat="server" Text="Qty: ">      
              </asp:Label>
         </span>
         <div class="cartqty">
              <asp:TextBox ID="QuantityTextBox" runat="server" Text='<%# Bind("Quantity","{0:#}") %>' Width="50"></asp:TextBox>

         </div>
    </div>

CSS

@media only screen and (min-width: 854px)
{
    .ProjItmQty
    {
        display: block;
        clear: both;
    }
}
@media only screen and (min-width: 1003px)
{
    .ProjItmQty
    {
        display: none;
    }
}

Semoga ini membantu.


1

Anda dapat mengisi dokumen Anda dengan <br>tag dan menyalakannya \ dengan css seperti yang lain:

<style>
.hideBreaks {
 display:none;
}
</style>
<html>
just a text line<br class='hideBreaks'> for demonstration
</html>

0

Anda juga dapat menggunakan entitas HTML pra-disandikan untuk jeda baris &#10;dalam konten Anda dan itu akan memiliki efek yang sama.


0
body * { line-height: 127%; }
p:after { content: "\A "; display: block; white-space: pre; }

https://www.w3.org/TR/CSS2/generate.html#x18 Content Proerty, "baris baru" ... p tidak akan menambahkan margin atau bantalan pada akhir p di dalam blok induk (misalnya, badan ›bagian› p). Garis "\ A" memaksa ruang garis, ketinggian garis yang setara.


-1

Tambahkan margin-top:20px;ke #restart. Atau berapa pun ukuran celah yang Anda rasa sesuai. Jika elemen inline Anda harus menambahkan display:blockatau display:inline-blockmeskipun saya pikir tidak inline-blockberfungsi pada versi IE yang lebih lama.


Tidak masalah adalah bahwa tipe tampilan elemen adalah inline-block, jadi saya perlu istirahat sebelum elemen.
mheavers

tipe tampilan sudah inline-block. Saya mencoba melakukan apa yang saya minta di atas, menggunakan properti konten.
mheavers

Anda tidak dapat menambahkan elemen html menggunakan properti konten, itu tidak mungkin.
punkrockbuddyholly

karena jawaban Anda tidak akan menyelesaikan masalahnya. Lihatlah jawaban yang menang yang merinci cara untuk menyediakan jeda baris menggunakan properti konten (yang tidak akan menerima elemen html). Mungkin itu adalah kesalahpahaman dari pertanyaan awal.
pdwalker

-1

Alih-alih menambahkan garis hentian secara manual, Anda bisa melakukan implement border-bottom: 1px solid #ff0000yang akan mengambil perbatasan elemen dan hanya membuat border-<side>sisi mana pun yang Anda tentukan.


2
OP meminta sama <br>, bukan <hr>.
Beni Cherniavsky-Paskin
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.