Yan paneldə sabit blok. WordPress-də sabit üst menyu və üzən yan panel. İki və ya daha çox blok bir-birinin ardınca sabitlənir

Layout tələbləri hansılardır?

  • Rezin iki sütunlu düzülmə
  • yan panel sabit eni 300px
  • məzmun eninin qalan hissəsinə qədər uzanır.
  • altbilgi aşağıya sıxıldı (bu təlimatda bunun necə edildiyini göstərməyəcəyəm).
Belə bir tərtibat tərtib edərkən hansı Css problemləri yaranır: 1 yol.

Blokları süzürsünüzsə, onlara sabit genişlik verməlisiniz (300px və 100px məzmun üçün 1 yan panel təyin edə bilməzsiniz). Bu halda ya məzmun aşağı sürüşür, ya da sola 300px üfüqi sürüşdürmə görünür. Yaxşı, başa düşmək üçün əsas odur ki, bu üsul bizə uyğun deyil.


2 yol.

Bir çox yazıçı bu üsulu təklif edir, onlar nə haqda düşünürlər?! Metodun mahiyyəti ondan ibarətdir ki, siz kənar çubuğunu 300 eni ilə üzmək üçün təyin edə bilərsiniz, məzmunu üzməsin və ona margin-left: 300px təyin edə bilərsiniz. Yaxşı yol və hər şey çox yaxşı işləyir. Düzünü desəm, bunun ən yaxşı yol olduğunu düşünürdüm, lakin bu metodun öz tələləri var. Bu metoddan imtina etməyin səbəbləri ondan ibarətdir ki, əgər biz qəflətən məzmunda, məsələn, üzən li və ya hər hansı digər float blokları olan bir menyu yaratsaq və sonra onları aydın: hər ikisi ilə təmizləmək istəsək, bu blokun alt sərhədi sürüşür. yan panelin alt haşiyəsinin səviyyəsinə qədər (Nə və bu qəribə deyil, çünki köpük təmizlənir, üzən bloku sabit bir hündürlüyə təyin etsəniz, bunun qarşısını ala bilərsiniz, lakin bu, sabit bir hündürlüyü təyin etmək üçün heç də belə deyil. ).


3 yol.

Yan panelin mütləq mövqeyi üçün istifadə edilə bilər, ancaq məzmunun hündürlüyünə görə yan paneldən daha böyük olacağına əminsinizsə, əks halda yan panelin bütün məzmunu altbilgiyə uyğunlaşacaq (hər şeydən sonra mütləq yerləşdirmə ümumi axından kənara çıxır) ).

Ancaq mənə gəldikdə, bu da çox yaxşı bir yol deyil!


4 yol.

"Əla yoldur, əgər onun qüsurları varsa, şərh yazın. Amma məncə, bu, ən yaxşı yoldur."

  • Bu metodun üstünlükləri: birincisi, DOM məzmunu axtarış motorları üçün yaxşı olan yan paneldən əvvəl gedəcək.
  • altbilgiyə heç nə uyğun gəlməyəcək
  • hər hansı bloklar təmizlənə bilər və heç bir şey aşağı sərhədə sürüşməyəcək (Beləliklə, ikinci metodun problemlərini aradan qaldırdıq).

Ümumiyyətlə, necə işləyir: koda baxın, əvvəlcə məzmun, sonra yan panel gəlir. biz bu iki bloka float təyin etdik (əlbəttə ki, yan panel aşağı sürüşür). bundan sonra biz yan panel xüsusiyyətini margin-left:-100% təyin etdik. əladır, o, yerinə qayıdır və məzmunu margin-lerft:300px ilə abzaslayın.


html css .sidebar(
eni: 300px;
ekran: blok;
float: sol;
marja: 0 0 0 -100%;
}
.məzmun(
min eni: 723px;
ekran: blok;
float: sol;
kənar: 0 0 0 220px;
}

Saytda üzən blok (və ya hərəkət edən, sabit, ilişib qalmış adlanır) lazımdır ki, istifadəçi reklamın ən çox yerləşdiyi səhifəni sürüşdürərkən bir sabit elementi görsün (tezerlər, bannerlər və ya kontekst).

Təəssüf ki, adsense qaydaları bizə bunu qadağan edir. Bununla belə, bir çox sayt sahibləri qaydaları öz riski ilə nəzərə almırlar. Bəlkə də buna görə cəzalandırılmırlar, amma risk etməyi məsləhət görməzdim.

Mən tizerlərimi/bannerlərimi belə bloklara yerləşdirirəm və bəzən reklam əvəzinə onları orada nümayiş etdirirəm. əlaqəli yazılar və ya ziyarətçi üçün bəzi faydalı məlumatlar.

Saytınızda üzən bloku necə edə biləcəyinizi sizə xəbər verək.

Tapşırıq: kənar paneldə (kenar çubuğunda) sonuncu bloku üzən hala gətirin. Üstəlik, o, yalnız istifadəçinin səhifəni açdığı anda deyil, sürüşərək ona çatdığı anda yapışdırılır. Həmçinin, blok altbilgiyə çataraq (yəni üst-üstə düşmədən) "yapışmalıdır".

Ən işlək yol

Yapışqan blokun bir çox tətbiqi var, lakin hamısı düzgün işləmir. dan deyim Şəxsi təcrübə: Blok quraşdırmanın eyni üsulu bir saytda işləyə bilər, lakin digərində tıxaclar görünür.

Aşağıda onu quraşdırdığım demək olar ki, hər bir saytda işləmiş üzən blokun bir nümunəsidir. Keçi yox idi. Mühərrik də vacib deyil (DLE, WordPress, LiveStreet və s.).

Aşağıdakı HTML kodunu yan panelin istədiyiniz yerinə yapışdırın:

$(pəncərə).scroll(funksiya() ()
var sb_m = 20 ; /* üst və alt örtük */
var mb = 300 ; /* zirzəmi hündürlüyü kənar ilə */
varst = $(pəncərə).scrollTop() ;
var sb = $(".yapışqan blok" );
var sbi = $(".yapışqan blok .daxili" );
var sb_ot = sb.offset() .top;
var sbi_ot = sbi.offset() .top;
var sb_h = sb.height () ;

Əgər(sb_h + $(sənəd).scrollTop() + sb_m + mb< $(document) .height () ) {
if(st > sb_ot) (
var h = Math.round(st - sb_ot) + sb_m;
sb.css(("paddingTop" : h) );
}
başqa(
sb.css(( "paddingTop" : 0 ) );
}
}
} ) ;

Bu kodda siz altbilginizin yuxarı, aşağı və hündürlüyünü təyin edə bilərsiniz, yəni. blokun dayanmalı olduğu hündürlük.

İndi biz JS-i daxil edirik. Bunu etmək üçün HEAD bölməsinə yazın:

Ən asan yol (WordPress üçün)

Həm də uğursuz üsuldur, lakin . Tıxacsız işləyir.

Üstünlüklər:

  • HTML-i başa düşməyə/anlamağa ehtiyac yoxdur;
  • quraşdırma asanlığı və sürəti.

Qüsurlar:

  • çevik deyil. Bütün widget üzən olur (adı və görünüşü daxil olmaqla). Deyək ki, bu bloku fərqli rəng və ya ölçüdə etmək çətin olacaq.
  • Necə istifadə etməli:

  • Plugin endirilir.
  • Quraşdırırıq.
  • Aktivləşdirin.
  • Nişanda admin panelinə keçin: Dizayn -> Vidjetlər. Sabitləşdirmək istədiyimiz vidjeti açın.
  • "Vidceti düzəldin" yanında bir işarə qoyun və "Saxla" düyməsini basın.
  • Sürüşmə bloklarının həyata keçirilməsinin digər yolları

    Mənə yuxarıdakı iki üsul kimi daha az rahat və aydın görünmürdülər. Amma hər halda onlar haqqında sizə məlumat verəcəyəm.

    Seçim №1 (jQuery olmadan)

    Yan panelə yapışdırın:

    HTML-də üslubları təyin edirik (dərhal CSS-ə əlavə etmək daha yaxşıdır):


    .yapışqan(
    mövqe: sabit;
    z indeksi: 101
    }
    .dayan (
    mövqe: nisbi;
    z indeksi: 101
    }

    İndi skriptin özünü səhifəyə əlavə edirik (daxil etmək daha yaxşıdır ayrı fayl, "Ən işlək üsul"dakı kimi):


    (funksiya () (
    var a = document.querySelector("#side1" ) , b = null, P = 0 ; // əgər sıfır rəqəmlə əvəz edilərsə, o zaman blok brauzer pəncərəsinin yuxarı kənarı elementin yuxarı kənarına çatmazdan əvvəl yapışacaq. Mənfi rəqəm ola bilər
    window.addEventListener("scroll" , Ascroll, false) ;
    document.body.addEventListener("scroll" , Ascroll, false) ;
    funksiyası Ascroll() (
    əgər (b == null) (
    var Sa = getComputedStyle(a, "" ) , s = "" ;
    üçün (var i = 0; i< Sa.length; i++) {
    if (Sa[ i] .indexOf("qutu ölçüsü" ) == 0 || Sa[ i] .indexOf("daşma" ) == 0 || Sa[ i] .indexOf("en" ) == 0 || Sa[ i] .indexOf("padding" ) == 0 || Sa[ i] .indexOf("border" ) == 0 || Sa[ i] .indexOf("kontur" ) == 0 || Sa[ i] .indexOf("qutu-kölgə" ) == 0 || Sa[ i] .indexOf("fon" ) == 0 ) (
    s += Sa[ i] + ": " +Sa.getPropertyValue(Sa[ i] ) + "; "
    }
    }
    a.innerHTML = "" +a.innerHTML+"" ;
    b = a.uşaqlar[ 0 ] ;
    a.style .height = b.getBoundingClientRect() .height + "px" ;
    a.style .padding = "0" ;
    a.style .border = "0" ;
    }
    varRa = a.getBoundingClientRect(),
    R = Math.round(Ra.top + b.getBoundingClientRect() .height - document.querySelector("footer" ) .getBoundingClientRect() .top + 0 ); // blok selektoru, yuxarı kənarına çatdıqda yapışqan elementi çıxarmaq lazımdır; Math.round() yalnız IE üçündür; sıfır rəqəmlə əvəz edilərsə, blok elementin alt kənarı altbilgiyə çatmazdan əvvəl yapışacaq
    əgər ((Ra.top - P) Blok necə hazırlanır (div, kənara və s.), başlıq, reklam, menyu düzəldilir. Yalnız CSS #side1 ( /* yerində qalmaq üçün blok */ mövqe: sabit; z indeksi: 101; )

    Düzünü desək, əksər hallarda: üzən düymələr sosial şəbəkələr, sayğaclar, skript tələb olunmur.

    Səhifəni sürüşdürərkən div blokunu necə etmək olar. Artıq skript

    Yəni, keçidləri olan element (və ya hər hansı) səhifənin əvvəlindən uzaqdır. Tutaq ki, başlıq böyükdür və ya yan paneldə axtarış, başlıqlar və s. kimi bir çox faydalılıq var. Brauzer pəncərəsinin yuxarı hissəsi sürüşmə zamanı elementin yuxarı kənarına toxunduqda, o, yapışır və səhifənin sonuna qədər "sürüşür".

    .sticky( mövqe: sabit; yuxarı: 0 piksel; /* əgər sıfır rəqəmlə əvəz olunarsa (skriptdə də), onda blok brauzer pəncərəsinin yuxarı kənarı elementin yuxarı kənarına çatmazdan əvvəl yapışacaq. Mənfi rəqəm ola bilər. Məsələn, istifadə edək */ z indeksi: 101; ) (funksiya()( // anonim funksiya (funksiya()( ))() buna görə də “a” və “b” dəyişənləri qloballaşmır var a = document.querySelector("#side1 "), b = null; // bağlanacaq blok seçicisi // Əgər funksiyası Ascroll() ( əgər (b == null) ( // qonşulardan asılılığı aradan qaldırmaq üçün uşaq sarğı əlavə edin var Sa = getComputedStyle(a, ""), s = ""; üçün (var i = 0; i< Sa.length; i++) { // if (Sa[i].indexOf("daşma") == 0 || Sa[i].indexOf("padding") == 0 || Sa[i].indexOf("sərhəd") == 0 || Sa[i].indexOf("kontur") == 0 || Sa[i].indexOf("qutu-kölgə") == 0 || Sa[i].indexOf("fon") == 0) ( s += Sa[i] + ": " +Sa.getPropertyValue(Sa[i]) + "; " ) ) b = document.createElement("div"); // uşaq yaradın b.style.cssText = s + " qutu ölçüsü: sərhəd qutusu; eni: " + a.offsetWidth + "px;"; a.insertBefore(b, a.firstChild); // əvvəlcə uşağı yapışqan bloka qoyun varl = a.childNodes.length; üçün (var i = 1; i< l; i++) { // bütün digər nəsilləri yeni yaradılmış uşağa köçürün (cəmi: daxilində hələ də skriptlər işləyir) b.appendChild(a.childNodes); ) a.style.height = b.getBoundingClientRect().height + "px"; // sürüşmə elementinin altında başqa bloklar varsa, öz dəyərinizdən istifadə edə bilərsiniz a.style.padding = "0"; a.style.border = "0"; // əgər element təyin edilibsə və ya) əgər (a.getBoundingClientRect().top #side1 > div:nth-child(3), #side2 > div:nth-child(2) ")).forEach(function(a)) ( // blok seçiciləri düzəldiləcək. Bir blok və ya iki və ya daha çox ola bilər var b = null, P = 0 ; window.addEventListener("scroll", Ascroll, false); document.body.addEventListener("scroll", Ascroll, false); funksiyası Ascroll() ( if (b == null) ( var Sa = getComputedStyle(a, ""), s = ""; for (var i = 0; i)< Sa.length; i++) { if (Sa[i].indexOf("overflow") == 0 || Sa[i].indexOf("padding") == 0 || Sa[i].indexOf("border") == 0 || Sa[i].indexOf("outline") == 0 || Sa[i].indexOf("box-shadow") == 0 || Sa[i].indexOf("background") == 0) { s += Sa[i] + ": " +Sa.getPropertyValue(Sa[i]) + "; " } } b = document.createElement("div"); b.style.cssText = s + " box-sizing: border-box; width: " + a.offsetWidth + "px;"; a.insertBefore(b, a.firstChild); var l = a.childNodes.length; for (var i = 1; i < l; i++) { b.appendChild(a.childNodes); } a.style.height = b.getBoundingClientRect().height + "px"; a.style.padding = "0"; a.style.border = "0"; } var Ra = a.getBoundingClientRect(), R = Math.round(Ra.top + b.getBoundingClientRect().height - document.querySelector("#article ").getBoundingClientRect().bottom + 0 ); if ((Ra.top - P) Array.prototype.slice.call(document.querySelectorAll("#aside1 div.stickyDa ")).forEach(function(a) { var b = null, P = 0 ; window.addEventListener("scroll", Ascroll, false); document.body.addEventListener("scroll", Ascroll, false); function Ascroll() { if (b == null) { var Sa = getComputedStyle(a, ""), s = ""; for (var i = 0; i < Sa.length; i++) { if (Sa[i].indexOf("overflow") == 0 || Sa[i].indexOf("padding") == 0 || Sa[i].indexOf("border") == 0 || Sa[i].indexOf("outline") == 0 || Sa[i].indexOf("box-shadow") == 0 || Sa[i].indexOf("background") == 0) { s += Sa[i] + ": " +Sa.getPropertyValue(Sa[i]) + "; " } } b = document.createElement("div"); b.style.cssText = s + " box-sizing: border-box; width: " + a.offsetWidth + "px;"; a.insertBefore(b, a.firstChild); var l = a.childNodes.length; for (var i = 1; i < l; i++) { b.appendChild(a.childNodes); } a.style.height = b.getBoundingClientRect().height + "px"; a.style.padding = "0"; a.style.border = "0"; } var Ra = a.getBoundingClientRect(), R = Math.round(Ra.top + b.getBoundingClientRect().height - a.parentNode.getBoundingClientRect().bottom + parseFloat(getComputedStyle(a.parentNode, "").paddingBottom.slice(0, -2))); if ((Ra.top - P) (function(){ var A0 = document.querySelector("#aside1 "), A1 = A0.querySelectorAll(".stickyDa "); Array.prototype.slice.call(A1).forEach(function(a, index) { var b = null, P = 0 ; window.addEventListener("scroll", Ascroll, false); document.body.addEventListener("scroll", Ascroll, false); function Ascroll() { if (b == null) { var Sa = getComputedStyle(a, ""), s = ""; for (var i = 0; i < Sa.length; i++) { if (Sa[i].indexOf("overflow") == 0 || Sa[i].indexOf("padding") == 0 || Sa[i].indexOf("border") == 0 || Sa[i].indexOf("outline") == 0 || Sa[i].indexOf("box-shadow") == 0 || Sa[i].indexOf("background") == 0) { s += Sa[i] + ": " +Sa.getPropertyValue(Sa[i]) + "; " } } b = document.createElement("div"); b.style.cssText = s + " box-sizing: border-box; width: " + a.offsetWidth + "px;"; a.insertBefore(b, a.firstChild); var l = a.childNodes.length; for (var i = 1; i < l; i++) { b.appendChild(a.childNodes); } a.style.height = b.getBoundingClientRect().height + "px"; a.style.padding = "0"; a.style.border = "0"; } var Ra = a.getBoundingClientRect(), R, Rh = Ra.top + b.getBoundingClientRect().height; if (A1 != undefined) { R = Math.round(Rh - A1.getBoundingClientRect().top + 5 ); // bloklar arasında məsafə ki, üzən elementlər bir-birinə yaxınlaşmasın) else ( R = Math.round(Rh - A0.getBoundingClientRect().bottom + parseFloat(getComputedStyle(A0, "").paddingBottom.slice(0, -2))); ) if ((Ra.top - P) ) W) ( əgər (Ra.top< K) { // aşağı sürüşdürünəgər (R2 + N > R1) ( // dibinə çatmaəgər (Rb.alt - W + N = 0) ( // bağlamaq b.className = "yapışqan"; b.style.top = P + "px"; Z = Ra.top - P; ) else ( b.className = "dayan"; b.style.top = - Z + "px"; ) ) else ( b.className = ""; b.style.top = ""; Z = 0; ) ) K = Ra.top; ) başqa ( əgər ((Ra.top - P)