Css ile <br /> hedefleyebilir misiniz?


160

Satır sonunu hedeflemek mümkün mü <br/> etiketini CSS ile ?

Her satır kesişinde 1 piksel kesik çizgi olmasını istiyorum. Bir siteyi kendi CSS'imle özelleştiriyorum ve ayarlanmış HTML'yi değiştiremiyorum, aksi takdirde başka bir şekilde kullanırım.

Bunun mümkün olduğunu düşünmüyorum ama belki birisinin bildiği bir yol var.


Yanıtlar:


169

BRsatır sonu oluşturur ve yalnızca satır sonu olur. Bu öğenin içeriği olmadığından, clearveya üzerinde uygulamak için anlamlı olan yalnızca birkaç stil vardır position. BRKenarlığını ayarlayabilirsiniz ancak görsel boyutu olmadığından göremezsiniz.

İki cümleyi görsel olarak ayırmak isterseniz, muhtemelen bu amaç için tasarlanan yatay cetveli kullanmak istersiniz . İşaretlemeyi değiştiremeyeceğiniz için, sadece CSS kullanmaktan korkuyorum, bunu başaramazsınız.

Öyle görünüyor ki, zaten diğer forumlarda tartışıldı. Re'den çıkar : CSS kullanarak BR öğesinin yüksekliğini ayarlama :

[T] onun BR için bir dereceye kadar garip bir duruma yol açması, bir yandan normal bir eleman olarak ele alınmaması, aksine üretilen içerikte \ A'nın bir örneği olarak değil, diğer yandan üzerinde (CSS özelliklerinin sınırlı bir alt kümesi) normal bir öğeye izin verilir.

Ayrıca CSS 1 spesifikasyonunda bir açıklama buldum (daha yüksek seviye spesifikasyonlardan bahsedilmiyor):

Geçerli CSS1 özellikleri ve değerleri, 'BR' öğesinin davranışını açıklayamaz. HTML'de, 'BR' öğesi kelimeler arasında bir satır sonu belirtir. Aslında, elemanın yerine satır kesmesi gelir. CSS'nin gelecekteki sürümleri eklenen ve değiştirilen içeriği işleyebilir, ancak CSS1 tabanlı biçimlendiriciler 'BR'ye özel davranmalıdır.

Grant Wagner'in testleriBR , diğer unsurlarla yapabileceğiniz gibi stil yapmanın bir yolu olmadığını gösteriyor . Ayrıca, sonuçları tarayıcınızda test edebileceğiniz çevrimiçi bir site de vardır .

Güncelleme

pelms daha fazla araştırma yaptı ve IE8'in (Win7'de ) ve Chrome 2 / Safari 4b'nin biraz stil vermenize izin verdiğine dikkat çektiBR . Ve gerçekten, kontrol ettim IE demo sayfasını ile IE Net Renderer en IE8 motoru ve işe yaradı.

Güncelleme 2 C69 bazı başka araştırmalar yapmışlardır ve bunu çıkıyor olabilir stil işaretleyici için broldukça ağır (gerçi değil, çapraz tarayıcı), henüz üst kapsayıcı ait gibi görünüyor, çünkü bu, kendini hat-kırmak etkilemez.


Mükemmel cevap. Çapraz tarayıcı değilse, yalnızca tek bir tarayıcıyı (örneğin, yalnızca mobil cihaz) hedeflemediğiniz sürece, stil oluşturmaya çalışmak değmez. Aksi takdirde,
stilinizi

49

Aşağıdakileri deneyin, Güncelleme 2'yi yüksek oylarla başka bir cevaptan bir araya getirdim ve benim için mükemmel çalıştı:

br
{   content: "A" !important;
    display: block !important;
    margin-bottom: 1.5em !important;
}

Edge ve IE'de çalışmıyor gibi görünüyor, ancak gerçek tarayıcılar değiller.
Jester

31

Bir stil oluşturmak için iyi bir neden var <br> etiketi .

Kodun bir parçası olduğunda değiştirmek istemezsiniz (veya değiştiremezsiniz) ve bu <br>özelliğin görüntülenmemesini istersiniz .

.xxx br {display:none}

Çok zaman ve bazen de gününüzü kurtarabilir.


20

Yorumlarımı kaçırmış olabilecek gelecekteki ziyaretçilerin yararına:

br {
    border-bottom:1px dashed black;
}

çalışmıyor.

IE 6, 7 ve 8, Firefox 2, 3 ve 3.5B4, Windows için Safari 3 ve 4, Opera 9.6 ve 10 (alfa) ve Google Chrome'da (sürüm 2) test edildi ve hiçbirinde çalışmadı onlar. Gelecekte bir noktada, bir kullanıcı,<br> öğe , lütfen bu listeyi güncellemekten çekinmeyin.

Ayrıca başka şeyler denediğime dikkat edin:

br {
    border-bottom:1px dashed black;
    display:block;
}

br:before { /* and :after */
    border-bottom:1px dashed black;
    /* content and display added as per porneL's comment */
    content: "";
    display: block;
}

br { /* and :before and :after */
    content: url(a_dashed_line_image);
}

Bunlardan, Opera 9.6 ve 10'da (alfa) aşağıdakiler işe yarar (teşekkürler porneL!):

br:after {
    border-bottom:1px dashed black;
    content: "";
    display: block;
}

Yalnızca bir tarayıcıda desteklendiğinde çok kullanışlı değil, ancak farklı tarayıcıların spesifikasyonu nasıl uyguladığını görmek her zaman ilginç buluyorum.


3
: daha önce içerik olmadan mevcut değildir. content:""; display:blockİkinci kurala ekleyin .
Kornel

10

HTML'yi düzenleyemeyeceğinizi biliyorum, ancak CSS'yi değiştirebiliyorsanız javascript ekleyebilir misiniz?

eğer öyleyse, jquery ekleyebilir, o zaman yapabilirsin

<script language="javascript">
$(document).ready(function() {
    $('br').append('<span class="myclass"></span>');
});
</script>

1
$ ('Br'). Önce ('<span class = "myclass"> </span>');
molokoloco

10
br { padding: 1px 8px; border-bottom: 1px dashed #000 }

IE8'de aşağıdaki gibi ... sadece bir tarayıcıda çok fazla kullanım değil.

IE 8 ekran görüntüsü

(Not: IE 8.0.7100 kullanıyorum (Win7 RC'de) bu bir fark yaratırsa)

Ayrıca,

br:after { content: "..." }  
br { content: "" }`

veya,

br:after {
    border: 1px none black;
    border-bottom-style: dashed;
    content: "";
    padding: 0 6px 0;
}

br { content: "" }

Chrome 2 / Safari 4b'de kesikli bir çizgi verir, ancak (kimseyi yeniden tanıtmak için bir yol bulamazsa) onu işe yaramazdan daha az hale getiren satır sonunu kaybeder.

örneğin
IE8 testi , Krom / Safari testi ve başka


İlginç. IE8 altında çoğaltamam. IE8'inizde gömülü resminiz gibi görünen bir örnek çevrimiçi koyabilir misiniz?
viam0Zah

Bağlantılar eklendi - Win7, fark olması durumunda IE8'in biraz farklı bir sürümünü kullanır.
pelms

1
@pelms Teşekkürler, IENetRenderer ile IE test sayfasını kontrol ettim ve gerçekten altındaki sınırı gösteriyor BR. Teşekkürler, cevabımı test sonuçlarınızla güncelledim.
viam0Zah

2

Kendi testlerim sonuç olarak bretiketlerin css için hedeflenmeyi sevmediğini gösteriyor.

Ancak stil ekleyebiliyorsanız, muhtemelen sayfanın başlığına bir komut dosyası etiketi de ekleyebilirsiniz? .jsBöyle bir şey yapan bir harici bağlantı :

function replaceLineBreaksWithHorizontalRulesInElement( element )
{
    elems = element.getElementsByTagName( 'br' );
    for ( var i = 0; i < elems.length; i ++ )
    {
        br = elems.item( i );
        hr = document.createElement( 'hr' );
        br.parentNode.replaceChild( hr, br );
    }
}

Kısacası, optimal değil, ama işte benim çözümüm.


'Ne yazık ki html'yi değiştiremiyorum' diye yazdı dc3.
09:45

2
@ Török: Gönderdiğim cevap sadece OP için değil, benzer bir soruyla bu sayfayı bulan herkes içindir.
Kris

2

bu sorunu çözüyor gibi görünüyor:

<!DOCTYPE html>

<style type="text/css">
#someContainer br { display:none }
#someContainer br + a:before { content:"|"; color: transparent; letter-spacing:-100px; border-left: 1px dashed black; margin:0 5px; }
</style>

<div id="someContainer"><a>link</a><br /><a>link</a><br /><a>link</a></div>

1

BR bir satır öğesi, bir blok öğesi değil.

Yani ihtiyacın var:

 br.Underline{
    border-bottom:1px dashed black;
    display: block;
  }

Aksi takdirde, bu tür şeyler hakkında biraz pickier olan tarayıcılar, BR öğelerinize kenarlık uygulamayı reddeder, çünkü satır içi öğelerin kenarlıkları, dolguları veya kenar boşlukları yoktur.


Satır içi unsurlar yok sınırlar, padding ve marjları var - sadece diğer şekilde davranır.
viam0Zah

Firebug ile Fx'te bir şeyler deniyorum. Ben de denedim ama benim için işe yaramadı. Satır sonu etiketindeki eğik çizgi (doğru terminoloji ise) yüzer, yani .. br ve / arasında boşluk olduğunu fark ettim. bu bir faktördür. Bir boşluk olması gerektiğini düşünmüştüm. Bu ve hala hiçbir şey düzeltmek için yine de kundakçı html düzenledi. zaten yardım tüm insanlar için teşekkürler - daha önce bu siteyi hiç kullanmadım ve ne kadar hızlı bir cevap aldım çok şaşırdım. harika bir topluluk var.
dc3

2
@richard: Bunu gerçekten test ettiniz, eğer öyleyse, hangi tarayıcı (lar) ı? IE 6, 7 ve 8, Firefox 2, 3 ve 3.5B4, Windows için Safari 3 ve 4, Opera 9.6 ve 10 (beta) ve Google Chrome'da (sürüm 1) denedim ve hiçbirinde çalışmadı .
Grant Wagner

1

GÜNCELLEME 9/13/2019:

<br>Etiketi bu şekilde şekillendirmenin amacı, "daha büyük" bir satır sonu (yani, satırlar arasında biraz fazladan boşlukla) yapmaktır.

"Oldbig" sınıfı (aşağıda), stil için Chrome 66.0.3359.181, Firefox Quantum 60.0.2, Edge 42.17134.1.0 ve IE 11.48.17134.0'da düzgün bir şekilde test edildi ve çalıştı. Ne yazık ki, Chrome 76 sürümünde ve türevlerinde (Ağustos 2019 dolaylarında) kırıldı. Belirti, çizgiler arasındaki fazladan alanın artık görüntülenmemesidir.

"Newbig" sınıfı, Chrome (76.0.3809.132), Opera, Firefox, Edge, IE, Brave ve Palemoon'un mevcut sürümlerinde test edilmiş ve düzgün çalışıyor:

br.oldbig {line-height:190%;vertical-align:top;}
br.newbig {display:block;content:"";margin-top:0.5em;line-height:190%;vertical-align:top;}

İşte bir demo:

br.oldbig {line-height:175%;vertical-align:top;}
br.newbig {display:block;content:"";margin-top:0.5em;line-height:190%;vertical-align:top;}
<p style="max-width:20em">This is a paragraph which demonstrates the difference 
 between a line-break which occurs when the text exceeds the max-width, and a 
 line-break forced by a &lt;br&gt; tag here:<br>
 and a line break forced by a &lt;br class=oldbig&gt; tag here:<br class=oldbig>
 and a line break forced by a &lt;br class=newbig&gt; tag here:<br class=newbig>
 This is the next line after the &lt;br class=newbig&gt; tag (but still 
 part of the same paragraph).</p>
<p style="max-width:20em">And this is another paragraph, entirely.</p>

Chrome v.76'da görüntülenen sonuç budur:

ekran görüntüsü


0

Bu sadece IE'de çalışacaktır. IE8'de test ettim.

br {

  border-bottom: 1px dashed #000000;
  background-color: #ffffff;
  display: block;
  }

0

Bir yerleştirilen <br>bir içine etiketi <span>etiketi ve kullanımı başardı display:none;üzerinde <span>ne zaman kullanılmayacağı kontrole <br>Medya Sorgular kullanarak etiketi.


Neden <br>bir yayına sarmak yerine doğrudan doğrudan hedeflenmiyor ?
Gavin

0

eski soru ama bu oldukça düzgün ve temiz bir düzeltme, hala mümkün olup olmadığını merak eden insanlar için kullanılabilir :):

br{
    content: '.';
    display: inline-block;
    width: 100%;
    border-bottom: 1px dashed black;
}

bu düzeltme ile web sitelerindeki BR'leri de kaldırabilirsiniz (genişliği 0 piksel olarak ayarlayın)


-2

Neden sadece HR etiketini kullanmıyorsunuz? Tam olarak ne istediğiniz için yapılır. Masada hemen önünde bir kaşık olduğunda çorba yemek için çatal yapmaya çalışmak gibi.


tüm kullanım durumları için işe yaramaz çünkü hr bir blok öğedir - bunun için stil sınırlıdır
Thariama

1
Görünüşe göre açık kullanmak istiyor: hepsi, Gabor'un mükemmel cevabına bakın. Yani çatal metaforunuz hiçbir anlam ifade etmiyor.
eddy147
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.