Skip to content

Bits of .NET

Daily micro-tips for C#, SQL, performance, and scalable backend engineering.

  • Asp.Net Core
  • C#
  • SQL
  • JavaScript
  • CSS
  • About
  • ErcanOPAK.com
  • No Access
  • Privacy Policy
HTML

HTML: Master Responsive Images with Picture Element

- 17.08.26 - ErcanOPAK

🖼️ Picture Element = Responsive Images

Images need to adapt to all screens. Picture element serves the right image at the right size.

📝 Picture Element Syntax

<picture>
    <source 
        media="(min-width: 1024px)"
        srcset="large.jpg"
    />
    <source 
        media="(min-width: 768px)"
        srcset="medium.jpg"
    />
    <source 
        media="(min-width: 480px)"
        srcset="small.jpg"
    />
    <img 
        src="fallback.jpg"
        alt="Description of image"
        loading="lazy"
    />
</picture>

# Art Direction Example
<picture>
    <source 
        media="(orientation: landscape)"
        srcset="landscape.jpg"
    />
    <source 
        media="(orientation: portrait)"
        srcset="portrait.jpg"
    />
    <img src="default.jpg" alt="Art direction example" />
</picture>

# WebP with Fallback
<picture>
    <source 
        type="image/webp"
        srcset="image.webp"
    />
    <source 
        type="image/avif"
        srcset="image.avif"
    />
    <img 
        src="image.jpg"
        alt="Modern format with fallback"
    />
</picture>

🎯 Advanced Responsive Images

# Multiple Resolutions (1x, 2x)
<img 
    src="image-1x.jpg"
    srcset="image-1x.jpg 1x, image-2x.jpg 2x"
    alt="High resolution support"
/>

# Width Descriptors with Sizes
<img 
    src="small.jpg"
    srcset="small.jpg 480w, 
            medium.jpg 768w, 
            large.jpg 1024w"
    sizes="(max-width: 480px) 100vw,
           (max-width: 768px) 80vw,
           50vw"
    alt="Responsive with sizes"
/>

# Lazy Loading with Intersection Observer
<img 
    src="placeholder.jpg"
    data-src="real-image.jpg"
    class="lazy"
    alt="Lazy loading example"
/>

<script>
const lazyImages = document.querySelectorAll('.lazy');
const observer = new IntersectionObserver((entries) => {
    entries.forEach(entry => {
        if (entry.isIntersecting) {
            const img = entry.target;
            img.src = img.dataset.src;
            observer.unobserve(img);
        }
    });
});
lazyImages.forEach(img => observer.observe(img));
</script>

💡 Responsive Image Best Practices

  • Always provide alt text for accessibility
  • Use WebP/AVIF with fallbacks
  • Implement lazy loading
  • Optimize image sizes
  • Use srcset for resolution switching

The picture element gives you complete control over responsive images. Your users will thank you for the faster loading times.

— Web Performance Engineer

Related posts:

HTML: Use ARIA Roles for Better Accessibility

HTML5 Semantic Secret: How Proper Structure Can Boost SEO by 40% Without Extra Content

details + summary for Native Toggles

Post Views: 4

Post navigation

CSS: Master CSS Variables for Theme Management
JavaScript: Build Offline Apps with localStorage

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

October 2026
M T W T F S S
 1234
567891011
12131415161718
19202122232425
262728293031  
« Sep    

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (973)
  • How to make theater mode the default for Youtube (952)
  • How to add default value for Entity Framework migrations for DateTime and Bool (939)
  • Get the First and Last Word from a String or Sentence in SQL (847)
  • How to select distinct rows in a datatable in C# (837)
  • How to enable, disable and check if Service Broker is enabled on a database in SQL Server (624)
  • Add Constraint to SQL Table to ensure email contains @ (590)
  • Average of all values in a column that are not zero in SQL (553)
  • How to use Map Mode for Vertical Scroll Mode in Visual Studio (526)
  • Find numbers with more than two decimal places in SQL (468)

Recent Posts

  • CSS: Fix a prefers-color-scheme Media Query That Gets Silently Overridden by a Browser Extension’s Forced Dark Mode
  • Git: Fix a Merge Commit That Silently Drops a File Because Both Branches Deleted It Differently
  • HTML5: Fix a Native Lazy-Loading Image That Never Loads Because It Sits Inside a Hidden Tab Until the User Clicks It
  • The AI Prompt That Traces a Null Reference Exception Back to the Exact Line That First Produced the Null
  • The AI Prompt That Turns a Gym Membership Contract’s Fine Print Into a Plain-English List of Cancellation Steps
  • Photoshop: Fix a Color Profile Mismatch That Makes Printed Output Look Nothing Like What You Saw On Screen
  • WordPress: Fix Search Results That Return Pages From a Theme You Deactivated Months Ago
  • Visual Studio: Fix a Test Project That Builds Fine Alone but Fails to Discover Any Tests After a NuGet Restore
  • ASP.NET Core: Fix a File Upload That Times Out on Slow Connections Only Because Kestrel’s Minimum Data Rate Feature Kicked In
  • JavaScript: Fix an Array Destructuring Default Value That Silently Never Applies Because null Was Passed Instead of Undefined

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (973)
  • How to make theater mode the default for Youtube (952)
  • How to add default value for Entity Framework migrations for DateTime and Bool (939)
  • Get the First and Last Word from a String or Sentence in SQL (847)
  • How to select distinct rows in a datatable in C# (837)

Recent Posts

  • CSS: Fix a prefers-color-scheme Media Query That Gets Silently Overridden by a Browser Extension’s Forced Dark Mode
  • Git: Fix a Merge Commit That Silently Drops a File Because Both Branches Deleted It Differently
  • HTML5: Fix a Native Lazy-Loading Image That Never Loads Because It Sits Inside a Hidden Tab Until the User Clicks It
  • The AI Prompt That Traces a Null Reference Exception Back to the Exact Line That First Produced the Null
  • The AI Prompt That Turns a Gym Membership Contract’s Fine Print Into a Plain-English List of Cancellation Steps

Social

  • ErcanOPAK.com
  • GoodReads
  • LetterBoxD
  • Linkedin
  • The Blog
  • Twitter
© 2026 Bits of .NET | Built with Xblog Plus free WordPress theme by wpthemespace.com