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?

mheavers
sumber
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; }
rak buku
sumber
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.

bobince
sumber
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;
}
hutorny
sumber
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'; }
Jesse Kinsman
sumber
11

CSS berikut berfungsi untuk saya:

/* newline before element */
#myelementId:before{
    content:"\a";
    white-space: pre;
}
rluks
sumber
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/

Jason Gennaro
sumber
"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/

hammerbrostime
sumber
+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;
}
pengguna
sumber
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;
  }
Kareem
sumber
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.

Roger
sumber
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>
JackHammer
sumber
0

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

Henry Gibson
sumber
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.

Mark Stewart
sumber
-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.

punkrockbuddyholly
sumber
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.

andy4thehuynh
sumber
2
OP meminta sama <br>, bukan <hr>.
Beni Cherniavsky-Paskin