The component bitrix:catalog.section on mobile extends beyond the right edge of the screen, the filter bitrix:catalog.smart.filter takes three screens before products, and the popup window BX.PopupWindow on a tablet positions outside the viewport. We encounter this daily in client projects and know how to fix each problem. In 60% of requests for Bitrix site adaptation, the issue lies precisely in component templates that do not account for mobile resolutions. After our improvements, mobile conversion increases on average by 15–20%, and the bounce rate drops by 25%.
Responsive testing is not "opened on a phone and looked at." It is a systematic check of all critical pages on real resolutions with defect detection and elimination. We have been working with Bitrix for over 5 years and have completed more than 100 projects. Below is exactly how we do it.
How We Test Responsiveness
We use a combination of emulators and real devices. First pass — Chrome DevTools Device Mode: check all breakpoints, detect horizontal scroll via document.documentElement.scrollWidth > window.innerWidth. Second pass — BrowserStack (real iPhones, iPads, Androids). DevTools does not show touch event bugs on iOS, for example, position: fixed with an open keyboard or 100vh accounting for the address bar. According to Google's Web Vitals documentation, such errors reduce user experience by 30%.
| Tool |
Purpose |
Limitations |
| Chrome DevTools |
Quick check of all breakpoints |
Does not emulate touch events and Safari |
| BrowserStack |
Real devices (iOS, Android) |
Paid subscription |
| Lighthouse Mobile Audit |
Tap targets, font size, CLS |
Desktop emulation only |
| Resolution |
Typical Issue |
Frequency |
| 320px (iPhone SE) |
Table overflow, small tap targets |
70% |
| 768px (iPad) |
Popup outside viewport |
40% |
| 1024px (desktop) |
Horizontal scroll from fixed width |
30% |
Why Standard Bitrix Templates Are Poorly Adapted
Most ready-made solutions were designed for desktop, and mobile responsiveness was added on top — often breaking the grid. Components like bitrix:sale.basket.basket and bitrix:catalog.smart.filter generate too much data for mobile. Our task is to rework these templates mobile-first. For example, we replace the cart table with cards using media queries and hide the filter in an off-canvas.
In one e-commerce project with a catalog of 50,000 products, the mobile version lost 30% of traffic because the bitrix:catalog.smart.filter did not fit on screen. We reworked the filter template into an off-canvas panel with asynchronous result loading. After the update, page load time on mobile decreased by 40%, and conversion increased by 18%. This case clearly shows why standard templates need responsive design rework. We guarantee no horizontal scroll after our fixes.
Work Process
- Audit: go through all pages, record defects, create a breakpoint matrix. Measure CLS and tap targets via Lighthouse.
- Fixing: correct CSS, rework component templates (add media queries, change tables to cards).
- Re-testing: verify on real devices, ensure CLS < 0.1 and tap target ≥ 48px.
- Delivery: provide a testing report and final check according to checklist.
Common mistakes we find
- Missing viewport meta or incorrect
user-scalable=no (violates accessibility).
- Images without
max-width: 100% — overflow their container.
- Tables with fixed column widths — horizontal scroll at 320px.
- Hamburger menu without touchstart handling on iOS.
What Is Included in Our Work
- Documentation: detailed report with screenshots, explanations, and a breakpoint matrix.
- Access: we provide access to our testing environment (BrowserStack sessions) for verification.
- Training: optional 1-hour session for your team on maintaining responsiveness.
- Support: 30 days post-delivery support for any questions.
- Image optimization for mobile: implementing
srcset or webp.
- Consultation on further responsiveness maintenance.
How to Check If Your Bitrix Site Is Ready for Mobile Traffic
The main indicators are absence of horizontal scroll on all breakpoints and CLS < 0.1. Additionally, check tap targets: they must be at least 48×48 pixels. Also ensure forms work correctly with mobile keyboards: the input field should not be covered by the iOS toolbar. If at least one condition is not met, a responsive audit is needed.
Timeline and Cost
Estimated timeline — from 2 to 5 days, depending on template complexity. Our responsive audit starts at $500 for small sites; for complex projects the cost ranges from $1,000 to $3,000. We perform the work turnkey — from testing to fixing all bugs. Get your project evaluated for free — just contact us. Get a consultation on responsiveness — easily: contact us.
Acceptance Checklist
After fixes we verify:
- No horizontal scroll on all breakpoints.
- All buttons and links are tappable (tap target ≥ 48px).
- Forms work correctly with mobile keyboard.
- Layout Shift (CLS < 0.1).
- Input font size at least 16px (prevents zoom on iOS).
- Popups and modal windows (
BX.PopupWindow) are correctly positioned.
BrowserStack is better than Chrome DevTools: real devices catch bugs with touch events and positioning that emulators miss. Entrust testing to professionals with extensive experience in 1C-Bitrix (over 5 years, 100+ projects). Order a responsive audit — and we will make your site convenient on any device.
Why does website layout for 1C-Bitrix require professionalism?
Open template.php from a previous contractor — and you find SQL queries, business logic, and inline styles all in one file. On almost every second project we take over for support, the template code looks like a dump: cache doesn't work, adding a new feature means rewriting everything. Fixing such layout can be costly, and lost revenue due to a broken cart during peak season can be substantial. Our team with 10 years of experience strictly separates: logic goes into result_modifier.php or component_epilog.php, presentation into template.php. No CIBlockElement::GetList in templates. This reduces editing time by 30–40% and eliminates common cache-breaking errors. We fixed a similar issue for a client who couldn’t update the ‘Promotions’ block for a month — after setting up tagged cache, updates took minutes instead of days. Want the same results? Get a free audit of your current layout.
How to properly organize component templates?
A custom template is not a single file but a structure of five to six files:
-
template.php — only HTML and output of $arResult
-
result_modifier.php — data preparation, additional queries
-
component_epilog.php — code after caching (counters, dynamic content)
-
style.css and script.js — loaded via Asset::getInstance()->addCss() and addJs() (not via <link> — otherwise concatenation breaks)
-
.parameters.php — visual editor parameters
Example structure for a catalog:
local/templates/your_template/components/bitrix/catalog.section/.default/
├── template.php
├── result_modifier.php
├── component_epilog.php
├── style.css
├── script.js
└── .parameters.php
Typical templates we develop turnkey:
| Component |
What we do |
catalog.section and catalog.element |
View switching (grid/list/table), lazy load for images, srcset for retina |
sale.basket.basket |
AJAX update without reload, mini-cart via sale.basket.basket.line |
menu |
Mega menu with caching by sections, lazy loading of submenus |
search.title |
Autosuggest with 300ms debounce, product previews in dropdown |
breadcrumb |
Microdata BreadcrumbList according to Schema.org |
Caching: why does it break and how do we fix it?
Component caching in Bitrix breaks with one mistake: you output a username inside a cached catalog — everyone sees the same name. Solution — use component_epilog.php for dynamic inserts.
Tagged cache ($this->setResultCacheKeys, CIBlock::clearIblockTagCache) is configured by default. Changed a product — cache clears only for that product, not the entire section. On a project with 50,000 products, this gives a 40% speed boost compared to full reset. Official Bitrix documentation recommends using component_epilog.php for dynamic inserts. Real case. A client complained that everyone saw the same cart on the catalog page. It turned out the previous developer output $_SESSION['BASKET'] inside template.php of the catalog.section component. The component was cached for an hour — the cart was frozen. We moved the output to component_epilog.php and configured tagged cache on sale.basket.basket.line. The page didn’t lose speed, the cart became up-to-date. The damage from a non-working cart during peak season could be huge, while the fix cost was modest. Tagged cache reduces page rebuild time by 50× compared to full reset.
CSS approaches: BEM, Tailwind, or hybrid?
For large projects (30+ templates) we use BEM — .product-card__price, .product-card--featured. Styles are isolated, no conflicts. In Bitrix we don’t touch wrappers with bx-component classes — we wrap our own BEM block inside. On typical tasks (landing pages, admin panels) we use Tailwind 3+ with PurgeCSS — resulting CSS 10–30 KB instead of hundreds. Design tokens in tailwind.config.js lock colors, fonts, spacing in one place. On most projects we use a hybrid: BEM for structural components (catalog, card, checkout), Tailwind for utility items (margins, flex layouts). We agree on the boundary with the team in advance.
How do we achieve Core Web Vitals?
Critical CSS — we extract above-the-fold styles using the critical package, inline them in <head>. The rest loads asynchronously via media="print" onload="this.media='all'". LCP on mobile decreases by 1–1.5 seconds.
Images — the main bottleneck. We use <picture> with WebP and JPEG fallback. loading="lazy" for everything below the fold. width and height explicitly set — CLS = 0. A handler in urlrewrite.php generates WebP on the fly.
Minification and compression. CSS and JS via Vite or Bitrix built-in concatenation. Brotli on nginx (brotli_comp_level 6) — 15–20% more efficient than gzip. Static caching: expires 1y + versioning via query string.
For a catalog of 10,000 products, LCP went from 4.2 s to 2.1 s. Conversions improved by 12% after the speed fix. Want similar results? Order a free audit — we’ll evaluate your current layout and propose specific steps.
Deliverables after layout completion
When you order template development or adaptation, you receive:
- Source files of component templates with separation into
template.php, result_modifier.php, epilog
- CSS and JS loaded via Asset — no inline styles
- Configured caching with tags
- Documentation on structure and parameters
- Access to a Git repository with change history
- Training for your developer: how to edit the template without losing upgradeability
We guarantee Core Web Vitals compliance and cross-browser compatibility. Each project is assigned a lead engineer with 10+ years of Bitrix experience.
Process:
- Analysis of mockups and current project — identify components for rework
- Structure design — break the page into BEM blocks
- Implementation — build templates according to the scheme: template, result_modifier, epilog, CSS, JS
- Testing — check cache, responsiveness, Core Web Vitals, cross-browser compatibility
- Deployment — staging, acceptance, production
At each stage you get intermediate results and can make corrections. Contact our team for a project estimate — we’ll provide a timeline and cost within 1–2 days after receiving mockups.
Common mistakes in Bitrix layout
- SQL queries inside
template.php — breaks caching and creates heavy load
- Inline
<style> and <script> — breaks Asset concatenation and slows loading
- Missing
result_modifier.php — logic mixed with presentation
- Direct
$_REQUEST in cached components — user-specific data leaks
- Not using
component_epilog.php for dynamic content — entire cache invalidated on each user action
Each mistake has a simple fix — we correct them during development or audit.
Timelines
| Scope |
Timeline |
| Landing page (5–7 screens) |
3–5 days |
| Corporate website (15–20 unique pages) |
2–4 weeks |
| E-commerce store (30+ component templates) |
4–8 weeks |
| Customization of a Marketplace solution |
1–3 weeks |
| Redesign of an existing project |
3–6 weeks |
Ready to improve your layout? Order a preliminary consultation — we’ll calculate timelines and budget individually.