# Multi-Product Page

Show multiple products on a single page using declarative attributes or programmatic injection.

## Option A: Declarative (Data Attributes)

```html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <title>Multi-Product Page</title>

  <script
    defer
    data-liquid-commerce-elements
    data-token="YOUR_API_KEY"
    data-env="production"
    data-container-1="product-1"
    data-product-1="00619947000020"
    data-container-2="product-2"
    data-product-2="08504405135"
    data-container-3="product-3"
    data-product-3="08068660001"
    type="text/javascript"
    src="https://elements.reservebar-worker.workers.dev/all/elements.js"
  ></script>

  <style>
    body { font-family: Arial, sans-serif; margin: 0; padding: 24px; background: #f7f7f7; }
    .grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 20px; }
    .card { background: #fff; border-radius: 10px; padding: 16px; min-height: 520px; }
  </style>
</head>
<body>
  <h1>Featured Products</h1>
  <div class="grid">
    <div id="product-1" class="card"></div>
    <div id="product-2" class="card"></div>
    <div id="product-3" class="card"></div>
  </div>
</body>
</html>
```

## Option B: JSON Configuration

```html
<script
  defer
  data-liquid-commerce-elements
  data-token="YOUR_API_KEY"
  data-env="production"
  type="text/javascript"
  src="https://elements.reservebar-worker.workers.dev/all/elements.js"
></script>

<script data-liquid-commerce-elements-products type="application/json">
[
  { "containerId": "product-1", "identifier": "00619947000020" },
  { "containerId": "product-2", "identifier": "08504405135" },
  { "containerId": "product-3", "identifier": "08068660001" }
]
</script>
```

## Option C: Programmatic Injection (NPM)

```javascript
import { Elements } from '@liquidcommerce/elements-sdk';

const client = await Elements('YOUR_API_KEY', { env: 'production' });

await client.injectProductElement([
  { containerId: 'product-1', identifier: '00619947000020' },
  { containerId: 'product-2', identifier: '08504405135' },
  { containerId: 'product-3', identifier: '08068660001' }
]);
```

## Tips

- Give each container a `min-height` to reduce layout shift while data loads.
- Add a cart button once per page (see [Cart Component](../guides/cart-component.md)).

## Related Docs

- [Product Component](../guides/product-component.md)
- [Quick Start](../getting-started/quick-start.md)
