如何使用 MJML(列嵌套在列中)构建复杂的电子邮件布局?

Posted

技术标签:

【中文标题】如何使用 MJML(列嵌套在列中)构建复杂的电子邮件布局?【英文标题】:How to build a complex email layout with MJML(columns nested in columns)? 【发布时间】:2022-01-05 21:07:37 【问题描述】:

我正在努力实现这种电子邮件外观。我曾尝试在 mj-text 语法中使用纯 html,但 html 的行为与普通 html 不同。我决定使用mj-table,但造型并不容易,我被卡住了。任何帮助,将不胜感激。提前致谢

这是我想要的结果:

这是我目前得到的:

我的代码:

<mj-head>
        <mj-attributes>
            <mj-text padding="0" font-family="system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Helvetica, Arial, sans-serif;" color="#1d1d1f"/>
            <mj-section padding="0"/>
            <mj-wrapper padding="0" background-color="#fff" border-right="1px solid right"/>
            <mj-button padding="0"/>
            <mj-column padding="0"/>
            <mj-image padding="0"/>
            <mj-table padding="0"/>
            <mj-class name="head-text" font-size="36px" font-weight="600"/>
            <mj-class name="product" border-radius="15px"/>
        </mj-attributes>     
</mj-head>



<mj-body>
    <mj-wrapper>
         <mj-section>
              <mj-column  background-color="#f3f7fd">
                    <mj-image src="https://image.s10.sfmc-content.com/lib/fe3411717064057d731372/m/1/8c5599db-0f74-40e1-8704-5bf6465deb88.png"  />
                     <mj-text>
                               <p style="margin:8px">New</p>
                               <p style="margin:8px">iPhone 13</p>
                               <p style="margin:8px 8px 25px">From $799 or $33.29/mo. for 24 mo. <sup>1</sup></p>
                      </mj-text>
              </mj-column>
              <mj-column  >
                    <mj-table  border="1px solid red">
                               <tr style="padding-left: 20px">
                                    <td style=" width: 30%; border: 1px solid blue">
                                        <p style="margin:0;">New</p>
                                        <p style="margin:0;">iPhone 13</p>
                                        <p style="margin:0;">Silicone Case</p>
                                        <p style="margin:0;">$49</p>
                                    </td>
                                    <td style="border: 1px solid red">
                                        <img style="width: 100px" 
                                         src="https://image.s10.sfmc- content.com/lib/fe3411717064057d731372/m/1/d8c123db-38c2-4e79-b169-e243b320c6a8.png" />
                                    </td>
                               </tr>
                               <tr style="border: 1px solid green" >
                                    <td style="border: 1px solid purple">
                                        <img style="width: 200px;" src="https://image.s10.sfmc-content.com/lib/fe3411717064057d731372/m/1/62b98203-08b0-4974-b1c8-931b2e710b16.png" />
                                    </td>    
                               </tr>
                   </mj-table>
             </mj-column>
        </mj-section>
    </mj-wrapper>

【问题讨论】:

如果您需要在右侧使用表格,我建议仅将其用于第一行并将最终图像放在表格之外,以便它可以轻松跨越整个列宽。跨度> 【参考方案1】:

我还没有看过你想要对布局做的所有事情,但这里是让你的元素相互之间保持正确关系的基本想法。

主要的变化是将最终图像从表格中取出并直接放在下方,以便它可以轻松跨越整个列宽。

此代码还将红色电话图像作为背景放入表格中,只是因为这样做看起来更自然,但当然如果 img 适合您,则替换它。

<mjml>
  <mj-body>
    <mj-wrapper>
         <mj-section>
              <mj-column  background-color="#f3f7fd">
                    <mj-image src="https://image.s10.sfmc-content.com/lib/fe3411717064057d731372/m/1/8c5599db-0f74-40e1-8704-5bf6465deb88.png"  />
                     <mj-text>
                               <p style="margin:8px">New</p>
                               <p style="margin:8px">iPhone 13</p>
                               <p style="margin:8px 8px 25px">From $799 or $33.29/mo. for 24 mo. <sup>1</sup></p>
                      </mj-text>
              </mj-column>
              <mj-column  >
                    <mj-table  border="1px solid red">
                               <tr style="padding-left: 20px">
                                    <td style=" width: 60%; border: 1px solid blue; padding: 10px;">
                                        <p style="margin:0;">New</p>
                                        <p style="margin:0;">iPhone 13</p>
                                        <p style="margin:0;">Silicone Case</p>
                                        <p style="margin:0;">$49</p>
                                    </td>
                                    <td style="border: 1px solid red; background-image: url(https://image.s10.sfmc-content.com/lib/fe3411717064057d731372/m/1/d8c123db-38c2-4e79-b169-e243b320c6a8.png); background-size: contain; background-repeat: no-repeat; background-position: center;">
                                       
                                    </td>
                               </tr>
                   </mj-table>
                    <mj-image src="https://image.s10.sfmc-content.com/lib/fe3411717064057d731372/m/1/62b98203-08b0-4974-b1c8-931b2e710b16.png" />
             </mj-column>
        </mj-section>
    </mj-wrapper>
  </mj-body>
</mjml>

【讨论】:

谢谢,这是个好主意。我得到了全宽的最终图像。但是,最终图像的高度大于其兄弟组件(即其上方的表格)。它们的高度应该相等,我不能使用像 css 这样的任何高度属性。你有什么建议吗?

以上是关于如何使用 MJML(列嵌套在列中)构建复杂的电子邮件布局?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用flexbox进行两列布局,并在列中的项目之间使用相同的间距? [重复]

PySpark:如何在列中使用 Or 进行分组

Libre Office 电子表格 - 如何在列中的多个重复值中仅保留一个值?

使用 Pandas 读取 CSV 时如何在列中保持前导零?

Python:如果字符串出现在列中,则删除行

如何在列中划分句点