html – blog.dsinf.net https://blog.dsinf.net //blog whitehat hackera// Mon, 12 Sep 2016 18:22:21 +0000 pl-PL hourly 1 https://wordpress.org/?v=6.7.2 https://blog.dsinf.net/wp-content/uploads/2021/01/logo_square-1-150x150.png html – blog.dsinf.net https://blog.dsinf.net 32 32 Prosty slider https://blog.dsinf.net/2016/09/prosty-slider/ https://blog.dsinf.net/2016/09/prosty-slider/#respond Mon, 12 Sep 2016 18:22:21 +0000 http://blog.dsinf.net/?p=965 Znalezienie prostego (czyli nie wymagającego includowania tony pluginów do jQuery i pisania konfigu na kiladziesiąt linii) slidera w HTML proste nie jest. Dlatego napisałem własny – sflider (od oryginalnego projektu – sflider – SFI slider).

Istnieje co prawda opcja oparcia takowego na samym CSS3 i jego atrybucie animation (np. https://www.smashingmagazine.com/2012/04/pure-css3-cycling-slideshow/), ale dodanie potem sterowania (poprzedni/następny) jest niemożliwe w wygodny sposób (-> https://css-tricks.com/controlling-css-animations-transitions-javascript/) – prosto spauzujemy i wznowimy animację (swoją drogą jak zwykle „kompatybilnie” potrzeba nam dwóch reguł – jednej zwykłej i drugiej z -webkit-* ), po przyłożeniu się obliczmy aktualny slajd (ale przejścia są kolejnymi klatkami animacji więc można spauzować w połowie przejścia), a po trudnej pracy zmodyfikujemy klatki animacji żeby jakoś na nią wpłynąć.  Najlepiej przerzucić się na jQuery który w swoim zestawie funkcji animate wykorzystuje CSSowy silnik animacji i jest konfigurowalny.

W projekcie sflider wykorzystałem kilka wartych wspomnienia rozwiązań:

  • Chcąc osiągnąć pauzowanie przejść animacji po najechaniu myszką bez resetowania odliczania (żeby nie wystąpił efekt że po każdym wyjechaniu myszą ze slajdera czas do następnego przejścia zawsze wynosił przykładowo 5 sekund) a jednocześnie resetowanie odliczania po ręcznej nawigacji (żeby po kliknięciu „wstecz” w czwartej z pięciu sekund odstępu i opuszczeniu slidera nie stracić aktualnego widoku z oczu) wykorzystałem fakt iż setTimeout  zwraca handle do timera (podobnie jak setInterval ), który można podstawić do zmiennej, a następnie zniszczyć funkcją clearTimeout .
    Zastosowana logika jest następująca: stworzenie slidera powołuje pierwszy setTimeout, funkcja przezeń wołana chainowo tworzy kolejny i tak w kółko – efekt podobny do emulowania setInterval. Ale inna funkcja może ten licznik zresetować bez większych problemów.
  • Własna implementacja dzielenia modulo bo JavaScript wariuje na liczbach ujemnych (a to ci niespodzianka).
  • Budowa slidera jest następująca: duży div zawiera mniejsze o tej samej wysokości (display: inline-block; )co rodzic ale o szerokości ekranu (position: relative; width: 100%; ) -wtedy rodzic ma szerokość n*100% (n – ilość slajdów). Zmiana widoku odbywa się poprzez zmianę parametru offsetu left – może być zwykłą animacją, może być zapewne na jakieś inne sprytne sposoby. Ważna uwaga – wielkość fontu diva rodzica musi być ustawiona na zero – inaczej białe znaki (np. łamanie linii + taby) które HTML zawsze zwinie do jednej spacji utworzą nieoverridowalny margines między divami (inline-block!) który spowoduje że mimo układu: n divów po 100% w divie szerokości n*100% ostatni nie zmienści się w wierszu. Jeśli używamy np. bootstrapa lub jakkolwiek overridujemy styl fonta divów ze slajdami to nie musimy nic robić, jednak w przeciwnym wypadku trzeba wymusić czcionkę bo zdziedzicy się ona do zerowej.
  • Automagia polega na przerzuceniu liczenia szerokości divów slajdów względem rodzica na javascript – jest to zbyt skomplikowanie dla CSS na ten moment.

Kod źródłowy: https://github.com/danielskowronski/sflider

Demo: https://blog.dsinf.net/wp-content/uploads/2016/09/sflider-demo/01_simple.html

]]>
https://blog.dsinf.net/2016/09/prosty-slider/feed/ 0
Na bardzo szybko: automatyczna zmiana rozmiaru iframe w HTML https://blog.dsinf.net/2014/06/na-bardzo-szybko-automatyczna-zmiana-rozmiaru-iframe-w-html/ https://blog.dsinf.net/2014/06/na-bardzo-szybko-automatyczna-zmiana-rozmiaru-iframe-w-html/#respond Thu, 26 Jun 2014 20:47:32 +0000 http://blog.dsinf.net/?p=478 Problem irytujący, ale rozwiązanie szybkie (jak się przeczyta ten artykuł ^^).

Skrypt, którego użyjemy to: http://davidjbradshaw.github.io/iframe-resizer/. Są trzy elementy: plik JS dla strony trzymającej iframe, plik JS dla każdej strony, która się pojawi wewnątrz iframe i wywołanie JavaScript na stronie z iframe. Działa wszędzie poza Operą Mobile (ale kogo to dziwi…) i WinPhone_IE10 (na WinPhone_IE11 nie wybucha i blokuje się na maksymalnych rozmiarach).

 
Strona „host”:

<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
<iframe id="nazwa" width="500px" scrolling="no" src="plik.html"></iframe>
<script src="https://raw2.github.com/davidjbradshaw/iframe-resizer/master/js/iframeResizer.min.js"></script>
<script>$("#nazwa").iFrameResize({});</script>

L1: jQuery [opcjonalny – można ładować iFrameResize({}) przez natywny kod JS]
L2: docelowy iframe; zdefiniowanie na sztywno któregoś z wymiarów zablokuje jego zmiany
L3: skrypt iframeResizer.min.js
L4: podpięcie funkcji pod obiekt

 
Strona „gość”:

<script src="https://raw.githubusercontent.com/davidjbradshaw/iframe-resizer/master/js/iframeResizer.contentWindow.min.js"></script>
treść lalala-trolololo; lorem ipsum

L1: skrypt iframeResizer.contentWindow.min.js
L2+:treść

 
Oczywiście skrypty należy załadować na swój własny serwer żeby było porządniej. Porządna, ale przydługa jak na błyskawiczne rozwiązanie typu „wirtualny duct-tape” – http://davidjbradshaw.github.io/iframe-resizer/.

]]>
https://blog.dsinf.net/2014/06/na-bardzo-szybko-automatyczna-zmiana-rozmiaru-iframe-w-html/feed/ 0
Zmuszenie IE do obsługi fontów, które nie działają https://blog.dsinf.net/2013/10/zmuszenie-ie-do-obslugi-fontow-ktore-nie-dzialaja/ https://blog.dsinf.net/2013/10/zmuszenie-ie-do-obslugi-fontow-ktore-nie-dzialaja/#respond Tue, 15 Oct 2013 19:46:32 +0000 http://blog.dsinf.net/?p=254 Czasem czcionki z Google Fonts nie działają z "wspaniałą" przeglądarką Miocrosoftu…
Żeby mieć pewność, że IE nie wystrzeli nam z brakiem obsługi niektórych fontów (na jednej stronie jeden mi działał, a drugi – nie) warto wyposażyć się w czcionkę w formacie EOT (Embedded OpenType) i jakimkolwiek normalnym, np. TTF (True Type Font – natywne w Windows) i stworzyć CSS, podobny do poniższego:

@font-face {
	font-family: "Andika";
	src: url("/andika-r-webfont.eot") !important;
	src: url("/andika-r-webfont.eot") format('embedded-opentype');
	src: url('/Andika-R.ttf') format('truetype') ;			
}

Kilka słów wyjaśnienia: EOT jest obsługiwany zdaje się tylko przez IE – zostanie załadowany najpierw, ale nie wiem czemu bez !important czcionka nie jest ładowana – może występuje próba użycia wpisu z TTF? Kolejna linijka to zabezpieczenia dla starych wersji IE, które nie radzą sobie z detekcją, co to za typ czcionki i dopiero last but not the least wpis dla "reszty świata" spoza rezerwatu IE. Lepiej dać na wszystkie czcionki niż mieć niespodziankę – brak zgodności zauważyłem przypadkiem.
Na koniec przydatny link: online’owy konwerter czcionek – http://onlinefontconverter.com/

]]>
https://blog.dsinf.net/2013/10/zmuszenie-ie-do-obslugi-fontow-ktore-nie-dzialaja/feed/ 0
Absolutne centrowanie pionowe w HTML (nawet bez CSS) https://blog.dsinf.net/2013/08/absolutne-centrowanie-pionowe-w-html-nawet-bez-css/ https://blog.dsinf.net/2013/08/absolutne-centrowanie-pionowe-w-html-nawet-bez-css/#respond Mon, 19 Aug 2013 18:52:19 +0000 Długo można szukać w sieci odpowiedzi na pytanie „jak wycentrować tekst w pionie?”.
A rezultat? Mijaki na statyczny tekst, super skrypty korzystające z jQuery do zmiany marginesów, nieładne cosie oparte na table-cell (http://stackoverflow.com/questions/4180594/vertical-centering-of-a-horizontal-scrolling-div), top: 50%; (http://www.werockyourweb.com/css-vertically-horizontally-center)…

podczas gdy istnieje rozwiązanie, może mniej eleganckie ale zato skuteczne i działające nawet w IEtabelka.

Brzmi jak wstęp do starożytnej szkoły HTMLa (no dobra – średniowiecznej, bo w starożytności uczono frame’ów), czyż nie?

Jak wygląda kod wycentrowania napisu na całą stronę (np. komunikat błędu, strona zastępcza itp.)? A tak:



coś, co ma być w środku

Przykład (odpowiednio zmiejszony + border):

napis
]]>
https://blog.dsinf.net/2013/08/absolutne-centrowanie-pionowe-w-html-nawet-bez-css/feed/ 0