Próbuję wprowadzić poziomą regułę z tekstem pośrodku. Na przykład:
----------------------------------- mój tytuł tutaj ------------ -----------------
Czy jest na to sposób w CSS? Bez wszystkich myślników „-” oczywiście.
html
css
cross-browser
Jason
źródło
źródło
form
tagu?fieldset
ilegend
Odpowiedzi:
Z grubsza tak to zrobiłbym: linia jest tworzona przez ustawienie
border-bottom
na zawierającym,h2
a następnie podanieh2
mniejszegoline-height
. Tekst jest następnie umieszczany w zagnieżdżonymspan
z nieprzezroczystym tłem.Testowałem tylko w Chrome, ale nie ma powodu, aby nie działał w innych przeglądarkach.
JSFiddle: http://jsfiddle.net/7jGHS/
źródło
Po wypróbowaniu różnych rozwiązań, przyjechałem z jednym ważnym dla różnych szerokości tekstu, dowolnego możliwego tła i bez dodawania dodatkowych znaczników.
Testowałem to w IE8, IE9, Firefox i Chrome. Możesz to sprawdzić tutaj http://jsfiddle.net/Puigcerber/vLwDf/1/
źródło
h1 {
overflow: hidden; `text-align: left; `wcięcie tekstu: 40px; `}:after
szerokość elementu w bloku. Jestem ciekaw: jaka dokładnie jest rolamargin-right: -50%
? Gdy szukałem kodu, brak tej właściwości spowodowałby, że dekoracja przełamałaby się do innej linii. I nawet gdy:after
jest przypisana 100% szerokości, nadal potrzebuję ujemnego marginesu po prawej stronie 50%, aby go dopasować. Czemu?Ok, ten jest bardziej skomplikowany, ale działa we wszystkim oprócz IE <8
Elementy: before i: after są pozycjonowane absolutnie, dzięki czemu możemy pociągnąć jeden w lewo, a drugi w prawo. Ponadto szerokość (w tym przypadku 40%) jest bardzo zależna od szerokości tekstu w środku. Pomyśl o tym. Przynajmniej
top: 1.2em
upewnia się, że linie pozostają mniej więcej na środku tekstu, nawet jeśli masz inny rozmiar czcionki.Wydaje się jednak, że działa dobrze: http://jsfiddle.net/tUGrf/3/
źródło
form
tagu. Jeśli tak, jak jestem pewien, mógłby po prostu użyćfieldset
ilegend
.Najkrótsza i najlepsza metoda:
źródło
font-family: monospace;
działało dobrze.Oto rozwiązanie oparte na Flex.
JSFiddle: https://jsfiddle.net/yoshiokatsuneo/3h1fmj29/
źródło
<h1><span>Today</span></h1>
z marginesem / wypełnieniem na rozpiętości.na później (Nowdays) przeglądarce
display:flex
anddpseudo-elements
ułatwia rysować.border-style
,box-shadow
a nawetbackground
pomaga w makijażu.źródło
źródło
Dodaj zakres, aby zwiększyć odstęp między tekstem a linią.
Przykład: http://jsfiddle.net/tUGrf/
źródło
Rozglądałem się za niektórymi rozwiązaniami dla tej prostej dekoracji i znalazłem kilka takich, niektóre dziwne, niektóre nawet z JS, aby obliczyć wysokość czcionki i bla, bla, bla, a potem przeczytałem jeden na ten post i przeczytaj komentarz z thirtydot mówiąc o
fieldset
, alegend
, a ja myślałem, że to było.Zastępuję te 2 elementy, myślę, że możesz skopiować dla nich standardy W3C i dołączyć je do swojej
.middle-line-text
klasy (lub jakkolwiek chcesz to nazwać), ale to właśnie zrobiłem:Oto skrzypce: http://jsfiddle.net/legnaleama/3t7wjpa2/
Grałem ze stylami ramek i działa również na Androidzie;) (Testowane na KitKat 4.XX)
EDYTOWAĆ:
Zgodnie z pomysłem Bekerova Artura, który również jest fajną opcją, zmieniłem obraz base64 .png, aby utworzyć obrys za pomocą .SVG, aby można było renderować w dowolnej rozdzielczości, a także zmieniać kolor elementu bez żadnego innego oprogramowania :)
źródło
Rozwiązanie dla IE8 i nowszych ...
Zagadnienia, na które warto zwrócić uwagę:
Za pomocą
background-color
maskowania obramowania może nie być najlepszym rozwiązaniem. Jeśli masz złożony (lub nieznany) kolor tła (lub obraz), maskowanie ostatecznie się nie powiedzie. Ponadto, jeśli zmienisz rozmiar tekstu, zauważysz, że białe tło (lub cokolwiek ustawisz) zacznie zakrywać tekst w linii powyżej (lub poniżej).Nie chcesz też „zgadywać”, jak szerokie są te sekcje, ponieważ powoduje to, że style są bardzo nieelastyczne i prawie niemożliwe do wdrożenia w responsywnej witrynie, w której zmienia się szerokość treści.
Rozwiązanie:
( Zobacz JSFiddle )
Zamiast „maskować” obramowanie za pomocą
background-color
, użyj swojejdisplay
właściwości.HTML
CSS
Zmień rozmiar tekstu, umieszczając
font-size
właściwość na.group
elemencie.Ograniczenia:
top
właściwość.line
elementu musi wynosić połowęline-height
. Tak więc, jeśli maszline-height
z1.5em
, wówczastop
powinno być-.75em
. Jest to ograniczenie, ponieważ nie jest zautomatyzowane, a jeśli stosujesz te style do elementów o różnych wysokościach linii, może być konieczne ponowne zastosowanie swojegoline-height
stylu.Dla mnie te ograniczenia przeważają nad „problemami”, które zauważyłem na początku mojej odpowiedzi dla większości wdrożeń.
źródło
Daje to stałą długość linii, ale działa świetnie. Długości linii są kontrolowane przez dodanie lub pobranie „\ 00a0” (przestrzeń Unicode).
źródło
Jeśli ktoś zastanawia się, jak ustawić nagłówek tak, aby pojawiał się ze stałą odległością do lewej strony (a nie wyśrodkowaną, jak pokazano powyżej), zorientowałem się, modyfikując kod @ Puigcerber.
Tutaj JSFiddle .
źródło
to ci pomoże
między linią
źródło
Korzystam z układu tabeli, aby dynamicznie wypełniać boki i div-bezwzględnej wysokości 0 div dla dynamicznego pozycjonowania pionowego:
https://jsfiddle.net/eq5gz5xL/18/
Przekonałem się, że nieco poniżej prawdziwego centrum najlepiej wygląda tekst; można to ustawić tam, gdzie
55%
jest (wyższa wysokość powoduje obniżenie paska). Wygląd linii można zmienić tam, gdzieborder-bottom
jest.HTML:
CSS:
źródło
Nie po to, żeby pobić martwego konia, ale szukałem rozwiązania, znalazłem się tutaj i sam nie byłem zadowolony z dostępnych opcji, nie tylko z jakiegoś powodu, że nie byłem w stanie uzyskać dostarczonych tu rozwiązań, aby działały dla mnie dobrze. (Prawdopodobnie z powodu błędów z mojej strony ...) Ale bawiłem się Flexboksem i oto coś, co sam zacząłem pracować.
Niektóre ustawienia są podłączone na stałe, ale tylko w celach demonstracyjnych. Sądzę, że to rozwiązanie powinno działać w każdej nowoczesnej przeglądarce. Po prostu usuń / dostosuj stałe ustawienia dla klasy .flex-rodzic, dostosuj kolory / tekst / rzeczy i (mam nadzieję) będziesz równie szczęśliwy jak ja dzięki takiemu podejściu.
HTML:
Zapisałem również moje rozwiązanie tutaj: https://jsfiddle.net/Wellspring/wupj1y1a/1/
źródło
Na wszelki wypadek IMHO najlepszym rozwiązaniem wykorzystującym CSS jest Flexbox.
Oto przykład:
Powinno to zawsze skutkować idealnie wyśrodkowaną, wyrównaną zawartością z linią po lewej i prawej stronie, z łatwym do kontrolowania marginesem między linią a treścią.
Tworzy element liniowy przed i za najwyższą kontrolą i ustawia, aby zamawiał 1,3 w kontenerze elastycznym, jednocześnie ustawiając zawartość jako porządek 2 (przejdź na środku). Podanie przed / po wzroście o 1 spowoduje, że zajmą one najbardziej wolne miejsce w równym stopniu, jednocześnie utrzymując zawartość w centrum.
Mam nadzieję że to pomoże!
źródło
Nie jestem zbyt pewien, ale możesz spróbować użyć poziomej reguły i przesunąć tekst powyżej jego górnego marginesu. Będziesz potrzebował stałej szerokości tagu akapitu i tła. Jest trochę zuchwały i nie wiem, czy będzie działał na wszystkich przeglądarkach, i musisz ustawić ujemny margines na podstawie rozmiaru czcionki. Działa na Chrome.
źródło
Wypróbowałem większość sugerowanych sposobów, ale kończy się to pewnymi problemami, takimi jak pełna szerokość lub Nie nadaje się do zawartości dynamicznej. W końcu zmodyfikowałem kod i działa idealnie. Ten przykładowy kod narysuje te linie przed i po i jest elastyczny w zakresie zmiany treści. Wyrównany do środka.
HTML
CSS
Wynik: https://jsfiddle.net/fasilkk/vowqfnb9/
źródło
Dla mnie to rozwiązanie działa idealnie dobrze ...
HTML
<h2 class="strikethough"><span>Testing Text</span></h2>
CSS
źródło
Ludzie używający Bootstrap 4 mogą osiągnąć tę metodę. klasy wymienione w kodzie HTML pochodzą z Bootstrap 4.
I napisz swój HTML w ten sposób
źródło
Pozioma i pionowa linia ze słowami na środku
Odpowiedź na to pytanie znajduje się również w https://stackoverflow.com/a/57279326/6569224
źródło
Wynik:
źródło