แก้ไขการบล็อกในแถบด้านข้าง แก้ไขเมนูด้านบนและแถบด้านข้างแบบลอยใน WordPress บล็อกสองบล็อกขึ้นไปได้รับการแก้ไขทีละบล็อก
ข้อกำหนดสำหรับเค้าโครงคืออะไร:
- เค้าโครงยางสองคอลัมน์
- แถบด้านข้างมีความกว้างคงที่ 300px
- เนื้อหาถูกขยายจนเต็มความกว้างที่เหลือ
- กดส่วนท้ายลงไปที่ด้านล่าง (ในบทเรียนนี้ ฉันจะไม่แสดงวิธีการทำ)
หากคุณทำให้บล็อกลอย คุณต้องกำหนดความกว้างคงที่ (คุณไม่สามารถตั้งค่าแถบด้านข้าง 1 แถบเป็น 300px และเนื้อหาเป็น 100%) ในกรณีนี้ เนื้อหาจะเลื่อนลงหรือเลื่อนแนวนอน 300px ไปทางซ้ายจะปรากฏขึ้น สิ่งสำคัญคือต้องเข้าใจว่าวิธีนี้ไม่เหมาะกับเรา
วิธีที่ 2
นักออกแบบเลย์เอาต์หลายคนเสนอวิธีนี้ พวกเขากำลังคิดอะไรอยู่?! สาระสำคัญของวิธีนี้คือคุณสามารถตั้งค่าแถบด้านข้างให้ลอยโดยมีความกว้าง 300 ได้ แต่เนื้อหาไม่ควรลอยและให้ขอบซ้าย: 300px ทางที่ดีและทุกอย่างดูเหมือนจะเป็นไปด้วยดี พูดตามตรง ฉันคิดว่านี่เป็นวิธีที่ดีที่สุด แต่วิธีนี้ก็มีข้อผิดพลาดอยู่ เหตุผลที่ละทิ้งวิธีนี้คือหากจู่ๆ ในเนื้อหาที่เรากำลังจัดวาง เช่น เมนูที่มี floated li หรือบล็อก float อื่นๆ แล้วเราต้องการล้างมันโดยใช้ clear:both จากนั้นไปที่ขอบล่างของบล็อกนี้ เลื่อนลงไปถึงระดับขอบล่างของแถบข้าง (ซึ่งก็ไม่แปลกเพราะเคลียร์โฟตออกแล้ว เลี่ยงได้ถ้าบล็อกลอยมีความสูงคงที่ แต่กรณีนี้กลับไม่เป็นเช่นนั้นกับการตั้งค่าคงที่ ความสูง).
3 ทาง.
คุณสามารถใช้ตำแหน่งสัมบูรณ์สำหรับแถบด้านข้างได้ แต่หากคุณแน่ใจอย่างแน่นอนว่าเนื้อหาจะมีความสูงมากกว่าแถบด้านข้าง ไม่เช่นนั้นเนื้อหาทั้งหมดของแถบด้านข้างจะไต่ขึ้นไปที่ส่วนท้าย (ท้ายที่สุดแล้ว การวางตำแหน่งแบบสัมบูรณ์จะนำเนื้อหาออกไป กระแสทั่วไป)
แต่สำหรับฉันนี่ไม่ใช่วิธีที่ดีนักเช่นกัน!
4 ทาง.
“วิธีที่ยอดเยี่ยมหากมีข้อบกพร่องประการใดโปรดแสดงความคิดเห็น แต่ฉันคิดว่านี่เป็นวิธีที่ดีที่สุด”
- ข้อดีของวิธีนี้: ประการแรก เนื้อหา DOMe จะอยู่ก่อนแถบด้านข้าง ซึ่งดีสำหรับเครื่องมือค้นหา
- ไม่มีอะไรพอดีกับส่วนท้าย
- สามารถล้างบล็อกใดก็ได้และไม่มีอะไรเลื่อนไปที่ขอบด้านล่าง (นี่คือวิธีที่เราเอาชนะปัญหาของวิธีที่สอง)
โดยทั่วไป วิธีการทำงาน: ดูที่โค้ด เนื้อหามาก่อน ตามด้วยแถบด้านข้าง ตั้งค่าโฟลตให้กับทั้งสองบล็อกนี้ (โดยธรรมชาติแล้วแถบด้านข้างจะเลื่อนลง) หลังจากนั้นเราตั้งค่าคุณสมบัติขอบซ้ายของแถบด้านข้าง: -100% เยี่ยมเลย มันกลับมาเข้าที่แล้ว และเราเยื้องเนื้อหาด้วย margin-lerft:300px
html css .แถบด้านข้าง(
ความกว้าง:300px;
จอแสดงผล: บล็อก;
ลอย: ซ้าย;
มาร์จิ้น: 0 0 0 -100%;
}
.เนื้อหา(
ความกว้างขั้นต่ำ:723px;
จอแสดงผล: บล็อก;
ลอย: ซ้าย;
ระยะขอบ: 0 0 0 220px;
}
ไซต์จำเป็นต้องมีบล็อกลอย (หรือเรียกอีกอย่างว่าการเคลื่อนย้าย คงที่ เหนียว) เพื่อให้ผู้ใช้เมื่อเลื่อนหน้าดูองค์ประกอบคงที่ซึ่งโฆษณามักถูกวาง (ทีเซอร์ แบนเนอร์ หรือบริบท) .
ขออภัย กฎของ Adsense ห้ามมิให้เราทำเช่นนี้ อย่างไรก็ตาม เจ้าของเว็บไซต์จำนวนมากเพิกเฉยต่อกฎเกณฑ์ด้วยความเสี่ยงของตนเอง บางทีพวกเขาอาจจะไม่ถูกลงโทษด้วยซ้ำ แต่ฉันไม่แนะนำให้เสี่ยง
ฉันวางทีเซอร์/แบนเนอร์ของฉันในบล็อก YAN ดังกล่าว และบางครั้งแทนที่จะแสดงโฆษณา ฉันจึงแสดงบล็อกเหล่านั้นที่นั่น โพสต์ที่คล้ายกันหรือข้อมูลบางอย่างที่เป็นประโยชน์ต่อผู้เยี่ยมชม
เรามาบอกคุณว่าคุณสามารถสร้างบล็อกลอยบนเว็บไซต์ของคุณได้อย่างไร
ภารกิจ: ทำให้บล็อกสุดท้ายในคอลัมน์ด้านข้าง (แถบด้านข้าง) ลอย ยิ่งไปกว่านั้น เพื่อให้มันติดเฉพาะช่วงเวลาที่ผู้ใช้เลื่อนเข้ามาถึงเท่านั้น ไม่ใช่ทันทีเมื่อเปิดหน้า นอกจากนี้ บล็อกควร “ติด” เมื่อไปถึงส่วนท้าย (กล่าวคือ ไม่ทับซ้อนกัน)
วิธีการทำงานมากที่สุดมีตัวเลือกมากมายสำหรับการใช้ Sticky Block แต่ไม่ใช่ทั้งหมดที่จะทำงานได้อย่างถูกต้อง ฉันจะบอกคุณจาก ประสบการณ์ส่วนตัว: วิธีการติดตั้งบล็อกแบบเดียวกันสามารถใช้ได้ในไซต์หนึ่ง แต่วงกบจะปรากฏที่อื่น
ด้านล่างนี้เป็นตัวอย่างของบล็อกลอยที่ทำงานบนไซต์เกือบทั้งหมดที่ฉันติดตั้งไว้ ไม่มีวงกบ เครื่องยนต์ก็ไม่สำคัญเช่นกัน (DLE, WordPress, LiveStreet ฯลฯ )
ในตำแหน่งที่ต้องการในคอลัมน์ด้านข้าง ให้วางโค้ด HTML ต่อไปนี้:
$(หน้าต่าง).เลื่อน(ฟังก์ชั่น() (
var sb_m = 20 ; /* เติมด้านบนและด้านล่าง */
var MB = 300 ; / * ความสูงของชั้นใต้ดินพร้อมระยะขอบ */
var st = $(หน้าต่าง).scrollTop() ;
var sb = $(".sticky-block" ) ;
var sbi = $(".sticky-block .inner" ) ;
var sb_ot = sb.offset() .top;
var sbi_ot = sbi.offset() .top;
var sb_h = sb.height();
ถ้า(sb_h + $(เอกสาร).scrollTop() + sb_m + mb< $(document)
.height
()
)
{
ถ้า(st > sb_ot) (
var h = Math.round(st - sb_ot) + sb_m;
sb.css(( "paddingTop" : h) ) ;
}
อื่น(
sb.css(( "paddingTop" : 0 ) ) ;
}
}
}
)
;
ในโค้ดนี้ คุณสามารถตั้งค่าช่องว่างภายในที่ด้านบน ด้านล่าง รวมถึงความสูงของส่วนท้ายของคุณได้ เช่น ความสูงที่บล็อกต้องหยุด
ตอนนี้เรามาเชื่อมต่อ JS กัน หากต้องการทำสิ่งนี้ ให้เขียนในส่วน HEAD:
วิธีที่ง่ายที่สุด (สำหรับ WordPress)เป็นวิธีที่ไม่ปลอดภัยเช่นกัน แต่โดยการติดตั้งปลั๊กอิน มันทำงานได้โดยไม่มีวงกบ
ข้อดี:
- ไม่จำเป็นต้องเข้าใจ/เข้าใจ HTML
- ความเรียบง่ายและความเร็วในการติดตั้ง
ข้อบกพร่อง:
วิธีใช้:
ดูเหมือนว่าฉันจะสะดวกน้อยลงและไม่ชัดเจนเท่าสองวิธีข้างต้น แต่ฉันจะบอกคุณเกี่ยวกับพวกเขาต่อไป
ตัวเลือก #1 (ไม่มี jQuery)แทรกลงในแถบด้านข้าง:
เราเขียนสไตล์เป็น HTML (ควรเพิ่มโดยตรงใน CSS):
.เหนียว(
ตำแหน่ง: คงที่;
ดัชนี z: 101 ;
}
.หยุด(
ตำแหน่ง: ญาติ;
ดัชนี z: 101 ;
}
ตอนนี้เราเพิ่มสคริปต์ลงในเพจแล้ว (ควรใส่ไว้จะดีกว่า) แยกไฟล์เช่นเดียวกับใน "วิธีการทำงานที่ดีที่สุด"):
(การทำงาน() (
var a = document.querySelector("#aside1" ) , b = null, P = 0 ; // หากแทนที่ศูนย์ด้วยตัวเลข บล็อกจะติดก่อนที่ขอบด้านบนของหน้าต่างเบราว์เซอร์จะถึงขอบด้านบนขององค์ประกอบ อาจเป็นจำนวนลบก็ได้
window.addEventListener("scroll" , Ascroll, false); ;
document.body.addEventListener("เลื่อน" , Ascroll, false);
ฟังก์ชั่น Ascroll() (
ถ้า (b == โมฆะ) (
var Sa = getComputedStyle(a, "" ) , s = "" ;
สำหรับ (var i = 0 ; i< Sa.length; i++)
{
ถ้า (Sa[ i].indexOf("box-sizing" ) == 0 || Sa[ i].indexOf("overflow" ) == 0 || Sa[ i].indexOf("width" ) == 0 ||. Sa[ i].indexOf("padding" ) == 0 ||. Sa[ i].indexOf("border" ) == 0 ||. Sa[ i].indexOf("โครงร่าง" ) == 0 || Sa[ i].indexOf("box-shadow" ) == 0 ||. Sa[ i].indexOf("พื้นหลัง" ) == 0 ) (
s += Sa[ i] + ": " +Sa.getPropertyValue(Sa[ i] ) + "; "
}
}
ก.innerHTML = "" +a.innerHTML+"" ;
b = ก.เด็ก[ 0 ] ;
ก.สไตล์ .height = b.getBoundingClientRect() .height + "px" ;
ก.สไตล์ .padding = "0" ;
ก.สไตล์ .border = "0" ;
}
var Ra = a.getBoundingClientRect() ,
R = Math.round(Ra.top + b.getBoundingClientRect() .height - document.querySelector("footer" ) .getBoundingClientRect() .top + 0 ) ; // ตัวเลือกบล็อกเมื่อถึงขอบด้านบนซึ่งคุณจะต้องเลิกปักหมุดองค์ประกอบเหนียว Math.round() ใช้สำหรับ IE เท่านั้น หากแทนที่ศูนย์ด้วยตัวเลข บล็อกจะติดก่อนที่ขอบด้านล่างขององค์ประกอบจะถึงส่วนท้าย
if ((Ra.top - P) วิธีสร้างบล็อก (div, กัน, ฯลฯ ), ส่วนหัว, โฆษณา, เมนูคงที่ เฉพาะ CSS #aside1 ( /* บล็อกที่จะยังคงอยู่ */ตำแหน่ง: คงที่;
ดัชนี z: 101; - ที่จริงแล้วสำหรับกรณีส่วนใหญ่: ปุ่มลอยเครือข่ายทางสังคม
, ตัวนับไม่ต้องใช้สคริปต์วิธีสร้าง div stick ขณะเลื่อนหน้า เป็นสคริปท์แล้ว
นั่นคือองค์ประกอบที่มีลิงก์ (หรืออะไรก็ตาม) อยู่ห่างจากจุดเริ่มต้นของหน้า สมมติว่าส่วนหัวหรือคอลัมน์ด้านข้างขนาดใหญ่มีสิ่งที่เป็นประโยชน์มากมาย เช่น การค้นหา หมวดหมู่ ฯลฯ ขณะเลื่อน ด้านบนของหน้าต่างเบราว์เซอร์แตะขอบด้านบนขององค์ประกอบ องค์ประกอบนั้นจะติดและ "เคลื่อนที่" ลงไปที่ส่วนท้ายของหน้า .sticky ( ตำแหน่ง: คงที่; ด้านบน: 0 px;/* ถ้าศูนย์ถูกแทนที่ด้วยตัวเลข (และในสคริปต์ด้วย) บล็อกจะติดก่อนที่ขอบด้านบนของหน้าต่างเบราว์เซอร์จะถึงขอบด้านบนขององค์ประกอบ อาจเป็นจำนวนลบก็ได้ ลองใช้ตัวอย่าง */ ดัชนี z: 101; ) (การทำงาน())(// ฟังก์ชั่นที่ไม่ระบุชื่อ (function())( ))() เพื่อให้ตัวแปร "a" และ "b" ไม่กลายเป็นส่วนกลาง var a = document.querySelector("#aside1 "), b = null; // บล็อกตัวเลือกที่จะปักหมุด// ถ้า ฟังก์ชั่น Askroll() ( ถ้า (b == null) (// เพิ่ม wrapper child เพื่อลบการพึ่งพาเพื่อนบ้าน< Sa.length; i++) { // var Sa = getComputedStyle(a, ""), s = ""; สำหรับ (var i = 0; i if (Sa[i].indexOf("overflow") == 0 || Sa[i].indexOf("padding") == 0 || Sa[i].indexOf("เส้นขอบ") == 0 || Sa[i].indexOf("โครงร่าง") == 0 ||. Sa[i].indexOf("box-shadow") == 0 ||. Sa[i].indexOf("พื้นหลัง") == 0) ( s += Sa[i] + ": " +Sa.getPropertyValue(Sa[i]) + "; " ) ) b = document.createElement("div"); // สร้างลูก b.style.cssText = s + " box-sizing: border-box; width: " + a.offsetWidth + "px;";< l; i++) { ก.insertBefore(b, a.firstChild);// วางเด็กไว้ในบล็อกยึดก่อน // หากมีบล็อกอื่นอยู่ใต้องค์ประกอบเลื่อน คุณสามารถมีค่าของคุณเองได้ก.style.padding = "0"; ก.style.border = "0";// ถ้าองค์ประกอบถูกกำหนดหรือ ) if (a.getBoundingClientRect().top #aside1 > div:nth-child(3), #aside2 > div:nth-child(2) ")).forEach(function(a) (// ตัวเลือกของบล็อกที่จะกระทำ อาจมีหนึ่งบล็อกหรือสองบล็อกขึ้นไป< 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 ); var b = โมฆะ, P = 0 ; window.addEventListener("scroll", Ascroll, false); document.body.addEventListener("เลื่อน", Ascroll, เท็จ);ฟังก์ชั่น Ascroll() ( ถ้า (b == null) ( var Sa = getComputedStyle(a, ""), s = ""; for (var i = 0; i< K) { // ระยะห่างระหว่างบล็อกเพื่อไม่ให้องค์ประกอบลอยตัวถูกกดใกล้กัน) else ( R = Math.round(Rh - A0.getBoundingClientRect().bottom + parseFloat(getComputedStyle(A0, "").paddingBottom.slice(0, -2))); ) ถ้า ((Ra.top - P ) W) ( ถ้า (Ra.top //เลื่อนลงถ้า (R2 + N > R1) ( //อย่าถึงจุดต่ำสุดถ้า (Rb.bottom - W + N = 0) (