วิธีป้องกันไม่ให้รูปภาพในเทมเพลต HTML ภายใน Outlook ขยายด้วย React โดยไม่จำเป็น

ฉันกำลังสร้างเครื่องมือสร้างอีเมลโดยใช้ React ฉันกำลังแสดงตาราง (เนื่องจากนั่นคือสิ่งที่ต้องมีในอีเมล)

ในเบราว์เซอร์อีเมลส่วนใหญ่ อีเมลจะดูดี ยกเว้นใน Outlook ซึ่งจะขยายรูปภาพและทำให้เลย์เอาต์เสียหาย

นี่คือองค์ประกอบเฉพาะที่เรนเดอร์รูปภาพ:

const Ad = ({ image, link, hasDivider, styles = localStyles }) => (
  <>
    <Grid.Row className={styles.container}>
      <a href={link}>
        <span
          dangerouslySetInnerHTML={{
            __html: `
            <!--[if mso]>
            <table width="100%">
              <tr>
                <td>
                  <img width="100%" src=${image}
                  alt="ad" style="text-align: right; width: 100%; border: 0;
                  text-decoration:none;
                  vertical-align: baseline;">
                </td>
              </tr>
            </table>
            <div style="display:none">
            <![endif]-->`
          }}
        />
        <Img className={styles.image} src={image} alt="ad" />
        <span
          dangerouslySetInnerHTML={{
            __html: `
            <!--[if mso]>
            </div>
            <![endif]-->
            `
          }}
        />
      </a>
    </Grid.Row>
    {hasDivider && (
      <Grid.Row>
        <Divider />
      </Grid.Row>
    )}
  </>
)

Img ส่วนประกอบ:

const Img = ({ src, alt, className, styles = localStyles, style = {} }) => {
  return (
    <img
      src={src}
      alt={alt}
      style={style}
      className={cx(styles.img, className)}
    />
  )
}

ฉันใช้เงื่อนไขอีเมลสำหรับสิ่งนี้ ซึ่งใช้งานได้กับ Outlook เวอร์ชันที่ทันสมัยกว่า


person dawn    schedule 01.12.2020    source แหล่งที่มา
comment
เราจำเป็นต้องดูว่าองค์ประกอบ Img ของคุณเป็นอย่างไร ลองแทรกใน img css max-width: 100%;   -  person Maxwell s.c    schedule 01.12.2020
comment
@ Maxwells.c สวัสดี ฉันเพิ่งเพิ่มมันเข้าไป แม้ว่าเงื่อนไขจะใช้งานได้ใน Outlook ก็ตาม ดังนั้นจึงแสดงแท็ก img HTML แบบธรรมดา   -  person dawn    schedule 01.12.2020


คำตอบ (1)


ใน Outlook บน Windows (ตั้งแต่ปี 2007 ถึง 2019 โดยใช้เครื่องมือเรนเดอร์ของ Word) เปอร์เซ็นต์ความกว้างขององค์ประกอบ <img> จะขึ้นอยู่กับความกว้างทางกายภาพของไฟล์รูปภาพ ไม่ใช่ความกว้างขององค์ประกอบหลักตามที่ควรจะคาดหวังใน CSS ดังนั้น หากรูปภาพของคุณกว้าง 100px width="100%" จะเท่ากับ 100px และหากรูปภาพของคุณกว้าง 2000px ก็จะเท่ากับ 2000px วิธีแก้ปัญหาที่เหมาะสมสำหรับ Outlook คือการใช้ความกว้างคงที่เป็นพิกเซลผ่านแอตทริบิวต์ HTML width และใช้สไตล์ width:100%; สำหรับไคลเอนต์อื่นๆ ในรูปแบบอินไลน์ (ซึ่ง Outlook จะเพิกเฉย)

คุณจะต้องอัปเดตองค์ประกอบ Img ของคุณเพื่อรวมความกว้างของรูปภาพและเรนเดอร์ด้วยสิ่งนี้:

<img width="${width}" src=${image}
                  alt="ad" style="text-align: right; width: 100%; border: 0;
                  text-decoration:none;
                  vertical-align: baseline;">
person HTeuMeuLeu    schedule 01.12.2020
comment
ไม่ได้ทำงาน เป็นไปไม่ได้ที่จะทำงานกับ Outlook - person dawn; 03.12.2020
comment
คุณสามารถแชร์โค้ด HTML เอาต์พุตทั้งหมดที่คุณส่งไปยัง Outlook ได้หรือไม่ คุณสามารถระบุเวอร์ชันของ Outlook ได้อย่างแน่ชัดหรือไม่ - person HTeuMeuLeu; 04.12.2020