background-position-y ไม่ทำงานใน Firefox (ผ่าน CSS)?


84

ในรหัสของฉันbackground-position-yไม่ทำงาน ใน Chrome ใช้ได้ แต่ใช้ไม่ได้กับ Firefox

ใครมีวิธีแก้ไข


ข่าวดีทุกคน! ดูเหมือนว่าbackground-position-xและ-yจะได้รับการสนับสนุนใน Firefox 49: developer.mozilla.org/en-US/docs/Web/CSS/…
Sphinxxx

คำตอบ:


120

หากตำแหน่ง -x ของคุณเป็น 0 ไม่มีวิธีอื่นใดนอกจากการเขียน:

background-position: 0 100px;

background-position-x เป็นการใช้งานที่ไม่ได้มาตรฐานที่มาจาก IE Chrome ได้คัดลอก แต่น่าเสียดายที่ไม่ใช่ Firefox ...

อย่างไรก็ตามวิธีนี้อาจไม่สมบูรณ์แบบหากคุณมีสไปรต์แยกกันบนพื้นหลังขนาดใหญ่โดยแถวและคอลัมน์มีความหมายต่างกัน ... (ตัวอย่างเช่นโลโก้ที่แตกต่างกันในแต่ละแถวเลือก / วางเมาส์ด้านขวาและด้านซ้าย) ในกรณีนั้น ฉันขอแนะนำให้แยกภาพใหญ่เป็นภาพแยกกันหรือเขียนชุดค่าผสมต่างๆใน CSS ... ขึ้นอยู่กับจำนวนของสไปรต์หนึ่งหรืออื่น ๆ อาจเป็นตัวเลือกที่ดีที่สุด


ขอบคุณมากจับ ฉันเพิ่งไปและลบการใช้ -x และ -y เพื่อให้ฉันเป็นไปตามมาตรฐาน :)
Kenny Wyland

เช่นเคยกับ FF ... wierd
Mladen Janjetovic

19

ใช้สิ่งนี้

background: url("path-to-url.png") 89px 78px no-repeat;

แทนที่จะเป็นแบบนี้

background-image: url("path");
background-position-x: 89px;
background-position-y: 78px;
background-repeat: no-repeat;

3
ตลกดีที่ firefox ไม่รองรับมาร์กอัป "แทน" แต่ใช่มันใช้งานได้ .. ty;)
Adrian

16

Firefox 49 จะได้รับการปล่อยตัวเมื่อใช้การสนับสนุนสำหรับbackground-position-[xy]-in กันยายน 2016 สำหรับรุ่นเก่าถึง 31 คุณสามารถใช้ตัวแปร CSSเพื่อให้บรรลุการวางตำแหน่งของพื้นหลังบนแกนเดียวคล้ายกับการใช้หรือbackground-position-x background-position-yตัวแปร CSS ถึงสถานะคำแนะนำผู้สมัครในธันวาคม 2015

ต่อไปนี้เป็นตัวอย่างข้ามเบราว์เซอร์ทั้งหมดของการปรับเปลี่ยนแกนตำแหน่งพื้นหลังสำหรับภาพสไปรท์เมื่อวางเมาส์เหนือ:

:root {
    --bgX: 0px;
    --bgY: 0px;
}

a {
    background-position: 0px 0px;
    background-position: var(--bgX) var(--bgY);
}

a:hover, a:focus { background-position-x: -54px; --bgX: -54px; }
a:active   { background-position-x: -108px; --bgX: -108px; }
a.facebook { background-position-y: -20px; --bgY: -20px;  }
a.gplus    { background-position-y: -40px; --bgY: -40px;  }

เป็นเวลาเกือบหนึ่งปีแล้วโดย Firefox ยังคงเป็นเพียงการนำไปใช้งานเท่านั้น ไม่ใช่สัญญาณที่ดี
BoltClock

1
@BoltClock: อยู่ระหว่างการพิจารณาของ Microsoft โดยมีคะแนนโหวตอยู่เบื้องหลังเล็กน้อยและการพัฒนาเพิ่งเริ่มต้นสำหรับ Chrome อย่างไรก็ตามสำหรับกรณีการใช้งานนี้ตัวแปร CSS สามารถใช้งานได้ในปัจจุบันเนื่องจากเบราว์เซอร์เดียวที่ใช้งานเป็นเบราว์เซอร์เดียวที่ต้องการใช้ในการจำลองตำแหน่งพื้นหลัง x / y
Andy E

เย็น! ดีกว่าไม่มาสาย :)
BoltClock

2
เพิ่งสังเกตเห็น - ตัวแปร CSS เป็นในทางที่จะ CR ยังเย็น.
BoltClock

สวัสดีปี 2559! ยังไม่มีการใช้งาน ... : \
ghettosoak

15

background-position-y :10px;จะไม่ทำงานในเว็บเบราว์เซอร์ Firefox

คุณควรทำตามไวยากรณ์ประเภทนี้:

background-position: 10px 15px;

10px ถูกล้อมรอบกับ "position-x" และ 15px ล้อมรอบ "position-y"

โซลูชันการทำงาน 100%

ติดตามURLนี้เพื่อดูตัวอย่างเพิ่มเติม


สิ่งนี้ใช้ได้ใน ff v.38 ควรทำเครื่องหมายว่าเป็นโซลูชันที่ถูกต้อง มันบรรลุสิ่งที่คำถามหลังจากนั้น
mcabe

3

ทำไมคุณไม่ใช้ตำแหน่งพื้นหลังโดยตรง

ใช้:

background-position : 40% 56%;

แทน:

background-position-x : 40%;
background-position-y : 56%

3
background: url("path") 89px 78px no-repeat;

จะไม่ทำงานหากคุณต้องการพื้นหลังพร้อมกับรูปภาพ ดังนั้นใช้:

background: orange url("path-to-image.png") 89px 78px no-repeat;

1

สิ่งนี้ใช้ได้ผลสำหรับฉัน:

a {
    background-image: url(/image.jpg);
    width: 228px;
    height: 78px;
    display: inline-block;
}

a:hover {
    background-position: 0 -78px;
    background-repeat: no-repeat;
}

0

ตรวจสอบให้แน่ใจว่าคุณระบุการวัดออฟเซ็ตของคุณอย่างชัดเจน วันนี้ฉันเจอปัญหานี้แน่นอนและเป็นเพราะเบราว์เซอร์ตีความค่าที่คุณระบุใน CSS ของคุณอย่างไร

ตัวอย่างเช่นสิ่งนี้ทำงานได้อย่างสมบูรณ์ใน Chrome:

background: url("my-image.png") 100 100 no-repeat;

แต่สำหรับ Firefox และ IE คุณต้องเขียน:

background: url("my-image.png") 100px 100px no-repeat;

หวังว่านี่จะช่วยได้


0

อย่างไรก็ตามวิธีนี้อาจไม่สมบูรณ์แบบหากคุณมีสไปรต์แยกกันบนพื้นหลังขนาดใหญ่โดยแถวและคอลัมน์มีความหมายต่างกัน ... (ตัวอย่างเช่นโลโก้ที่แตกต่างกันในแต่ละแถวเลือก / วางเมาส์ด้านขวาและด้านซ้าย) ในกรณีนั้น ฉันขอแนะนำให้แยกภาพใหญ่เป็นภาพแยกกันหรือเขียนชุดค่าผสมต่างๆใน CSS ... ขึ้นอยู่กับจำนวนของสไปรต์หนึ่งหรืออื่น ๆ อาจเป็นตัวเลือกที่ดีที่สุด

เหมืองมีปัญหาแน่นอนตามที่Orabîgระบุไว้ซึ่งมีตารางเหมือนสไปรท์ซึ่งมีคอลัมน์และแถว

ด้านล่างนี้คือสิ่งที่ฉันใช้เป็นวิธีแก้ปัญหาโดยใช้ js

firefoxFixBackgroundposition:function(){
  $('.circle').on({
    mouseenter: function(){
       $(this).css('background-position',$(this).css('background-position').split(' ')[0]+' -10px');   
    },
    mouseleave: function(){
       $(this).css('background-position',$(this).css('background-position').split(' ')[0]+' 0');   
    }
  });      
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.