Czego szukam:
Sposób na stylizację jednej POŁOWY postaci. (W tym przypadku połowa litery jest przezroczysta)
Czego aktualnie szukałem i próbowałem (Bez powodzenia):
- Metody stylizacji połowy znaku / litery
- Stylizowanie części znaku za pomocą CSS lub JavaScript
- Zastosuj CSS do 50% postaci
Poniżej znajduje się przykład tego, co próbuję uzyskać.
Czy istnieje do tego rozwiązanie CSS lub JavaScript, czy też będę musiał uciekać się do obrazów? Wolałbym nie iść drogą obrazu, ponieważ ten tekst zostanie wygenerowany dynamicznie.
AKTUALIZACJA:
Ponieważ wielu pytało, dlaczego kiedykolwiek chciałbym stylizować połowę postaci, właśnie dlatego. Moje miasto wydało ostatnio 250 000 USD na zdefiniowanie dla siebie nowej „marki”. To logo wymyślili. Wiele osób narzeka na prostotę i brak kreatywności i nadal to robi. Moim celem było wymyślenie tej strony jako żartu. Wpisz „Halifax”, a zobaczysz, co mam na myśli.
źródło
Odpowiedzi:
Teraz w GitHub jako wtyczka!
Zachęcamy do rozwidlenia i ulepszenia.
Demo | Pobierz Zip | Half-Style.com (przekierowuje do GitHub)
Część 1: Podstawowe rozwiązanie
Demo: http://jsfiddle.net/arbel/pd9yB/1694/
Działa to na dowolny tekst dynamiczny lub pojedynczy znak i jest zautomatyzowane. Wszystko, co musisz zrobić, to dodać klasę do tekstu docelowego, a reszta zostanie załatwiona.
Dostęp do oryginalnego tekstu jest również zachowany dla czytników ekranu dla osób niewidomych lub niedowidzących.
Objaśnienie pojedynczego znaku:
Czysty CSS. Wszystko, co musisz zrobić, to zastosować
.halfStyle
klasę do każdego elementu, który zawiera postać, która ma być stylizowana na pół.Dla każdego elementu zakresu zawierającego znak możesz utworzyć atrybut danych, na przykład tutaj
data-content="X"
, i użyć pseudoelementu,content: attr(data-content);
aby.halfStyle:before
klasa była dynamiczna i nie będziesz musiał kodować go na stałe dla każdej instancji.Objaśnienie dowolnego tekstu:
Po prostu dodaj
textToHalfStyle
klasę do elementu zawierającego tekst.( Demo JSFiddle )
Część 2: Zaawansowane rozwiązanie - Niezależne części lewa i prawa
Dzięki temu rozwiązaniu możesz stylizować lewą i prawą część, indywidualnie i niezależnie .
Wszystko jest takie samo, tylko bardziej zaawansowany CSS robi magię.
Pokaż fragment kodu
( Demo JSFiddle )
Część 3: Dopasuj i ulepsz
Teraz, gdy wiemy, co jest możliwe, utwórzmy kilka odmian.
-Poziomie części pół
Bez cienia tekstu:
Możliwość cienia tekstu dla każdej połowy niezależnie:
Pokaż fragment kodu
( Demo JSFiddle )
-Wertykalne 1/3 części
Bez cienia tekstu:
Możliwość cieniowania tekstu dla każdej części 1/3 niezależnie:
Pokaż fragment kodu
( Demo JSFiddle )
-Poziome 1/3 części
Bez cienia tekstu:
Możliwość cieniowania tekstu dla każdej części 1/3 niezależnie:
Pokaż fragment kodu
( Demo JSFiddle )
-HalfStyle Improvement Autor @KevinGranger
Pokaż fragment kodu
( Demo JSFiddle )
-PeelingStyle poprawa HalfStyle przez @SamTremaine
Pokaż fragment kodu
( Demo JSFiddle i na samtremaine.co.uk )
Część 4: Gotowy do produkcji
Dostosowane różne zestawy stylów Half-Style mogą być używane w pożądanych elementach na tej samej stronie. Możesz zdefiniować wiele zestawów stylów i powiedzieć wtyczce, którego użyć.
Wtyczka korzysta z atrybutu danych
data-halfstyle="[-CustomClassName-]"
na.textToHalfStyle
elementach docelowych i automatycznie wprowadza wszystkie niezbędne zmiany.Zatem po prostu na elemencie zawierającym tekst dodaj
textToHalfStyle
atrybut klasy i danychdata-halfstyle="[-CustomClassName-]"
. Wtyczka wykona resztę zadania.Również definicje klas zestawów stylów CSS pasują do
[-CustomClassName-]
części wspomnianej powyżej i są powiązane łańcuchem.halfStyle
, więc będziemy to robić.halfStyle.[-CustomClassName-]
( Demo JSFiddle )
źródło
Właśnie skończyłem opracowywać wtyczkę i jest ona dostępna dla wszystkich! Mam nadzieję, że ci się spodoba.
Zobacz projekt na GitHub - zobacz stronę projektu . (dzięki czemu możesz zobaczyć wszystkie podzielone style)
Stosowanie
Przede wszystkim upewnij się, że
jQuery
biblioteka jest uwzględniona. Najlepszym sposobem na uzyskanie najnowszej wersji jQuery jest zaktualizowanie tagu head za pomocą:Po pobraniu plików upewnij się, że dołączasz je do swojego projektu:
Narzut
Wszystko, co musisz zrobić, to przypisać klasę
splitchar
, a następnie żądany styl elementowi owijającemu tekst. na przykładPo tym wszystkim upewnij się, że wywołujesz funkcję jQuery w pliku gotowym do dokumentu w następujący sposób:
Dostosowywanie
Aby tekst wyglądał dokładnie tak, jak chcesz, wystarczy zastosować swój projekt w następujący sposób:
Otóż to! Teraz masz już
Splitchar
wszystko ustawione. Więcej informacji na ten temat na stronie http://razvanbalosin.com/Splitchar.js/ .źródło
Tak, możesz to zrobić za pomocą tylko jednej postaci i tylko CSS.
Jednak tylko Webkit (i Chrome):
http://jsbin.com/rexoyice/1/
Wizualnie wszystkie przykłady, które używają dwóch znaków (czy to poprzez JS, pseudoelementy CSS, czy po prostu HTML) wyglądają dobrze, ale zauważ, że wszystko dodaje zawartość do DOM, co może powodować dostępność - a także zaznaczanie / wycinanie tekstu / wklej problemy.
źródło
background-clip: text
jest super niesamowite i powinni rozważyć (lub coś podobnegotext-decoration-background
) moduł 4 poziomu.JSFiddle DEMO
Zrobimy to za pomocą pseudo selektorów CSS!
Ta technika będzie działać z dynamicznie generowaną zawartością oraz różnymi rozmiarami i szerokościami czcionek.
HTML:
CSS:
Aby owinąć dynamicznie generowany ciąg, możesz użyć funkcji takiej jak ta:
źródło
Może to być nieistotne, może nie, ale jakiś czas temu stworzyłem funkcję jQuery, która robi to samo, ale poziomo.
Nazwałem to „Strippex” Dla „pasków” + „tekstu”, demo: http://cdpn.io/FcIBg
Nie twierdzę, że jest to rozwiązanie jakichkolwiek problemów, ale już próbowałem zastosować css do połowy postaci, ale poziomo, więc pomysł jest taki sam, realizacja może być okropna, ale działa.
A co najważniejsze, dobrze się bawiłem, tworząc go!
źródło
pointer-events:none
do&:nth-child(2)
-&:nth-child(5)
. Dzięki temu tekst można podświetlić tylko raz, a Ty otrzymujesz tylko jedną kopię. Możesz to zobaczyć tutaj: codepen.io/anon/pen/upLajJeśli jesteś tym zainteresowany, to usterka Lucasa Bebbera jest bardzo podobnym i super fajnym efektem:
Utworzono za pomocą prostej miksu SASS, takiego jak
Więcej informacji na stronie CSS Tricks Chrisa Coyera i na stronie Codepen Lucasa Bebbera
źródło
Tutaj brzydka implementacja w kanwie. Wypróbowałem to rozwiązanie, ale wyniki są gorsze niż się spodziewałem, więc i tak jest.
źródło
0.5
do zatrzymania koloru czerwonego.Najbliżej mogę uzyskać:
Demo: http://jsfiddle.net/9wxfY/2/
Oto wersja, która używa tylko jednego zakresu: http://jsfiddle.net/9wxfY/4/
źródło
$('span').width()
po prostu zwraca szerokość pierwszego znalezionego zakresu; musiało to być coś, co zrobiłeś dla każdej pary. Co daje mi pomysł ...Właśnie grałem z rozwiązaniem @ Arbel:
źródło
Inne rozwiązanie tylko CSS (chociaż atrybut danych jest potrzebny, jeśli nie chcesz pisać CSS specyficznych dla liter). Ten działa bardziej ogólnie (testowany IE 9/10, najnowszy Chrome i najnowszy FF)
źródło
Ograniczone rozwiązanie CSS i jQuery
Nie jestem pewien, jak eleganckie jest to rozwiązanie, ale przecina wszystko dokładnie o połowę: http://jsfiddle.net/9wxfY/11/
W przeciwnym razie stworzyłem dla Ciebie fajne rozwiązanie ... Wszystko, co musisz zrobić, to mieć to dla swojego HTML:
Spójrz na tę najnowszą i dokładną edycję z dnia 13.06.2016: http://jsfiddle.net/9wxfY/43/
Jeśli chodzi o CSS, jest on bardzo ograniczony ... Wystarczy go zastosować
:nth-child(even)
źródło
http://experimental.samtremaine.co.uk/half-style/
Możesz łączyć ten kod do robienia różnego rodzaju interesujących rzeczy - to tylko jedna implementacja, którą wymyśliłem ze współpracownikiem i zeszłej nocy.
źródło
Ładne rozwiązanie tylko dla WebKit, które korzysta ze
background-clip: text
wsparcia: http://jsfiddle.net/sandro_paganotti/wLkVt/źródło
Co powiesz na krótszy tekst?
Może nawet działać na dłuższym tekście, jeśli zrobiłeś coś z pętlą, powtarzając znaki za pomocą JavaScript. W każdym razie wynik jest mniej więcej taki:
źródło
FWIW, oto moje zdanie na ten temat, robiąc to tylko z CSS: http://codepen.io/ricardozea/pen/uFbts/
Kilka notatek:
Głównym powodem, dla którego to zrobiłem, było przetestowanie siebie i sprawdzenie, czy udało mi się stylizować połowę postaci, a jednocześnie zapewnić sensowną odpowiedź na OP.
Zdaję sobie sprawę, że nie jest to idealne ani najbardziej skalowalne rozwiązanie, a rozwiązania proponowane przez ludzi tutaj są o wiele lepsze dla scenariuszy „rzeczywistych”.
Utworzony przeze mnie kod CSS opiera się na pierwszych przemyśleniach, które przyszły mi do głowy i moim osobistym podejściu do problemu.
Moje rozwiązanie działa tylko na znakach symetrycznych, takich jak X, A, O, M. ** Nie działa na znakach asymetrycznych, takich jak B, C, F, K lub małych liter.
** JEDNAK to podejście tworzy bardzo interesujące „kształty” o asymetrycznych znakach. Spróbuj zmienić X na K lub na małą literę, np. H lub p w CSS :)
HTML
SCSS
źródło
Możesz to również zrobić za pomocą SVG, jeśli chcesz:
http://codepen.io/nicbell/pen/jGcbq
źródło
Można to osiągnąć za pomocą
:before
selektora CSS icontent property value
.>> Zobacz na jsFiddle
źródło
Możesz użyć poniższego kodu. Tutaj w tym przykładzie użyłem
h1
tagu i dodałem atrybut,data-title-text="Display Text"
który pojawi się z innym kolorem tekstu nah1
elemencie tagu, co daje efekt tekstu półkolorowego, jak pokazano w poniższym przykładzieźródło
Dla przypomnienia w historii!
Wymyśliłem rozwiązanie dla mojej własnej pracy sprzed 5-6 lat, a mianowicie Gradext (czysty javascript i czysty css, bez zależności).
Wyjaśnienie techniczne polega na tym, że możesz utworzyć taki element:
teraz, jeśli chcesz utworzyć gradient na tekście, musisz utworzyć kilka warstw, z których każda ma osobny kolor, a utworzone widmo zilustruje efekt gradientu.
na przykład spójrz na to słowo lorem wewnątrz a
<span>
i spowoduje efekt gradientu poziomego ( sprawdź przykłady ):i możesz kontynuować tworzenie tego wzoru również przez długi czas i długi akapit.
Ale!
Co jeśli chcesz stworzyć efekt pionowego gradientu na tekstach?
Jest też inne rozwiązanie, które może być pomocne. Opiszę szczegółowo.
Zakładając nasz pierwszy
<span>
raz jeszcze. ale treść nie powinna być pojedynczymi literami; treść powinna być cały tekst, a teraz mamy zamiar skopiować samo<span>
znowu i znowu (liczba przęseł zdefiniuje jakość swojego gradientu, większą rozpiętość, lepszy wynik, ale słabe wyniki). Zerknij na to:Znowu, ale!
co jeśli chcesz, aby te efekty gradientu przesuwały się i tworzyły z niego animację?
jest też inne rozwiązanie. Zdecydowanie powinieneś sprawdzić,
animation: true
a nawet.hoverable()
metodę, która doprowadzi do rozpoczęcia gradientu na podstawie pozycji kursora! (brzmi fajnie xD)tak po prostu tworzymy gradienty (liniowe lub radialne) na tekstach. Jeśli podoba Ci się ten pomysł lub chcesz dowiedzieć się więcej o nim, powinieneś sprawdzić dostarczone linki.
Być może nie jest to najlepsza opcja, a może nie najlepszy sposób, aby to zrobić, ale otworzy trochę miejsca do tworzenia ekscytujących i zachwycających animacji, które zainspirują inne osoby do lepszego rozwiązania.
Pozwoli ci to na użycie stylu gradientu na tekstach, który jest obsługiwany nawet przez IE8!
Tutaj możesz znaleźć działające demo na żywo, a oryginalne repozytorium jest również dostępne na GitHub, open source i gotowe na niektóre aktualizacje (: D)
To mój pierwszy raz (tak, po 5 latach dobrze to usłyszałeś), aby wspomnieć o tym repozytorium w dowolnym miejscu w Internecie i jestem tym podekscytowany!
[Aktualizacja - sierpień 2019 r .:] Github usunął demo stron github z tego repozytorium, ponieważ jestem z Iranu! Tylko kod źródłowy jest dostępny tutaj tho ...
źródło