PageSourceSearch

https://7esl.com/category/grammar/articles/

html 7esl.com collected 2026-10-02 05:08:16 UTC 180,252 bytes, 1,339 lines download raw bytes

1<!DOCTYPE html><html lang="en-US" prefix="og: https://ogp.me/ns#"><head><meta charset="UTF-8"> 
1<script>/* 7ESL local-network guard */
2(function(){function L(u){if(typeof u!=='string')return false;var s=u.toLowerCase();return s.indexOf('//localhost')>-1||s.indexOf('//127.0.0.1')>-1||s.indexOf('//0.0.0.0')>-1||s.indexOf('//[::1]')>-1||s.indexOf('//192.168.')>-1||s.indexOf('//10.0.')>-1;}
3if(window.fetch){var f=window.fetch.bind(window);window.fetch=function(i,o){var u=(typeof i==='string')?i:(i&&i.url);if(L(u)){return Promise.resolve(new Response('',{status:204}));}return f(i,o);};}
4if(window.XMLHttpRequest){var op=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(m,u){if(typeof u==='string'&&L(u)){arguments[1]='about:blank';}return op.apply(this,arguments);};}})();</script>
4 
4<script id="esl-aud-js">(function(d){try{var e=d.documentElement;if(e.getAttribute("data-aud"))return;var m=/(?:^|;\s*)esl_aud=([a-z]{1,8})/.exec(d.cookie||"");e.setAttribute("data-aud",{teacher:"teacher",learner:"learner",kid:"kid",skip:"none"}[m?m[1]:""]||"ask");}catch(x){}})(document);</script>
4 <meta name="viewport" content="width=device-width, initial-scale=1"><title>Articles &bull; 7ESL</title><meta name="description" content="Discover the essentials of using articles in English grammar with our comprehensive guide. Learn the correct application of &#039;a,&#039; &#039;an,&#039; and &#039;the&#039; to enhance your writing and speaking skills."/><meta name="robots" content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"/><link rel="canonical" href="https://7esl.com/category/grammar/articles/" /><meta property="og:locale" content="en_US" /><meta property="og:type" content="article" /><meta property="og:title" content="Articles &bull; 7ESL" /><meta property="og:description" content="Discover the essentials of using articles in English grammar with our comprehensive guide. Learn the correct application of &#039;a,&#039; &#039;an,&#039; and &#039;the&#039; to enhance your writing and speaking skills." /><meta property="og:url" content="https://7esl.com/category/grammar/articles/" /><meta property="og:site_name" content="7ESL" /><meta property="article:publisher" content="https://www.facebook.com/7ESLAI" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="Articles &bull; 7ESL" /><meta name="twitter:description" content="Discover the essentials of using articles in English grammar with our comprehensive guide. Learn the correct application of &#039;a,&#039; &#039;an,&#039; and &#039;the&#039; to enhance your writing and speaking skills." /><meta name="twitter:label1" content="Posts" /><meta name="twitter:data1" content="5" /> 
4<script type="application/ld+json" class="rank-math-schema">{"@context":"https://schema.org","@graph":[{"@type":"CollectionPage","@id":"https://7esl.com/category/grammar/articles/#webpage","name":"Articles","url":"https://7esl.com/category/grammar/articles/","inLanguage":"en-US","isPartOf":{"@type":"WebSite","@id":"https://7esl.com/#website","name":"7ESL","url":"https://7esl.com/"},"publisher":{"@type":"Organization","name":"7ESL","url":"https://7esl.com/"}},{"@type":"BreadcrumbList","@id":"https://7esl.com/category/grammar/articles/#breadcrumb","itemListElement":[{"@type":"ListItem","position":"1","item":{"@id":"https://7esl.com","name":"Home"}},{"@type":"ListItem","position":"2","item":{"@id":"https://7esl.com/knowledge-base/","name":"Knowledge Base"}},{"@type":"ListItem","position":"3","item":{"@id":"https://7esl.com/category/grammar/","name":"Grammar"}},{"@type":"ListItem","position":"4","item":{"@id":"https://7esl.com/category/grammar/articles/","name":"Articles"}}]}]}</script>
4 <link rel='dns-prefetch' href='//scripts.mediavine.com' /><link rel='dns-prefetch' href='//scripts.pubnation.com' /><link rel='dns-prefetch' href='//keywords.pubnation.com' /><link href='https://scripts.pubnation.com' crossorigin='anonymous' rel='preconnect' /><link href='https://keywords.pubnation.com' crossorigin='anonymous' rel='preconnect' /><link href='https://fonts.gstatic.com' crossorigin rel='preconnect' /><link href='https://fonts.googleapis.com' crossorigin rel='preconnect' /><style id="wp-img-auto-sizes-contain-inline-css">img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
5/*# sourceURL=wp-img-auto-sizes-contain-inline-css */</style><style id="global-styles-inline-css">:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--contrast: var(--contrast);--wp--preset--color--contrast-2: var(--contrast-2);--wp--preset--color--contrast-3: var(--contrast-3);--wp--preset--color--base: var(--base);--wp--preset--color--base-2: var(--base-2);--wp--preset--color--base-3: var(--base-3);--wp--preset--color--accent: var(--accent);--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);
5--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--font-family--quicksand: Quicksand, sans-serif;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-contrast-color{color: var(--wp--preset--color--contrast) !important;}.has-contrast-2-color{color: var(--wp--preset--color--contrast-2) !important;}.has-contrast-3-color{color: var(--wp--preset--color--contrast-3) !important;}.has-base-color{color: var(--wp--preset--color--base) !important;}.has-base-2-color{color: var(--wp--preset--color--base-2) !important;}.has-base-3-color{color: var(--wp--preset--color--base-3) !important;}.has-accent-color{color: var(--wp--preset--color--accent) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-contrast-background-color{background-color: var(--wp--preset--color--contrast) !important;}.has-contrast-2-background-color{background-color: var(--wp--preset--color--contrast-2) !important;}.has-contrast-3-background-color{background-color: var(--wp--preset--color--contrast-3) !important;}.has-base-background-color{background-color: var(--wp--preset--color--base) !important;}.has-base-2-background-color{background-color: var(--wp--preset--color--base-2) !important;}.has-base-3-background-color{background-color: var(--wp--preset--color--base-3) !important;}.has-accent-background-color{background-color: var(--wp--preset--color--accent) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-contrast-border-color{border-color: var(--wp--preset--color--contrast) !important;}.has-contrast-2-border-color{border-color: var(--wp--preset--color--contrast-2) !important;}.has-contrast-3-border-color{border-color: var(--wp--preset--color--contrast-3) !important;}.has-base-border-color{border-color: var(--wp--preset--color--base) !important;}.has-base-2-border-color{border-color: var(--wp--preset--color--base-2) !important;}.has-base-3-border-color{border-color: var(--wp--preset--color--base-3) !important;}.has-accent-border-color{border-color: var(--wp--preset--color--accent) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
5.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-quicksand-font-family{font-family: var(--wp--preset--font-family--quicksand) !important;}
6/*# sourceURL=global-styles-inline-css */</style><link rel='stylesheet' id='generate-google-fonts-css' href='https://fonts.googleapis.com/css?family=Quicksand:300,regular,500,700&#038;display=swap&#038;ver=3.6.1' media='all' /> 
6<script type="text/javascript">window._nslDOMReady = (function () {
7                const executedCallbacks = new Set();
8            
9                return function (callback) {
10                    /**
11                    * Third parties might dispatch DOMContentLoaded events, so we need to ensure that we only run our callback once!
12                    */
13                    if (executedCallbacks.has(callback)) return;
14            
15                    const wrappedCallback = function () {
16                        if (executedCallbacks.has(callback)) return;
17                        executedCallbacks.add(callback);
18                        callback();
19                    };
20            
21                    if (document.readyState === "complete" || document.readyState === "interactive") {
22                        wrappedCallback();
23                    } else {
24                        document.addEventListener("DOMContentLoaded", wrappedCallback);
25                    }
26                };
27            })();</script>
27 
27<script id="breeze-prefetch-js-extra">var breeze_prefetch = {"local_url":"https://7esl.com","ignore_remote_prefetch":"1","ignore_list":["wp-admin","wp-login.php"]};
28//# sourceURL=breeze-prefetch-js-extra</script>
28 
28<script id="mv-script-wrapper-js" async="async" fetchpriority="high" data-noptimize="1" data-cfasync="false" data-mv-mcp="2.10.12" src="https://scripts.mediavine.com/tags/7esl.js?ver=7.1.2"></script>
28 <link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://7esl.com/xmlrpc.php?rsd" /><link rel="preload" as="font" type="font/woff2" href="https://7esl.com/wp-content/uploads/fonts/6xK-dSZaM9iE8KbpRA_LJ3z8mH9BOJvgkP8o18S0wx40QDw.woff2" crossorigin><link rel="icon" href="https://7esl.com/wp-content/uploads/2023/03/cropped-7ESL-Favicon-150x150.png" sizes="32x32" /><link rel="icon" href="https://7esl.com/wp-content/uploads/2023/03/cropped-7ESL-Favicon-300x300.png" sizes="192x192" /><link rel="apple-touch-icon" href="https://7esl.com/wp-content/uploads/2023/03/cropped-7ESL-Favicon-300x300.png" /><meta name="msapplication-TileImage" content="https://7esl.com/wp-content/uploads/2023/03/cropped-7ESL-Favicon-300x300.png" /> 
28<script id="sevenesl-avatar-fallback">document.addEventListener('DOMContentLoaded', function () {
29      var fallback = 'https://7esl.com/wp-content/plugins/7esl-core/assets/images/default_avatar.png';
30      document.querySelectorAll('img.avatar, .forum-avatar-link img, .wrapAvatar img.avatarTutor, img.avatarTutor, img.avatarUser').forEach(function (img) {
31        img.addEventListener('error', function handleError() {
32          if (img.getAttribute('src') !== fallback) {
33            img.setAttribute('src', fallback);
34          }
35        }, { once: true });
36      });
37    });</script>
37 
37<script type="text/javascript" src="https://7esl.com/wp-content/cache/breeze-minification/js/breeze_category-grammar-articles-1-112735-js-jquery-jquery.min-6836d82c2675.js?ver=1790912477"></script>
37<script type="text/javascript" src="https://7esl.com/wp-content/cache/breeze-minification/js/breeze_category-grammar-articles-1-112735-js-js-front-end-breeze-prefetch-links.min-3c10be81bf6e.js?ver=1790912477"></script>
37<link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-inline_1-a0063705c9d5.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-inline_2-eda20ac0bec8.css?ver=1790912477" rel="stylesheet" /><style type="text/css" media="all">img[width][height]{height:auto}.gb-button,.tag,.rank-math-breadcrumb,.breadcrumb,.ez-toc-title,.ez-toc-title-container{min-height:1px}</style><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-7esl-core-assets-thinklab-8a91727a92b2.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-7esl-core-assets-forum-redesign-e34b5a59e8a2.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-fonts-inter-inter-6b77128a995a.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-inline_4-9077cbb97de5.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-inline_5-e9a280b7c847.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-assets-css-style-18c2a1dc22eb.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-assets-css-plyr-v3.7.2-e4f19c2644a6.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-novashare-css-style.min-90542393b44d.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-inline_6-500e0b834c6d.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-css-components-widget-areas.min-b6b59ce9e554.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-assets-css-main.min-6e916044c122.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-inline_7-fca786e8beb3.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-tests-assets-tests-cd479be12258.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-7esl-core-assets-esl-toc-4d563c24623c.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-tests-assets-article-tabs-8c542f21a2a4.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-7esl-core-assets-site-chrome-f2b07700fe68.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-assets-css-esl-ui-818a13127da5.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-assets-css-ui-archive-8bb71337c7fe.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-assets-css-ui-side-46b7ad784826.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-functions-css-featured-images.min-d894f50a61d6.
37css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-7esl-core-assets-sevenesl-ui-fixes-8e8fdadc27b8.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-7esl-core-assets-category-editorial-cdaee314d5f1.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-functions-css-navigation-branding-flex.min-75b5071a0a09.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-inline_8-c66a0c78d33b.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-inline_9-ad4d0ae8724b.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-inline_10-2ac4270b1048.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-inline_11-4e002ea9bc5b.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-inline_12-177401c7150a.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-inline_13-650e59be5ed8.css?ver=1790912477" rel="stylesheet" /><link type="text/css" media="all" href="https://7esl.com/wp-content/cache/breeze-minification/css/breeze_category-grammar-articles-1-112735-inline_14-0c72a66d8df5.css?ver=1790912477" rel="stylesheet" /></head><body class="archive category category-articles category-37395 wp-custom-logo wp-embed-responsive wp-theme-generatepress escx-active post-image-below-header post-image-aligned-center sticky-menu-slide sticky-enabled desktop-sticky-menu right-sidebar nav-float-right separate-containers header-aligned-left dropdown-hover"><div class="escx-topbar"><div class="escx-wrap"><div class="escx-topbar__left"> <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#f5a623" stroke-width="2"><circle cx="12" cy="12" r="10"/><path d="M2 12h20M12 2a15 15 0 0 1 0 20 15 15 0 0 1 0-20"/></svg> <span>Trusted by 10M+ learners worldwide &mdash; free lessons, tools &amp; games</span></div><div class="escx-topbar__right"> <a href="https://7esl.com/forum/">Forums</a> <a href="https://7esl.com/app/">Download App</a> <a href="https://7esl.com/membership/?src=topbar_adfree" class="escx-topbar__pill escx-topbar__pill--af">Go ad-free</a> <a href="https://7esl.com/membership/?src=topbar" class="escx-topbar__pill escx-topbar__pill--up">⚡ Go Pro</a> <a href="https://7esl.com/tutor-register/" class="escx-topbar__pill" data-aud-hide="learner kid ask none">★ Become a Tutor</a></div></div></div><header class="escx" id="escxHeader"><div class="escx-wrap escx__bar"> <a href="https://7esl.com/" class="escx-logo"> <img loading="lazy" src="https://7esl.com/wp-content/plugins/7esl-core/assets/images/logo-7esl-dark.svg" alt="7ESL" width="131" height="34"
38onerror="this.style.display='none';this.nextElementSibling.style.display='inline-flex'"> <span style="display:none;align-items:center;gap:8px"><span class="escx-logo__mark"><svg width="22" height="22" viewBox="0 0 24 24" fill="none"><path d="M3 7l9-4 9 4-9 4-9-4z" fill="#fff"/><path d="M7 10v5c0 1.5 2.2 2.5 5 2.5s5-1 5-2.5v-5" stroke="#fff" stroke-width="1.6" fill="none"/></svg></span>7<b>ESL</b></span> </a><nav class="escx-nav" aria-label="Primary"><div class="escx-nav__item"> <a href="https://7esl.com/courses/">Learn <svg class="escx-chev" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M6 9l6 6 6-6"/></svg></a><div class="escx-mega" style="min-width:880px"><div class="escx-mega__grid" style="grid-template-columns:1.5fr 1fr 1fr"><div class="escx-courses"><div class="escx-col__h">Courses <span class="escx-badge">NEW</span></div><div class="escx-courses__g"> <a class="escx-course" href="https://7esl.com/courses/phonics/"><span class="escx-course__tt">Phonics</span><span class="escx-course__ds">Letters, sounds &amp; first reading</span></a><a class="escx-course" href="https://7esl.com/courses/cambridge-starters/"><span class="escx-course__tt">Pre A1 Starters <span class="escx-pro">PRO</span></span><span class="escx-course__ds">Cambridge · Pre A1 · Unit 1 free</span></a><a class="escx-course" href="https://7esl.com/courses/cambridge-movers/"><span class="escx-course__tt">A1 Movers <span class="escx-pro">PRO</span></span><span class="escx-course__ds">Cambridge · A1 · Unit 1 free</span></a><a class="escx-course" href="https://7esl.com/courses/cambridge-flyers/"><span class="escx-course__tt">A2 Flyers <span class="escx-pro">PRO</span></span><span class="escx-course__ds">Cambridge · A2 · Unit 1 free</span></a><a class="escx-course" href="https://7esl.com/courses/cambridge-a2-key-for-schools/"><span class="escx-course__tt">A2 Key for Schools <span class="escx-pro">PRO</span></span><span class="escx-course__ds">Cambridge · A2 · Unit 1 free</span></a><a class="escx-course" href="https://7esl.com/courses/cambridge-b1-preliminary-for-schools/"><span class="escx-course__tt">B1 Preliminary for Schools <span class="escx-pro">PRO</span></span><span class="escx-course__ds">Cambridge · B1 · Unit 1 free</span></a><a class="escx-course" href="https://7esl.com/courses/b2-first/"><span class="escx-course__tt">B2 First <span class="escx-pro">PRO</span></span><span class="escx-course__ds">Cambridge · B2 · Unit 1 free</span></a></div> <a class="escx-courses__all" href="https://7esl.com/courses/">All courses &rarr;</a></div><div><div class="escx-col__h">
38Lessons</div> <a class="escx-mlink" href="https://7esl.com/category/grammar/"><span class="escx-mlink__ic">📖</span><span><span class="escx-mlink__tt">Grammar</span><span class="escx-mlink__ds">Rules, tenses &amp; structure</span></span></a><a class="escx-mlink" href="https://7esl.com/category/vocabulary/"><span class="escx-mlink__ic">📚</span><span><span class="escx-mlink__tt">Vocabulary</span><span class="escx-mlink__ds">Word lists by topic</span></span></a><a class="escx-mlink" href="https://7esl.com/category/writing/"><span class="escx-mlink__ic">✍</span><span><span class="escx-mlink__tt">Writing Guides</span><span class="escx-mlink__ds">Essays, emails &amp; style</span></span></a><a class="escx-mlink" href="https://7esl.com/category/idioms/"><span class="escx-mlink__ic">💡</span><span><span class="escx-mlink__tt">Idioms</span><span class="escx-mlink__ds">Common expressions</span></span></a><a class="escx-mlink" href="https://7esl.com/category/speaking/pronunciation/"><span class="escx-mlink__ic">🔊</span><span><span class="escx-mlink__tt">Pronunciation</span><span class="escx-mlink__ds">Sounds &amp; stress</span></span></a></div><div><div class="escx-col__h">More topics</div> <a class="escx-mlink" href="https://7esl.com/category/slang/"><span class="escx-mlink__ic">😎</span><span><span class="escx-mlink__tt">Slang</span><span class="escx-mlink__ds">Everyday informal English</span></span></a><a class="escx-mlink" href="https://7esl.com/category/business-english/"><span class="escx-mlink__ic">💼</span><span><span class="escx-mlink__tt">Business English</span><span class="escx-mlink__ds">Workplace &amp; professional</span></span></a><a class="escx-mlink" href="https://7esl.com/category/visual-vocabulary/"><span class="escx-mlink__ic">🎨</span><span><span class="escx-mlink__tt">Visual Vocabulary</span><span class="escx-mlink__ds">Learn words with pictures</span></span></a><a class="escx-mlink" href="https://7esl.com/category/american-and-british-english/"><span class="escx-mlink__ic">🇬🇧</span><span><span class="escx-mlink__tt">British vs. American</span><span class="escx-mlink__ds">Spelling &amp; usage differences</span></span></a><a class="escx-mlink" href="https://7esl.com/category/words-list/"><span class="escx-mlink__ic">📝</span><span><span class="escx-mlink__tt">Words List</span><span class="escx-mlink__ds">Curated word collections</span></span></a></div></div><div class="escx-mega__foot"><span>Thousands of free lessons on grammar, vocabulary, idioms &amp; more</span><a href="https://7esl.com/knowledge-base/">Browse all topics &rarr;</a></div></div></div><div class="escx-nav__item"> <a href="https://7esl.com/listening/">Practice <span class="escx-badge">NEW</span> <svg class="escx-chev" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M6 9l6 6 6-6"/></svg></a><div class="escx-mega" style="min-width:600px"><div class="escx-mega__grid" style="grid-template-columns:1.25fr 1fr"><div><div class="escx-col__h">Practise the 4 skills</div> <a class="escx-mlink" href="https://7esl.com/reading/"><span class="escx-mlink__ic">📖</span><span><span class="escx-mlink__tt">Reading</span><span class="escx-mlink__ds">Read short texts and answer questions</span></span></a><a class="escx-mlink" href="https://7esl.com/listening/"><span class="escx-mlink__ic">🎧</span><span><span class="escx-mlink__tt">Listening</span><span class="escx-mlink__ds">Short scenes, picture tasks &amp; dictation</span></span></a><a class="escx-mlink" href="https://7esl.com/speaking/"><span class="escx-mlink__ic">🎤</span><span><span class="escx-mlink__tt">Speaking</span><span class="escx-mlink__ds">Repeat, shadow &amp; role-play out loud</span></span></a><a class="escx-mlink" href="https://7esl.com/writing-practice/"><span class="escx-mlink__ic">✍</span><span><span class="escx-mlink__tt">Writing</span><span class="escx-mlink__ds">From first sentences to emails &amp; essays</span></span></a></div><div class="escx-feat" style="background:linear-gradient(160deg,#6d28d9,#4c1d95)"><div><h4>Learn, then practise</h4><p>Short daily practice at your level. Every activity earns XP and shows on your progress report.</p></div> <a class="escx-feat__cta" href="https://7esl.com/listening/">Start practising &rarr;</a></div></div></div></div><div class="escx-nav__item"> <a href="https://7esl.com/tests/">Tests <span class="escx-badge escx-badge--hot">HOT</span> <svg class="escx-chev" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M6 9l6 6 6-6"/></svg></a><div class="escx-mega" style="min-width:520px"><div class="escx-mega__grid" style="grid-template-columns:1.15fr 1fr"><div><div class="escx-col__h">Browse tests</div> <a class="escx-mlink" href="https://7esl.com/english-level-test/"><span class="escx-mlink__ic">🎯</span><span><span class="escx-mlink__tt">Level Tests</span><span class="escx-mlink__ds">Find your CEFR level (A1&ndash;C2)</span></span></a><a class="escx-mlink" href="https://7esl.com/exams/"><span class="escx-mlink__ic">🏆</span><span><span class="escx-mlink__tt">Exam Practice</span><span class="escx-mlink__ds">IELTS, TOEFL, Cambridge &amp; more</span></span></a><a class="escx-mlink" href="https://7esl.com/practice/"><span class="escx-mlink__ic">📝</span><span><span class="escx-mlink__tt">Practice Tests</span><span class="escx-mlink__ds">By skill, topic &amp; level</span></span></a></div><div class="escx-feat" style="background:linear-gradient(160deg,#163C66,#0B2540)"><div><h4>
38Exam Simulator</h4><p>Timed, auto-marked papers with instant scores, model answers &amp; XP.</p></div> <a class="escx-feat__cta" href="https://7esl.com/exams/">Start a mock exam &rarr;</a></div></div></div></div><div class="escx-nav__item"> <a href="https://7esl.com/tools/">Tools <svg class="escx-chev" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M6 9l6 6 6-6"/></svg></a><div class="escx-mega" style="min-width:560px"><div class="escx-mega__grid" style="grid-template-columns:1fr 1fr"><div><div class="escx-col__h">Learn &amp; write</div> <a class="escx-mlink" href="https://7esl.com/learning-tools/"><span class="escx-mlink__ic">🎓</span><span><span class="escx-mlink__tt">Learning Tools</span><span class="escx-mlink__ds">Flashcards, vocabulary &amp; IELTS practice</span></span></a><a class="escx-mlink" href="https://7esl.com/writing-tools/"><span class="escx-mlink__ic">✎</span><span><span class="escx-mlink__tt">Writing Tools</span><span class="escx-mlink__ds">Grammar checker, paraphraser, summarizer</span></span></a><a class="escx-mlink" href="https://7esl.com/word-tools/"><span class="escx-mlink__ic">🎲</span><span><span class="escx-mlink__tt">Word Tools</span><span class="escx-mlink__ds">Wordle, anagram &amp; scrabble solvers</span></span></a><a class="escx-mlink" href="https://7esl.com/picture-vocabulary/"><span class="escx-mlink__ic">🎨</span><span><span class="escx-mlink__tt">Picture Vocabulary</span><span class="escx-mlink__ds">Learn vocabulary with images</span></span></a></div><div><div class="escx-col__h">Teaching &amp; speech</div> <a class="escx-mlink" href="https://7esl.com/teacher-tools/"><span class="escx-mlink__ic">🏫</span><span><span class="escx-mlink__tt">Teacher Tools</span><span class="escx-mlink__ds">Worksheets, flashcards &amp; bingo</span></span></a><a class="escx-mlink" href="https://7esl.com/how-to-pronounce/"><span class="escx-mlink__ic">🔊</span><span><span class="escx-mlink__tt">Pronunciation Tools</span><span class="escx-mlink__ds">Say any word, name or brand</span></span></a><a class="escx-mlink" href="https://7esl.com/spelling-tools/"><span class="escx-mlink__ic">📠</span><span><span class="escx-mlink__tt">Spelling Tools</span><span class="escx-mlink__ds">NATO alphabet, misspellings &amp; more</span></span></a></div></div><div class="escx-mega__foot"><span>80+ free English tools &mdash; no signup needed</span><a href="https://7esl.com/tools/">See all tools &rarr;</a></div></div></div><div class="escx-nav__item"> <a href="https://7esl.com/games/">Games <svg class="escx-chev" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M6 9l6 6 6-6"/></svg></a><div class="escx-mega" style="min-width:560px"><div class="escx-mega__grid" style="grid-template-columns:1fr 1fr 1fr"><div><div class="escx-col__h">Categories</div> <a class="escx-mlink" href="https://7esl.com/word-games/"><span class="escx-mlink__ic">🔀</span><span><span class="escx-mlink__tt">Word Games</span><span class="escx-mlink__ds">Wordle, Spelling Bee, Anagram</span></span></a><a class="escx-mlink" href="https://7esl.com/vocabulary-games/"><span class="escx-mlink__ic">📚</span><span><span class="escx-mlink__tt">Vocabulary Games</span><span class="escx-mlink__ds">Match, flashcards, memory</span></span></a></div><div><div class="escx-col__h">&nbsp;</div> <a class="escx-mlink" href="https://7esl.com/grammar-games/"><span class="escx-mlink__ic">🔧</span><span><span class="escx-mlink__tt">Grammar Games</span><span class="escx-mlink__ds">Cloze, sentence builder</span></span></a><a class="escx-mlink" href="https://7esl.com/kids-games/"><span class="escx-mlink__ic">🧸</span><span><span class="escx-mlink__tt">Kids Games</span><span class="escx-mlink__ds">Fun games for ages 4&ndash;9</span></span></a><a class="escx-mlink" href="https://7esl.com/pronunciation-games/"><span class="escx-mlink__ic">🔊</span><span><span class="escx-mlink__tt">Pronunciation &amp; Spelling</span><span class="escx-mlink__ds">Listen, choose, spell</span></span></a></div><div class="escx-feat" style="background:linear-gradient(160deg,#F5A623,#D98A00);color:#3a2700"><div><h4 style="color:#3a2700">Earn XP &amp; Badges</h4><p style="color:#5a3f00">Every game scores XP, levels you up and unlocks shields.</p></div> <a class="escx-feat__cta" style="background:#0B2540;color:#fff" href="https://7esl.com/games/">Play all games &rarr;</a></div></div></div></div><div class="escx-nav__item"> <a href="https://7esl.com/teacher-tools/">For Teachers <svg class="escx-chev" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M6 9l6 6 6-6"/></svg></a><div class="escx-mega" style="min-width:640px"><div class="escx-mega__grid" style="grid-template-columns:1fr 1fr"><div><div class="escx-col__h">Classroom material</div> <a class="escx-mlink" href="https://7esl.com/category/esl-resources/worksheets/"><span class="escx-mlink__ic">📄</span><span><span class="escx-mlink__tt">Worksheets</span><span class="escx-mlink__ds">Printable, ready for class</span></span></a><a class="escx-mlink" href="https://7esl.com/category/esl-resources/esl-pdfs/"><span class="escx-mlink__ic">📚</span><span><span class="escx-mlink__tt">PDF Books</span><span class="escx-mlink__ds">Free downloadable books</span></span></a><a class="escx-mlink" href="https://7esl.com/picture-vocabulary/"><span class="escx-mlink__ic">🎨</span><span><span class="escx-mlink__tt">Picture Vocabulary</span><span class="escx-mlink__ds">Flashcard images by topic</span></span></a><a class="escx-mlink" href="https://7esl.com/kids-games/"><span class="escx-mlink__ic">🧸</span><span><span class="escx-mlink__tt">Kids Games</span><span class="escx-mlink__ds">For young learners</span></span></a></div><div><div class="escx-col__h">Your tools</div> <a class="escx-mlink" href="https://7esl.com/teacher-tools/"><span class="escx-mlink__ic">🏫</span><span><span class="escx-mlink__tt">Teacher Tools</span><span class="escx-mlink__ds">Worksheet makers, bingo, flashcards</span></span></a><a class="escx-mlink" data-aud-hide="learner kid ask none" href="https://7esl.com/tutor-register/"><span class="escx-mlink__ic">⭐</span><span><span class="escx-mlink__tt">Become a Tutor</span><span class="escx-mlink__ds">Teach 1-on-1 and get paid</span></span></a><a class="escx-mlink" href="https://7esl.com/tutors/"><span class="escx-mlink__ic">👨‍🏫</span><span><span class="escx-mlink__tt">Find a Tutor</span><span class="escx-mlink__ds">1-on-1 lessons via Google Meet</span></span></a></div></div><div class="escx-mega__foot"><span>Free worksheet makers &mdash; no signup needed</span><a href="https://7esl.com/teacher-tools/">All teacher tools &rarr;</a></div></div></div></nav><div class="escx__spacer"></div><div class="escx__actions"> <button class="escx-icbtn" id="escxSearchBtn" aria-label="Search"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><path d="M21 21l-4.3-4.3"/></svg></button> <a class="escx-btn escx-btn--ghost" href="https://7esl.com/login/">Login</a> <a class="escx-btn escx-btn--pri" href="https://7esl.com/signup/">Sign up free</a></div> <button class="escx-burger" id="escxBurger" aria-label="Open menu"><svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#163C66" stroke-width="2.2"><path d="M3 6h18M3 12h18M3 18h18"/></svg></button></div><div class="escx-search" id="escxSearch"><form class="escx-wrap" role="search" method="get" action="https://7esl.com/"> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#5B6B79" stroke-width="2"><circle cx="11" cy="11" r="8"/><path d="M21 21l-4.3-4.3"/></svg> <input type="search" name="s" placeholder="Search lessons, tools, games, exams&hellip;"> <button class="escx-btn escx-btn--pri" type="submit">Search</button></form></div></header> <a class="screen-reader-text skip-link" href="#content" title="Skip to content">Skip to content</a><div class="page-hero"><div class="inside-page-hero grid-container grid-parent"><meta http-equiv="Content-Security-Policy" content="block-all-mixed-content" /><meta name="google-site-verification" content="AGR3MNmtsz8nyGh7BE2vXcg-tc27_0UNpdbI52vqJRM" /><meta name="p:domain_verify" content="310d9a8637368dc8a09c3b4d82add598"/>
vendor: 64 bytes, line 38
38 <script async src="https://www.googletagmanager.com/gtag/js?id=
38G-D3Z7V8R0BW
vendor: 12 bytes, line 38
38"></script> 
38<script>
vendor: 134 bytes, lines 38-42
38window.dataLayer = window.dataLayer || [];
39  function gtag(){dataLayer.push(arguments);}
40  gtag('js', new Date());
41
42  gtag('config', '
42G-D3Z7V8R0BW
vendor: 3 bytes, line 42
42');
42</script>
42 </div></div><div class="site grid-container container hfeed" id="page"><div class="site-content" id="content"><div id="primary" class="content-area"><main id="main" class="site-main eu ar ar--cat eu-t--grammar"><div class="sevenesl-archive-breadcrumbs ar-crumbs"><nav class="sevenesl-breadcrumbs" aria-label="Breadcrumbs"><nav aria-label="breadcrumbs" class="rank-math-breadcrumb"><p><a href="https://7esl.com">Home</a><span class="separator"> › </span><a href="https://7esl.com/knowledge-base/">Knowledge Base</a><span class="separator"> › </span><a href="https://7esl.com/category/grammar/">Grammar</a><span class="separator"> › </span><span class="last">Articles</span></p></nav></nav></div><section class="ar-hero ar-box eu-tint has-landing-content"><div class="ar-hero__top"> <span class="eu-ic eu-t--grammar eu-ic--e eu-ic--lg ar-hero__ic" aria-hidden="true">📝</span><div class="ar-hero__t"> <a class="ar-up" href="https://7esl.com/category/grammar/"> <span class="ar-up__i" aria-hidden="true">▣</span> <span>Grammar</span> </a><h1 class="page-title ar-title">Articles</h1></div></div><div class="esl-cat-tool-cta" style="display:flex;flex-wrap:wrap;align-items:center;gap:14px;margin:16px 0 4px;padding:14px 18px;border:1px solid #bae6fd;border-radius:14px;background:linear-gradient(135deg,#f0f9ff,#ecfeff)"><div style="flex:1 1 260px;min-width:0"><div style="font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#0369a1;margin-bottom:2px">Free tool for this topic</div><div style="font-size:17px;font-weight:800;color:#0f172a;line-height:1.25">Grammar Checker</div><div style="font-size:13px;color:#475569;margin-top:3px">Check your writing for grammar, spelling and punctuation mistakes.</div></div><a class="esl-cat-tool-cta__btn" href="https://7esl.com/grammar-check/" style="flex:0 0 auto;display:inline-flex;align-items:center;gap:8px;background:linear-gradient(135deg,#0f7ea4,#27a9cb);color:#fff;text-decoration:none;font-weight:700;font-size:14px;padding:11px 20px;border-radius:999px">Open the tool &rarr;</a></div><div class="ar-stats" aria-label="Category overview"><div class="ar-stat"><span class="ar-stat__e" aria-hidden="true">📚</span><strong>5</strong><span>Articles</span></div><div class="ar-stat"><span class="ar-stat__e" aria-hidden="true">📂</span><strong>0</strong><span>Subcategories</span></div><div class="sevenesl-level-tags-strip" aria-label="Levels"><div class="sevenesl-level-tags-strip__items"> <a
43class="sevenesl-level-tag-pill sevenesl-level-tag-pill--a"
44href="https://7esl.com/courses/a1-english/"
45> <span>A1</span> </a> <a
46class="sevenesl-level-tag-pill sevenesl-level-tag-pill--a"
47href="https://7esl.com/courses/a2-english/"
48> <span>A2</span> </a> <a
49class="sevenesl-level-tag-pill sevenesl-level-tag-pill--b"
50href="https://7esl.com/courses/b1-english/"
51> <span>B1</span> </a> <a
52class="sevenesl-level-tag-pill sevenesl-level-tag-pill--b"
53href="https://7esl.com/courses/b2-english/"
54> <span>B2</span> </a></div></div></div></section><section class="sevenesl-category-editorial inside-article" aria-label="Articles Guide"><div class="entry-content sevenesl-category-entry-content"><div id="esl-toc" class="esl-toc"><button type="button" class="esl-toc__title" aria-expanded="true" aria-controls="esl-toc-list"><span class="esl-toc__title-text">Contents</span><span class="esl-toc__toggle" aria-hidden="true"></span></button><nav class="esl-toc__nav" aria-label="Contents"><ul id="esl-toc-list" class="esl-toc__list"><li class="esl-toc__item esl-toc__item--h2"><div class="esl-toc__row"><a class="esl-toc__link" href="#what-is-an-article"><span class="esl-toc__num" aria-hidden="true">1</span><span class="esl-toc__label">What Is an Article?</span></a></div></li><li class="esl-toc__item esl-toc__item--h2"><div class="esl-toc__row"><a class="esl-toc__link" href="#different-types-of-articles"><span class="esl-toc__num" aria-hidden="true">2</span><span class="esl-toc__label">Different Types of Articles</span></a><button type="button" class="esl-toc__expand" aria-expanded="false" aria-label="Show subsections"></button></div><ul class="esl-toc__sub"><li class="esl-toc__item esl-toc__item--h3"><a class="esl-toc__link" href="#definite-article">Definite Article</a></li><li class="esl-toc__item esl-toc__item--h3"><a class="esl-toc__link" href="#indefinite-articles">Indefinite Articles</a></li></ul></li><li class="esl-toc__item esl-toc__item--h2"><div class="esl-toc__row"><a class="esl-toc__link" href="#rules-for-using-articles"><span class="esl-toc__num" aria-hidden="true">3</span><span class="esl-toc__label">Rules for Using Articles</span></a><button type="button" class="esl-toc__expand" aria-expanded="false" aria-label="Show subsections"></button></div><ul class="esl-toc__sub"><li class="esl-toc__item esl-toc__item--h3"><a class="esl-toc__link" href="#rule-1-article-choice-depends-on-sound">Rule #1: Article choice depends on sound</a></li><li class="esl-toc__item esl-toc__item--h3"><a class="esl-toc__link" href="#rule-2-articles-with-adjectives">Rule #2: Articles with adjectives</a></li><li class="esl-toc__item esl-toc__item--h3"><a class="esl-toc__link" href="#rule-3-uncountable-nouns">Rule #3: Uncountable nouns</a></li><li class="esl-toc__item esl-toc__item--h3"><a class="esl-toc__link" href="#rule-4-articles-and-possessive-pronouns">Rule #4: Articles and possessive pronouns</a></li><li class="esl-toc__item esl-toc__item--h3"><a class="esl-toc__link" href="#rule-5-when-articles-are-omitted">Rule #5: When articles are omitted</a></li></ul></li><li class="esl-toc__item esl-toc__item--h2"><div class="esl-toc__row"><a class="esl-toc__link" href="#when-not-to-use-an-english-article"><span class="esl-toc__num" aria-hidden="true">4</span><span class="esl-toc__label">
54When Not to Use an English Article</span></a></div></li><li class="esl-toc__item esl-toc__item--h2"><div class="esl-toc__row"><a class="esl-toc__link" href="#articles-with-countable-and-uncountable-nouns"><span class="esl-toc__num" aria-hidden="true">5</span><span class="esl-toc__label">Articles with Countable and Uncountable Nouns</span></a></div></li><li class="esl-toc__item esl-toc__item--h2"><div class="esl-toc__row"><a class="esl-toc__link" href="#how-to-use-articles-a-an-the-video"><span class="esl-toc__num" aria-hidden="true">6</span><span class="esl-toc__label">How to Use Articles (A / An / The) | Video</span></a></div></li></ul></nav></div><p>When studying English grammar, you may have come across <strong>articles</strong>. In this lesson, we will take a clear and structured look at what an article is, how it is used, and the rules surrounding it. The explanation is supported by examples and <a href="https://7esl.com/articles-worksheet/">exercises</a> so that you can gain a solid understanding of how articles function in real sentences.</p><h2 id="what-is-an-article">What Is an Article?</h2><p>In English grammar, there are two different types of articles: the <strong>definite article</strong> and the <strong>indefinite articles</strong>. In simple terms, an article tells the listener or reader whether a noun is <strong>specific</strong> or <strong>non-specific</strong>.</p><div class="mv-ads esl-ad-slot" data-slot="cat-landing" style="min-height:350px;margin:22px auto;max-width:340px;text-align:center;"></div><p>The three English articles are: <strong>a</strong>, <strong>an</strong>, and <strong>the</strong>.</p><p>Let’s look at some examples to clarify the meaning of an article.</p><ul><li><em>During <strong>the</strong> long journey, the family played car games.</em></li></ul><div class="mv-ads esl-ad-slot" data-slot="cat-landing" style="min-height:350px;margin:22px auto;max-width:340px;text-align:center;"></div><p>Here, the article <strong>the</strong> shows that we are talking about a <strong>specific</strong> journey and a <strong>specific</strong> family.</p><p>If we change the article, the meaning becomes more general:</p><ul><li><em>During <strong>a</strong> long journey, <strong>a</strong> family can play car games.</em></li></ul><div class="mv-ads esl-ad-slot" data-slot="cat-landing" style="min-height:350px;margin:22px auto;max-width:340px;text-align:center;"></div><p class="esl-adfree-nudge" style="max-width:340px;margin:-14px auto 22px;text-align:center;font-size:12px;line-height:1.5;color:#94a3b8;">Ads paying for your free English lessons. Prefer a quiet page? <a href="https://7esl.com/membership/?src=ad_slot" style="color:#64748b;text-decoration:underline;">Go ad-free</a></p><p>By changing the article, the sentence now refers to any journey or any family, not a particular one.</p><p><strong>Quick notes:</strong></p><ul><li>Articles are small but very important words in English.</li><li>Articles are considered adjectives because they modify nouns.</li><li>Articles always come before the nouns they describe.</li></ul><p><img loading="lazy" decoding="async" class="alignnone wp-image-17620 size-full" src="https://7esl.com/wp-content/uploads/2018/01/Articles_-A2FAN2F-THE-1.jpg" alt="English articles a an the grammar rules and examples" width="2980" height="3089" title="Articles Landing 1" srcset="https://7esl.com/wp-content/uploads/2018/01/Articles_-A2FAN2F-THE-1.jpg 2980w, https://7esl.com/wp-content/uploads/2018/01/Articles_-A2FAN2F-THE-1-460x477.jpg 460w, https://7esl.com/wp-content/uploads/2018/01/Articles_-A2FAN2F-THE-1-768x796.jpg 768w, https://7esl.com/wp-content/uploads/2018/01/Articles_-A2FAN2F-THE-1-988x1024.jpg 988w, https://7esl.com/wp-content/uploads/2018/01/Articles_-A2FAN2F-THE-1-116x120.jpg 116w, https://7esl.com/wp-content/uploads/2018/01/Articles_-A2FAN2F-THE-1-310x321.jpg 310w" sizes="auto, (max-width: 2980px) 100vw, 2980px" /></p><h2 id="different-types-of-articles">Different Types of Articles</h2><p>English has two types of articles, each with its own purpose:</p><ul><li><strong>Definite article:</strong> <em>the</em></li><li><strong>
54Indefinite articles:</strong> <em>a</em> and <em>an</em></li></ul><h3 id="definite-article">Definite Article</h3><p>The word <strong>the</strong> is called the definite article. It is used when the speaker is referring to something specific or something that is already known to the listener.</p><p>The definite article can be used with singular nouns, plural nouns, and uncountable nouns.</p><ul><li>Please show me <strong>the</strong> photo.</li><li>Can I see <strong>the</strong> blue dress? I do not like <strong>the</strong> red one.</li><li>Are we going to watch <strong>the</strong> football game?</li><li>I need <strong>the</strong> long wire; it is <strong>the</strong> only one that will reach the socket.</li></ul><h3 id="indefinite-articles">Indefinite Articles</h3><p>The indefinite articles are <strong>a</strong> and <strong>an</strong>. They are used when we are talking about something in a general or non-specific way.</p><p><strong>Important rule:</strong> The choice between <strong>a</strong> and <strong>an</strong> depends on the <strong>sound</strong> at the beginning of the word, not the letter.</p><ul><li>Use <strong>a</strong> before words that begin with a <strong>consonant sound</strong>.</li><li>Use <strong>an</strong> before words that begin with a <strong>vowel sound</strong>.</li></ul><p>Examples:</p><ul><li>I need to read <strong>a</strong> book.</li><li>I am going to watch <strong>a</strong> movie.</li><li>There is <strong>an</strong> animal in the garden.</li><li>Sally has <strong>an</strong> invention she is working on.</li></ul><h2 id="rules-for-using-articles">Rules for Using Articles</h2><h3 id="rule-1-article-choice-depends-on-sound">Rule #1: Article choice depends on sound</h3><p>Some words begin with a consonant letter but have a vowel sound, or vice versa.</p><ul><li><em>It is <strong>an</strong> honour to meet the Queen.</em> (The “h” is silent.)</li><li><em>He is <strong>a</strong> United Nations representative.</em>
54 (“United” begins with a /j/ sound.)</li><li><em>She is <strong>a</strong> university student.</em></li></ul><h3 id="rule-2-articles-with-adjectives">Rule #2: Articles with adjectives</h3><p>When a noun is modified by an adjective, the article is chosen based on the <strong>adjective’s sound</strong>, not the noun.</p><ul><li><em>The <strong>Inuit</strong> people traditionally lived in <strong>a</strong> large igloo.</em></li><li><em>Last week I read <strong>an</strong> amazing book.</em></li></ul><h3 id="rule-3-uncountable-nouns">Rule #3: Uncountable nouns</h3><p>Uncountable nouns cannot be used with <strong>a</strong> or <strong>an</strong>.</p><p>Incorrect:</p><ul><li><em>Please give the dog <strong>a</strong> water.</em></li></ul><p>Correct alternatives:</p><ul><li><em>Please give the dog <strong>some</strong> water.</em></li><li><em>Please give the dog <strong>a bowl of</strong> water.</em></li></ul><h3 id="rule-4-articles-and-possessive-pronouns">Rule #4: Articles and possessive pronouns</h3><p>Articles are not used together with possessive pronouns.</p><p>Incorrect:</p><ul><li><em>Have you got <strong>the</strong> my coat?</em></li></ul><p>Correct:</p><ul><li><em>Have you got my coat?</em></li></ul><h3 id="rule-5-when-articles-are-omitted">Rule #5: When articles are omitted</h3><p>Sometimes, no article is needed:</p><ul><li><em>I like to play football.</em></li><li><em>She has breakfast at 7 a.m.</em></li></ul><h2 id="when-not-to-use-an-english-article">When Not to Use an English Article</h2><ol><li>When talking about things in general.</li><li>Before the names of sports and games.</li><li>Before most country names (except the UK, the USA, the Netherlands).</li><li>Before the names of languages.</li><li>Before meals when speaking generally.</li><li>Before noun + number combinations.</li></ol><h2 id="articles-with-countable-and-uncountable-nouns">Articles with Countable and Uncountable Nouns</h2><p>To choose the correct article, you must decide whether a noun is <strong>countable</strong> or <strong>uncountable</strong>.</p><p><strong>Countable nouns:</strong></p><p><em>an apple, a school, one picture, two pictures, three men</em></p><p><strong>Uncountable nouns:</strong></p><p><em>information, water, understanding, wood, cheese</em></p><h2 id="how-to-use-articles-a-an-the-video">How to Use Articles (A / An / The) | Video</h2><div class="embed-container"><iframe loading="lazy" src="https://www.youtube.com/embed/TulY-6VR2sE" frameborder="0" allowfullscreen="allowfullscreen"><br /> </iframe></div><p>Articles are a fundamental part of English grammar. Their correct use depends on the noun they modify and, in many cases, on the sound that follows the article. With practice, these rules become natural and easy to apply.</p></div><section id="esl-panel-test" class="esl-tab-panel esl-mini-quiz-section"
55aria-label="Practice quiz — knowledge check"
56data-test-id="894"><div class="esl-test-wrap" id="esl-mini-wrap-894"><div class="esl-test-header"><div class="esl-test-header__meta"> <span class="esl-badge-diff">mixed</span> <span class="esl-badge-type">Knowledge Check · 5 questions</span></div><h2 style="margin:0 0 4px;font-size:clamp(16px,2.5vw,20px);font-weight:700;color:#fff;line-height:1.3"> Articles Practice Quiz (A1-B2)</h2></div><div class="esl-test-progress-bar"><div class="esl-progress-track"><div class="esl-progress-fill" id="esl-mini-fill-894"
57style="width:20%"></div></div> <span class="esl-progress-label" id="esl-mini-label-894">1 / 5</span></div><div class="esl-test-body"><section class="esl-question-block esl-active"
58id="mini-question-894-1"
59aria-label="Question 1 of 5"
60data-qid="9367"
61data-type="mcq"
62><div class="esl-question-num">Q1</div><h3 class="esl-question-heading">Question 1: I have ___ cat.</h3><fieldset><legend class="esl-sr-only">Question 1 options</legend><div class="esl-options" role="radiogroup"><div class="esl-option"
63data-aid="37403"
64data-correct="1"
65> <input type="radio" id="mini-q9367-opt0" name="mini-q9367" value="37403" class="esl-sr-only"> <label for="mini-q9367-opt0"> <span class="esl-option-letter">A</span> <span class="esl-option-text">a</span> </label></div><div class="esl-option"
66data-aid="37404"
67data-correct="0"
68> <input type="radio" id="mini-q9367-opt1" name="mini-q9367" value="37404" class="esl-sr-only"> <label for="mini-q9367-opt1"> <span class="esl-option-letter">B</span> <span class="esl-option-text">the</span> </label></div><div class="esl-option"
69data-aid="37405"
70data-correct="0"
71> <input type="radio" id="mini-q9367-opt2" name="mini-q9367" value="37405" class="esl-sr-only"> <label for="mini-q9367-opt2"> <span class="esl-option-letter">C</span> <span class="esl-option-text">an</span> </label></div><div class="esl-option"
72data-aid="37406"
73data-correct="0"
74> <input type="radio" id="mini-q9367-opt3" name="mini-q9367" value="37406" class="esl-sr-only"> <label for="mini-q9367-opt3"> <span class="esl-option-letter">D</span> <span class="esl-option-text">some</span> </label></div></div><div class="esl-check-row"> <button class="esl-check-btn" data-qid="9367" type="button"> Check answer </button></div><div class="esl-question-feedback" id="esl-mini-fb-9367"
75aria-live="polite" role="status"> <span class="esl-fb-icon"></span> <span class="esl-fb-text"></span><div class="esl-fb-exp">&quot;a&quot; is correct because we use the indefinite article &quot;a&quot; before a singular countable noun starting with a consonant sound when mentioning it for the first time. &quot;An&quot; is used before vowel sounds, &quot;the&quot; implies a specific cat already known, and &quot;some&quot; is used with plural or uncountable nouns.</div></div><div class="esl-report-wrap" style="margin-top:12px;border-top:1px solid #f1f5f9;padding-top:10px"> <button type="button" class="esl-report-toggle-btn" style="background:none;border:none;color:#64748b;font-size:12px;cursor:pointer;padding:4px 0;display:flex;align-items:center;gap:6px;font-family:inherit;text-decoration:none"
76data-qid="9367"
77data-testid="894"
78data-testtype="post_lesson"
79data-testlevel="mixed"> <span style="font-size:14px">🚩</span> Found a problem with this question? </button><div class="esl-report-form-wrap" style="display:none"><div style="font-size:13px;font-weight:700;color:#0f172a;margin-bottom:10px">Report an issue with this question</div> <label style="font-size:12px;font-weight:700;color:#475569;text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:4px">Issue type <span style="color:#dc2626">*</span></label> <select class="esl-rep-type" style="width:100%;padding:8px 10px;border:1.5px solid #e2e8f0;border-radius:8px;font-size:13px;margin-bottom:10px;background:#fff;font-family:inherit"><option value="">— Select issue type —</option><option value="wrong_answer">Wrong answer marked as correct</option><option value="multiple_correct">More than one correct answer</option><option value="unclear">Question is unclear or ambiguous</option><option value="grammar_spelling">Grammar / spelling issue</option><option value="wrong_explanation">Explanation is incorrect</option><option value="technical">Technical / display issue</option><option value="other">Other</option> </select> <label style="font-size:12px;font-weight:700;color:#475569;text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:4px">Description <small style="font-weight:400">(optional)</small></label><textarea class="esl-rep-desc" placeholder="Briefly describe the problem…" rows="2"
80                                  style="width:100%;padding:8px 10px;border:1.5px solid #e2e8f0;border-radius:8px;font-size:13px;font-family:inherit;resize:vertical;box-sizing:border-box;margin-bottom:10px"></textarea><label style="font-size:12px;font-weight:700;color:#475569;text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:4px">Email <small style="font-weight:400">
80(optional, for reply)</small></label> <input type="email" class="esl-rep-email" placeholder="[email protected]"
81style="width:100%;padding:8px 10px;border:1.5px solid #e2e8f0;border-radius:8px;font-size:13px;box-sizing:border-box;margin-bottom:12px;font-family:inherit"><div style="display:flex;gap:8px;align-items:center"> <button type="button" class="esl-rep-submit-btn"
82style="padding:9px 18px;background:linear-gradient(135deg,#0f7ea4,#27a9cb);color:#fff;border:none;border-radius:8px;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit"> Submit Report </button> <button type="button" class="esl-rep-cancel-btn"
83style="padding:9px 14px;background:#f1f5f9;color:#475569;border:none;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer;font-family:inherit"> Cancel </button></div><div class="esl-rep-msg" style="margin-top:8px;font-size:13px"></div></div></div></fieldset></section><section class="esl-question-block"
84id="mini-question-894-2"
85aria-label="Question 2 of 5"
86data-qid="9371"
87data-type="true_false"
88><div class="esl-question-num">Q2</div><h3 class="esl-question-heading">Question 2: We use &quot;an&quot; before the word &quot;university&quot; because it starts with the letter &quot;u.&quot;</h3><fieldset><legend class="esl-sr-only">Question 2 options</legend><div class="esl-options" role="radiogroup"><div class="esl-option"
89data-aid="37416"
90data-correct="0"
91> <input type="radio" id="mini-q9371-opt0" name="mini-q9371" value="37416" class="esl-sr-only"> <label for="mini-q9371-opt0"> <span class="esl-option-letter">A</span> <span class="esl-option-text">True</span> </label></div><div class="esl-option"
92data-aid="37417"
93data-correct="1"
94> <input type="radio" id="mini-q9371-opt1" name="mini-q9371" value="37417" class="esl-sr-only"> <label for="mini-q9371-opt1"> <span class="esl-option-letter">B</span> <span class="esl-option-text">False</span> </label></div></div><div class="esl-check-row"> <button class="esl-check-btn" data-qid="9371" type="button"> Check answer </button></div><div class="esl-question-feedback" id="esl-mini-fb-9371"
95aria-live="polite" role="status"> <span class="esl-fb-icon"></span> <span class="esl-fb-text"></span><div class="esl-fb-exp">False because the choice between &quot;a&quot; and &quot;an&quot; depends on the sound, not the letter. &quot;University&quot; begins with the consonant sound /juː/, so we say &quot;a university,&quot; not &quot;an university.&quot;</div></div><div class="esl-report-wrap" style="margin-top:12px;border-top:1px solid #f1f5f9;padding-top:10px"> <button type="button" class="esl-report-toggle-btn" style="background:none;border:none;color:#64748b;font-size:12px;cursor:pointer;padding:4px 0;display:flex;align-items:center;gap:6px;font-family:inherit;text-decoration:none"
96data-qid="9371"
97data-testid="894"
98data-testtype="post_lesson"
99data-testlevel="mixed"> <span style="font-size:14px">🚩</span> Found a problem with this question? </button><div class="esl-report-form-wrap" style="display:none"><div style="font-size:13px;font-weight:700;color:#0f172a;margin-bottom:10px">Report an issue with this question</div> <label style="font-size:12px;font-weight:700;color:#475569;text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:4px">Issue type <span style="color:#dc2626">*</span></label> <select class="esl-rep-type" style="width:100%;padding:8px 10px;border:1.5px solid #e2e8f0;border-radius:8px;font-size:13px;margin-bottom:10px;background:#fff;font-family:inherit"><option value="">— Select issue type —</option><option value="wrong_answer">Wrong answer marked as correct</option><option value="multiple_correct">More than one correct answer</option><option value="unclear">Question is unclear or ambiguous</option><option value="grammar_spelling">Grammar / spelling issue</option><option value="wrong_explanation">Explanation is incorrect</option><option value="technical">Technical / display issue</option><option value="other">Other</option> </select> <label style="font-size:12px;font-weight:700;color:#475569;text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:4px">Description <small style="font-weight:400">(optional)</small></label><textarea class="esl-rep-desc" placeholder="Briefly describe the problem…" rows="2"
100                                  style="width:100%;padding:8px 10px;border:1.5px solid #e2e8f0;border-radius:8px;font-size:13px;font-family:inherit;resize:vertical;box-sizing:border-box;margin-bottom:10px"></textarea><label style="font-size:12px;font-weight:700;color:#475569;text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:4px">Email <small style="font-weight:400">
100(optional, for reply)</small></label> <input type="email" class="esl-rep-email" placeholder="[email protected]"
101style="width:100%;padding:8px 10px;border:1.5px solid #e2e8f0;border-radius:8px;font-size:13px;box-sizing:border-box;margin-bottom:12px;font-family:inherit"><div style="display:flex;gap:8px;align-items:center"> <button type="button" class="esl-rep-submit-btn"
102style="padding:9px 18px;background:linear-gradient(135deg,#0f7ea4,#27a9cb);color:#fff;border:none;border-radius:8px;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit"> Submit Report </button> <button type="button" class="esl-rep-cancel-btn"
103style="padding:9px 14px;background:#f1f5f9;color:#475569;border:none;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer;font-family:inherit"> Cancel </button></div><div class="esl-rep-msg" style="margin-top:8px;font-size:13px"></div></div></div></fieldset></section><section class="esl-question-block"
104id="mini-question-894-3"
105aria-label="Question 3 of 5"
106data-qid="9375"
107data-type="ordering"
108><div class="esl-question-num">Q3</div><h3 class="esl-question-heading">Question 3: Put these words in the correct order to form a sentence:</h3><fieldset><legend class="esl-sr-only">Question 3 options</legend><ul class="esl-order-list" role="group" id="order-9375"><li class="esl-order-item" data-aid="37432" data-pos="3" draggable="true"> <span class="esl-order-handle"></span> <span class="esl-order-text">the piano</span> <span class="esl-order-num"></span> <span class="esl-order-arrows"><button type="button" class="esl-order-arrow esl-order-up" aria-label="Move up">▲</button><button type="button" class="esl-order-arrow esl-order-down" aria-label="Move down">▼</button></span></li><li class="esl-order-item" data-aid="37433" data-pos="4" draggable="true"> <span class="esl-order-handle"></span> <span class="esl-order-text">beautifully</span> <span class="esl-order-num"></span> <span class="esl-order-arrows"><button type="button" class="esl-order-arrow esl-order-up" aria-label="Move up">▲</button><button type="button" class="esl-order-arrow esl-order-down" aria-label="Move down">▼</button></span></li><li class="esl-order-item" data-aid="37430" data-pos="1" draggable="true"> <span class="esl-order-handle"></span> <span class="esl-order-text">She</span> <span class="esl-order-num"></span> <span class="esl-order-arrows"><button type="button" class="esl-order-arrow esl-order-up" aria-label="Move up">▲</button><button type="button" class="esl-order-arrow esl-order-down" aria-label="Move down">▼</button></span></li><li class="esl-order-item" data-aid="37431" data-pos="2" draggable="true"> <span class="esl-order-handle"></span> <span class="esl-order-text">plays</span> <span class="esl-order-num"></span> <span class="esl-order-arrows"><button type="button" class="esl-order-arrow esl-order-up" aria-label="Move up">▲</button><button type="button" class="esl-order-arrow esl-order-down" aria-label="Move down">▼</button></span></li></ul><p class="esl-q-hint">Drag items or use arrows to arrange them in the correct order.</p><div class="esl-check-row"> <button class="esl-check-btn" data-qid="9375" type="button"> Check answer </button></div><div class="esl-question-feedback" id="esl-mini-fb-9375"
109aria-live="polite" role="status"> <span class="esl-fb-icon"></span> <span class="esl-fb-text"></span><div class="esl-fb-exp">The correct order is &quot;She plays the piano beautifully&quot; because musical instruments require the definite article &quot;the&quot; (e.g., play the piano, play the guitar).</div></div><div class="esl-report-wrap" style="margin-top:12px;border-top:1px solid #f1f5f9;padding-top:10px"> <button type="button" class="esl-report-toggle-btn" style="background:none;border:none;color:#64748b;font-size:12px;cursor:pointer;padding:4px 0;display:flex;align-items:center;gap:6px;font-family:inherit;text-decoration:none"
110data-qid="9375"
111data-testid="894"
112data-testtype="post_lesson"
113data-testlevel="mixed"> <span style="font-size:14px">🚩</span> Found a problem with this question? </button><div class="esl-report-form-wrap" style="display:none"><div style="font-size:13px;font-weight:700;color:#0f172a;margin-bottom:10px">Report an issue with this question</div> <label style="font-size:12px;font-weight:700;color:#475569;text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:4px">Issue type <span style="color:#dc2626">*</span></label> <select class="esl-rep-type" style="width:100%;padding:8px 10px;border:1.5px solid #e2e8f0;border-radius:8px;font-size:13px;margin-bottom:10px;background:#fff;font-family:inherit"><option value="">— Select issue type —</option><option value="wrong_answer">Wrong answer marked as correct</option><option value="multiple_correct">More than one correct answer</option><option value="unclear">Question is unclear or ambiguous</option><option value="grammar_spelling">Grammar / spelling issue</option><option value="wrong_explanation">Explanation is incorrect</option><option value="technical">Technical / display issue</option><option value="other">Other</option> </select> <label style="font-size:12px;font-weight:700;color:#475569;text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:4px">Description <small style="font-weight:400">(optional)</small></label><textarea class="esl-rep-desc" placeholder="Briefly describe the problem…" rows="2"
114                                  style="width:100%;padding:8px 10px;border:1.5px solid #e2e8f0;border-radius:8px;font-size:13px;font-family:inherit;resize:vertical;box-sizing:border-box;margin-bottom:10px"></textarea><label style="font-size:12px;font-weight:700;color:#475569;text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:4px">Email <small style="font-weight:400">
114(optional, for reply)</small></label> <input type="email" class="esl-rep-email" placeholder="[email protected]"
115style="width:100%;padding:8px 10px;border:1.5px solid #e2e8f0;border-radius:8px;font-size:13px;box-sizing:border-box;margin-bottom:12px;font-family:inherit"><div style="display:flex;gap:8px;align-items:center"> <button type="button" class="esl-rep-submit-btn"
116style="padding:9px 18px;background:linear-gradient(135deg,#0f7ea4,#27a9cb);color:#fff;border:none;border-radius:8px;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit"> Submit Report </button> <button type="button" class="esl-rep-cancel-btn"
117style="padding:9px 14px;background:#f1f5f9;color:#475569;border:none;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer;font-family:inherit"> Cancel </button></div><div class="esl-rep-msg" style="margin-top:8px;font-size:13px"></div></div></div></fieldset></section><section class="esl-question-block"
118id="mini-question-894-4"
119aria-label="Question 4 of 5"
120data-qid="9379"
121data-type="matching"
122><div class="esl-question-num">Q4</div><h3 class="esl-question-heading">Question 4: Match each phrase to the correct article rule.</h3><fieldset><legend class="esl-sr-only">Question 4 options</legend><div class="esl-match-wrap" role="group" id="match-9379"><div class="esl-match-col esl-match-col--left"></div><div class="esl-match-col esl-match-col--arrows" id="arrows-9379"></div><div class="esl-match-col esl-match-col--right"></div></div><p class="esl-q-hint">Select an item on the left, then tap its match on the right.</p> <input type="hidden" class="esl-match-answer" data-qid="9379"><div class="esl-check-row"> <button class="esl-check-btn" data-qid="9379" type="button"> Check answer </button></div><div class="esl-question-feedback" id="esl-mini-fb-9379"
123aria-live="polite" role="status"> <span class="esl-fb-icon"></span> <span class="esl-fb-text"></span><div class="esl-fb-exp">{&quot;&quot;content&quot;&quot;: &quot;&quot;Zero article with languages&quot;&quot;</div></div><div class="esl-report-wrap" style="margin-top:12px;border-top:1px solid #f1f5f9;padding-top:10px"> <button type="button" class="esl-report-toggle-btn" style="background:none;border:none;color:#64748b;font-size:12px;cursor:pointer;padding:4px 0;display:flex;align-items:center;gap:6px;font-family:inherit;text-decoration:none"
124data-qid="9379"
125data-testid="894"
126data-testtype="post_lesson"
127data-testlevel="mixed"> <span style="font-size:14px">🚩</span> Found a problem with this question? </button><div class="esl-report-form-wrap" style="display:none"><div style="font-size:13px;font-weight:700;color:#0f172a;margin-bottom:10px">Report an issue with this question</div> <label style="font-size:12px;font-weight:700;color:#475569;text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:4px">Issue type <span style="color:#dc2626">*</span></label> <select class="esl-rep-type" style="width:100%;padding:8px 10px;border:1.5px solid #e2e8f0;border-radius:8px;font-size:13px;margin-bottom:10px;background:#fff;font-family:inherit"><option value="">— Select issue type —</option><option value="wrong_answer">Wrong answer marked as correct</option><option value="multiple_correct">More than one correct answer</option><option value="unclear">Question is unclear or ambiguous</option><option value="grammar_spelling">Grammar / spelling issue</option><option value="wrong_explanation">Explanation is incorrect</option><option value="technical">Technical / display issue</option><option value="other">Other</option> </select> <label style="font-size:12px;font-weight:700;color:#475569;text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:4px">Description <small style="font-weight:400">(optional)</small></label><textarea class="esl-rep-desc" placeholder="Briefly describe the problem…" rows="2"
128                                  style="width:100%;padding:8px 10px;border:1.5px solid #e2e8f0;border-radius:8px;font-size:13px;font-family:inherit;resize:vertical;box-sizing:border-box;margin-bottom:10px"></textarea><label style="font-size:12px;font-weight:700;color:#475569;text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:4px">Email <small style="font-weight:400">
128(optional, for reply)</small></label> <input type="email" class="esl-rep-email" placeholder="[email protected]"
129style="width:100%;padding:8px 10px;border:1.5px solid #e2e8f0;border-radius:8px;font-size:13px;box-sizing:border-box;margin-bottom:12px;font-family:inherit"><div style="display:flex;gap:8px;align-items:center"> <button type="button" class="esl-rep-submit-btn"
130style="padding:9px 18px;background:linear-gradient(135deg,#0f7ea4,#27a9cb);color:#fff;border:none;border-radius:8px;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit"> Submit Report </button> <button type="button" class="esl-rep-cancel-btn"
131style="padding:9px 14px;background:#f1f5f9;color:#475569;border:none;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer;font-family:inherit"> Cancel </button></div><div class="esl-rep-msg" style="margin-top:8px;font-size:13px"></div></div></div></fieldset></section><section class="esl-question-block"
132id="mini-question-894-5"
133aria-label="Question 5 of 5"
134data-qid="9383"
135data-type="mcq"
136><div class="esl-question-num">Q5</div><h3 class="esl-question-heading">Question 5: She gave me ___ useful piece of advice about my career.</h3><fieldset><legend class="esl-sr-only">Question 5 options</legend><div class="esl-options" role="radiogroup"><div class="esl-option"
137data-aid="37453"
138data-correct="1"
139> <input type="radio" id="mini-q9383-opt0" name="mini-q9383" value="37453" class="esl-sr-only"> <label for="mini-q9383-opt0"> <span class="esl-option-letter">A</span> <span class="esl-option-text">a</span> </label></div><div class="esl-option"
140data-aid="37454"
141data-correct="0"
142> <input type="radio" id="mini-q9383-opt1" name="mini-q9383" value="37454" class="esl-sr-only"> <label for="mini-q9383-opt1"> <span class="esl-option-letter">B</span> <span class="esl-option-text">an</span> </label></div><div class="esl-option"
143data-aid="37455"
144data-correct="0"
145> <input type="radio" id="mini-q9383-opt2" name="mini-q9383" value="37455" class="esl-sr-only"> <label for="mini-q9383-opt2"> <span class="esl-option-letter">C</span> <span class="esl-option-text">no article</span> </label></div><div class="esl-option"
146data-aid="37456"
147data-correct="0"
148> <input type="radio" id="mini-q9383-opt3" name="mini-q9383" value="37456" class="esl-sr-only"> <label for="mini-q9383-opt3"> <span class="esl-option-letter">D</span> <span class="esl-option-text">the</span> </label></div></div><div class="esl-check-row"> <button class="esl-check-btn" data-qid="9383" type="button"> Check answer </button></div><div class="esl-question-feedback" id="esl-mini-fb-9383"
149aria-live="polite" role="status"> <span class="esl-fb-icon"></span> <span class="esl-fb-text"></span><div class="esl-fb-exp">&quot;a&quot; is correct because &quot;useful&quot; begins with the consonant sound /juː/, not a vowel sound, so we use &quot;a&quot; rather than &quot;an.&quot; &quot;The&quot; would require prior mention or shared knowledge of this advice. &quot;No article&quot; is ungrammatical before a singular countable noun like &quot;piece.&quot;</div></div><div class="esl-report-wrap" style="margin-top:12px;border-top:1px solid #f1f5f9;padding-top:10px"> <button type="button" class="esl-report-toggle-btn" style="background:none;border:none;color:#64748b;font-size:12px;cursor:pointer;padding:4px 0;display:flex;align-items:center;gap:6px;font-family:inherit;text-decoration:none"
150data-qid="9383"
151data-testid="894"
152data-testtype="post_lesson"
153data-testlevel="mixed"> <span style="font-size:14px">🚩</span> Found a problem with this question? </button><div class="esl-report-form-wrap" style="display:none"><div style="font-size:13px;font-weight:700;color:#0f172a;margin-bottom:10px">Report an issue with this question</div> <label style="font-size:12px;font-weight:700;color:#475569;text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:4px">Issue type <span style="color:#dc2626">*</span></label> <select class="esl-rep-type" style="width:100%;padding:8px 10px;border:1.5px solid #e2e8f0;border-radius:8px;font-size:13px;margin-bottom:10px;background:#fff;font-family:inherit"><option value="">— Select issue type —</option><option value="wrong_answer">Wrong answer marked as correct</option><option value="multiple_correct">More than one correct answer</option><option value="unclear">Question is unclear or ambiguous</option><option value="grammar_spelling">Grammar / spelling issue</option><option value="wrong_explanation">Explanation is incorrect</option><option value="technical">Technical / display issue</option><option value="other">Other</option> </select> <label style="font-size:12px;font-weight:700;color:#475569;text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:4px">Description <small style="font-weight:400">(optional)</small></label><textarea class="esl-rep-desc" placeholder="Briefly describe the problem…" rows="2"
154                                  style="width:100%;padding:8px 10px;border:1.5px solid #e2e8f0;border-radius:8px;font-size:13px;font-family:inherit;resize:vertical;box-sizing:border-box;margin-bottom:10px"></textarea><label style="font-size:12px;font-weight:700;color:#475569;text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:4px">Email <small style="font-weight:400">
154(optional, for reply)</small></label> <input type="email" class="esl-rep-email" placeholder="[email protected]"
155style="width:100%;padding:8px 10px;border:1.5px solid #e2e8f0;border-radius:8px;font-size:13px;box-sizing:border-box;margin-bottom:12px;font-family:inherit"><div style="display:flex;gap:8px;align-items:center"> <button type="button" class="esl-rep-submit-btn"
156style="padding:9px 18px;background:linear-gradient(135deg,#0f7ea4,#27a9cb);color:#fff;border:none;border-radius:8px;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit"> Submit Report </button> <button type="button" class="esl-rep-cancel-btn"
157style="padding:9px 14px;background:#f1f5f9;color:#475569;border:none;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer;font-family:inherit"> Cancel </button></div><div class="esl-rep-msg" style="margin-top:8px;font-size:13px"></div></div></div></fieldset></section></div><div class="esl-test-nav"> <button class="esl-btn esl-btn-ghost" id="esl-mini-prev-894"
158type="button" style="visibility:hidden">← Back</button> <button class="esl-btn esl-btn-primary" id="esl-mini-next-894"
159type="button">Next →</button> <button class="esl-btn esl-btn-submit" id="esl-mini-submit-894"
160type="button" style="display:none"
161data-test-id="894"
162data-logged-in="0"> Submit ✓ </button></div></div></section> 
162<script id="esl-mini-driver-894">(function(){
163      var REST     = 'https://7esl.com/wp-json/esl/v1/';
164      var NONCE    = '06d84125a1';
165      var TESTID   = 894;
166      var TOTAL    = 5;
167      var FULLCOUNT= 20;
168      var FULLURL  = 'https://7esl.com/practice/grammar/articles-test/';
169      var LOGGED   = 0 === 1;
170      var PURL     = 'https://7esl.com/profile/';
171      /* v1.9.29 (C4) — chuyên mục của chính bài này, dùng khi không có việc
172         tiếp theo riêng cho người đang xem. Xem khối chú thích ở đầu file. */
173      var CATNAME  = '';
174      var CATURL   = '';
175      var MINI_XP_MAX   = 5;   // fixed max = 5 XP
176      var FULL_TEST_XP  = 22;   // full test DB xp_reward
177      var PID      = 894;
178      /* v2 (design v4): the shared result block of tests.js (same as the practice test page). */
179      var V2       = true;
180      var LVL      = 'mixed';
181
182      var current  = 0, answers = {}, checked = 0, correct_count = 0;
183      var started  = Date.now();
184
185      var panel   = document.getElementById('esl-panel-test');
186      var wrap    = document.getElementById('esl-mini-wrap-'+PID);
187      var btnPrev = document.getElementById('esl-mini-prev-'+PID);
188      var btnNext = document.getElementById('esl-mini-next-'+PID);
189      var btnSub  = document.getElementById('esl-mini-submit-'+PID);
190      var fill    = document.getElementById('esl-mini-fill-'+PID);
191      var lbl     = document.getElementById('esl-mini-label-'+PID);
192      var blocks  = Array.from(panel.querySelectorAll('.esl-question-block'));
193
194      function showBlock(n){
195        blocks.forEach(function(b,i){ b.classList.toggle('esl-active', i===n); });
196        if(fill) fill.style.width = Math.round((n+1)/TOTAL*100)+'%';
197        if(lbl)  lbl.textContent  = (n+1)+' / '+TOTAL;
198        btnPrev.style.visibility = n===0 ? 'hidden' : 'visible';
199        btnNext.style.display    = n===TOTAL-1 ? 'none' : '';
200        if(n===TOTAL-1 && checked>0) btnSub.style.display='';
201      }
202
203      btnPrev.addEventListener('click', function(){ if(current>0){ current--; showBlock(current); }});
204      btnNext.addEventListener('click', function(){
205        if(current<TOTAL-1){ current++; showBlock(current);
206          if(current===TOTAL-1 && checked>0) btnSub.style.display='';
207        }
208      });
209      btnSub.addEventListener('click', doSubmit);
210
211      /* Option click */
212      panel.addEventListener('click', function(e){
213        var opt = e.target.closest('.esl-option');
214        if(opt){
215          var block = opt.closest('.esl-question-block');
216          if(!block || block.classList.contains('esl-checked')) return;
217          block.querySelectorAll('.esl-option').forEach(function(o){
218            o.classList.remove('esl-selected');
219            var r = o.querySelector('input[type="radio"]'); if(r) r.checked = false;
220          });
221          opt.classList.add('esl-selected');
222          var radio = opt.querySelector('input[type="radio"]'); if(radio) radio.checked = true;
223          answers[block.dataset.qid] = opt.dataset.aid;
224          return;
225        }
226
227        /* ── Matching ── */
228        var matchItem = e.target.closest('.esl-match-item');
229        if(matchItem){
230          var block = matchItem.closest('.esl-question-block');
231          if(!block || block.classList.contains('esl-checked')) return;
232          var side = matchItem.getAttribute('data-side');
233          var wrap = block.querySelector('.esl-match-wrap');
234          if(side === 'left'){
235            wrap.querySelectorAll('.esl-match-item[data-side="left"]').forEach(function(i){ i.classList.remove('esl-match-active'); });
236            matchItem.classList.toggle('esl-match-active', !matchItem.classList.contains('esl-match-active'));
237          } else {
238            var selLeft = wrap.querySelector('.esl-match-item[data-side="left"].esl-match-active');
239            if(!selLeft) return;
240            // Remove stale pairings
241            wrap.querySelectorAll('.esl-match-item[data-side="left"]').forEach(function(l){
242              if(l.getAttribute('data-matched') === matchItem.getAttribute('data-aid')) l.removeAttribute('data-matched');
243            });
244            selLeft.setAttribute('data-matched', matchItem.getAttribute('data-aid'));
245            selLeft.classList.remove('esl-match-active');
246            // Sync paired visual
247            wrap.querySelectorAll('.esl-match-item[data-side="left"]').forEach(function(l){
248              l.classList.toggle('esl-match-paired', !!l.getAttribute('data-matched'));
249            });
250            var pairedRids = [];
251            wrap.querySelectorAll('.esl-match-item[data-side="left"]').forEach(function(l){
252              if(l.getAttribute('data-matched')) pairedRids.push(l.getAttribute('data-matched'));
253            });
254            wrap.querySelectorAll('.esl-match-item[data-side="right"]').forEach(function(r){
255              r.classList.toggle('esl-match-paired', pairedRids.indexOf(r.getAttribute('data-aid')) !== -1);
256            });
257            // Build answer map {leftAid: rightAid}
258            var ansMap = {};
259            wrap.querySelectorAll('.esl-match-item[data-side="left"]').forEach(function(l){
260              if(l.getAttribute('data-matched')) ansMap[l.getAttribute('data-aid')] = l.getAttribute('data-matched');
261            });
262            answers[block.dataset.qid] = ansMap;
263          }
264          return;
265        }
266
267        /* ── Sentence building ── */
268        var chip = e.target.closest('.esl-word-chip');
269        if(chip){
270          var block = chip.closest('.esl-question-block');
271          if(!block || block.classList.contains('esl-checked')) return;
272          var sbAns  = block.querySelector('.esl-sentence-answer');
273          var sbBank = block.querySelector('.esl-sentence-bank');
274          if(chip.classList.contains('esl-word-in-answer')){
275            // Return to bank
276            chip.remove();
277            var orig = sbBank.querySelector('[data-aid="'+chip.getAttribute('data-aid')+'"].esl-word-used');
278            if(!orig) orig = sbBank.querySelector('[data-aid="'+chip.getAttribute('data-aid')+'"]');
279            if(orig) orig.style.opacity=''; orig && (orig.style.pointerEvents='');
280            if(!sbAns.querySelector('.esl-word-chip')){
281              var ph = document.createElement('span');
282              ph.className = 'esl-sentence-placeholder';
283              ph.textContent = 'Tap words below to build the sentence';
284              sbAns.appendChild(ph);
285            }
286          } else {
287            // Add to answer
288            if(chip.style.opacity === '0.3' || chip.style.opacity === '.3') return;
289            chip.style.opacity = '0.3';
290            chip.style.pointerEvents = 'none';
291            var ansChip = document.createElement('span');
292            ansChip.className = 'esl-word-chip esl-word-in-answer';
293            ansChip.setAttribute('data-aid', chip.getAttribute('data-aid'));
294            ansChip.textContent = chip.textContent;
295            // Styled via CSS class esl-word-in-answer
296            var ph = sbAns.querySelector('.esl-sentence-placeholder');
297            if(ph) ph.remove();
298            sbAns.appendChild(ansChip);
299            sbAns.style.borderColor = '#27a9cb';
300            sbAns.style.background = 'rgba(39,169,203,.04)';
301          }
302          answers[block.dataset.qid] = Array.from(sbAns.querySelectorAll('.esl-word-chip')).map(function(c){ return c.getAttribute('data-aid'); });
303          return;
304        }
305
306        var cb = e.target.closest('.esl-check-btn');
307        if(cb){ doCheck(cb); return; }
308
309        /* ── Bug Report ── */
310        var repToggle = e.target.closest('.esl-report-toggle-btn');
311        if (repToggle) {
312          var fw = repToggle.nextElementSibling;
313          if (fw && fw.classList.contains('esl-report-form-wrap')) {
314            var isHidden = fw.style.display === 'none';
315            fw.style.display = isHidden ? 'block' : 'none';
316            if (isHidden) { var s = fw.querySelector('.esl-rep-type'); if(s) s.focus(); }
317          }
318          return;
319        }
320        var repCancel = e.target.closest('.esl-rep-cancel-btn');
321        if (repCancel) {
322          var fw = repCancel.closest('.esl-report-form-wrap');
323          if (fw) fw.style.display = 'none';
324          return;
325        }
326        var repSubmit = e.target.closest('.esl-rep-submit-btn');
327        if (repSubmit) {
328          var fw    = repSubmit.closest('.esl-report-form-wrap');
329          var repWrap = repSubmit.closest('.esl-report-wrap');
330          var tog   = repWrap ? repWrap.querySelector('.esl-report-toggle-btn') : null;
331          var qid2  = tog ? (tog.getAttribute('data-qid') || '') : '';
332          var ttype2= tog ? (tog.getAttribute('data-testtype') || '') : '';
333          var tlvl2 = tog ? (tog.getAttribute('data-testlevel') || '') : '';
334          var typeEl2  = fw.querySelector('.esl-rep-type');
335          var descEl2  = fw.querySelector('.esl-rep-desc');
336          var emailEl2 = fw.querySelector('.esl-rep-email');
337          var msgEl2   = fw.querySelector('.esl-rep-msg');
338          if (!typeEl2.value) {
339            msgEl2.innerHTML = '<span style="color:#dc2626">\u26A0\uFE0F Please select an issue type.</span>';
340            typeEl2.style.borderColor = '#dc2626'; return;
341          }
342          typeEl2.style.borderColor = '#e2e8f0';
343          var userAns2 = answers[qid2] !== undefined ? JSON.stringify(answers[qid2]) : '';
344          repSubmit.disabled = true; repSubmit.textContent = 'Sending\u2026';
345          msgEl2.innerHTML = '';
346          fetch(REST + 'questions/' + qid2 + '/report', {
347            method: 'POST',
348            headers: { 'Content-Type': 'application/json', 'X-WP-Nonce': NONCE },
349            credentials: 'include',
350            body: JSON.stringify({
351              report_type: typeEl2.value, description: descEl2.value,
352              email: emailEl2.value, user_answer: userAns2, correct_answer: '',
353              page_url: window.location.href, test_type: ttype2, test_level: tlvl2
354            })
355          }).then(function(r){ return r.json(); }).then(function(j){
356            if (j.success) {
357              msgEl2.innerHTML = '<span style="color:#16a34a">\u2713 Thanks! We\'ll review this question soon.</span>';
358              repSubmit.textContent = 'Sent \u2713'; repSubmit.style.background = '#16a34a';
359              typeEl2.value=''; descEl2.value=''; emailEl2.value='';
360              setTimeout(function(){ fw.style.display='none'; }, 2800);
361            } else {
362              msgEl2.innerHTML = '<span style="color:#dc2626">\u26A0\uFE0F '+(j.message||'Failed.')+'</span>';
363              repSubmit.disabled=false; repSubmit.textContent='Submit Report';
364            }
365          }).catch(function(){
366            msgEl2.innerHTML = '<span style="color:#dc2626">\u26A0\uFE0F Network error.</span>';
367            repSubmit.disabled=false; repSubmit.textContent='Submit Report';
368          });
369          return;
370        }
371      });
372
373      /* ── Ordering drag-drop ── */
374      panel.addEventListener('dragstart', function(e){
375        var item = e.target.closest('.esl-order-item');
376        if(!item) return;
377        var block = item.closest('.esl-question-block');
378        if(block && block.classList.contains('esl-checked')) { e.preventDefault(); return; }
379        e.dataTransfer.effectAllowed = 'move';
380        e.dataTransfer.setData('text/plain', item.getAttribute('data-aid'));
381        setTimeout(function(){ item.classList.add('esl-order-dragging'); }, 0);
382      });
383      panel.addEventListener('dragend', function(e){
384        var item = e.target.closest('.esl-order-item');
385        if(item) item.classList.remove('esl-order-dragging');
386        panel.querySelectorAll('.esl-order-item').forEach(function(i){ i.classList.remove('esl-order-over'); });
387      });
388      panel.addEventListener('dragover', function(e){
389        var item = e.target.closest('.esl-order-item');
390        if(!item) return;
391        e.preventDefault();
392        panel.querySelectorAll('.esl-order-item').forEach(function(i){ i.classList.remove('esl-order-over'); });
393        item.classList.add('esl-order-over');
394      });
395      panel.addEventListener('drop', function(e){
396        var target = e.target.closest('.esl-order-item');
397        if(!target) return;
398        e.preventDefault();
399        var fromId = e.dataTransfer.getData('text/plain');
400        var list   = target.closest('.esl-order-list');
401        var fromEl = list ? list.querySelector('[data-aid="'+fromId+'"]') : null;
402        if(!fromEl || fromEl === target) return;
403        var items = Array.from(list.children);
404        var fi = items.indexOf(fromEl), ti = items.indexOf(target);
405        list.insertBefore(fromEl, fi < ti ? target.nextSibling : target);
406        var block = list.closest('.esl-question-block');
407        if(block) answers[block.dataset.qid] = Array.from(list.querySelectorAll('.esl-order-item')).map(function(i){ return i.getAttribute('data-aid'); });
408      });
409
410      panel.addEventListener('input', function(e){
411        if(!e.target.classList.contains('esl-fill-input')) return;
412        var block = e.target.closest('.esl-question-block');
413        if(block) answers[block.dataset.qid] = e.target.value;
414      });
415
416      /* ── Ordering arrows (touch-friendly) ── */
417      panel.addEventListener('click', function(e){
418        var arrow = e.target.closest('.esl-order-arrow');
419        if(!arrow) return;
420        var item = arrow.closest('.esl-order-item');
421        var block = item ? item.closest('.esl-question-block') : null;
422        if(!block || block.classList.contains('esl-checked')) return;
423        var list = item.closest('.esl-order-list');
424        if(!list) return;
425        var isUp = arrow.classList.contains('esl-order-up');
426        var sibling = isUp ? item.previousElementSibling : item.nextElementSibling;
427        if(!sibling) return;
428        // Animate swap
429        item.style.transition = 'transform .2s ease';
430        sibling.style.transition = 'transform .2s ease';
431        if(isUp) { list.insertBefore(item, sibling); }
432        else     { list.insertBefore(sibling, item); }
433        item.style.animation = 'esl-order-pop .25s ease';
434        setTimeout(function(){ item.style.animation = ''; }, 250);
435        answers[block.dataset.qid] = Array.from(list.querySelectorAll('.esl-order-item')).map(function(i){ return i.getAttribute('data-aid'); });
436      });
437
438      /* ── Mini confetti burst ── */
439      function miniConfetti(el){
440        var colors = ['#27a9cb','#16a34a','#f59e0b','#8b5cf6','#ef4444','#06b6d4'];
441        var rect = el.getBoundingClientRect();
442        for(var i=0;i<12;i++){
443          var p = document.createElement('div');
444          p.className = 'esl-confetti-particle';
445          p.style.left = (rect.left + rect.width/2 + (Math.random()-0.5)*60) + 'px';
446          p.style.top = (rect.top + window.scrollY - 10) + 'px';
447          p.style.background = colors[Math.floor(Math.random()*colors.length)];
448          p.style.animationDuration = (.5+Math.random()*.5)+'s';
449          p.style.animationDelay = (Math.random()*.15)+'s';
450          document.body.appendChild(p);
451          setTimeout(function(){ p.remove(); }, 1200);
452        }
453      }
454
455      panel.addEventListener('keydown', function(e){
456        if(e.key===' '||e.key==='Enter'){
457          var opt=e.target.closest('.esl-option'); if(opt){e.preventDefault();opt.click();}
458        }
459      });
460
461      function doCheck(btn){
462        var block = btn.closest('.esl-question-block');
463        if(!block||block.classList.contains('esl-checked')) return;
464        block.classList.add('esl-checked');
465        btn.disabled=true;
466        var type=block.dataset.type, qid=block.dataset.qid, isCorrect=false;
467
468        if(type==='fill_blank'){
469          var inp=block.querySelector('.esl-fill-input');
470          var val=inp?inp.value.trim().toLowerCase():'';
471          var acc=(block.dataset.correctAnswers||'').split('||').map(function(s){return s.trim().toLowerCase();});
472          isCorrect=acc.some(function(a){return a===val;});
473          if(inp){inp.disabled=true;inp.classList.add(isCorrect?'esl-correct':'esl-wrong');}
474        } else if(type==='matching'){
475          // Matching: check pairs via data-matched attributes
476          var matchWrap=block.querySelector('.esl-match-wrap');
477          if(matchWrap){
478            var pairs={},correct=0,total=0;
479            matchWrap.querySelectorAll('.esl-match-item[data-side="left"]').forEach(function(l){
480              var matched=l.getAttribute('data-matched');
481              var pg=l.getAttribute('data-pair');
482              var rightEl=matchWrap.querySelector('.esl-match-item[data-side="right"][data-pair="'+pg+'"]');
483              total++;
484              if(matched&&rightEl&&matched===rightEl.getAttribute('data-aid')){
485                correct++;l.classList.add('esl-match-correct');
486                if(rightEl)rightEl.classList.add('esl-match-correct');
487              } else {
488                l.classList.add('esl-match-wrong');
489                if(rightEl)rightEl.classList.add('esl-match-wrong');
490              }
491            });
492            isCorrect=(correct===total&&total>0);
493            // Always show correct pairs table after checking
494            if(!block.querySelector('.esl-match-answer-key')){
495              var key=document.createElement('div');
496              key.className='esl-match-answer-key';
497              var rows='<div style="font-weight:600;color:#0f172a;margin-bottom:6px">✓ Correct pairs:</div>';
498              matchWrap.querySelectorAll('.esl-match-item[data-side="left"]').forEach(function(l){
499                var pg=l.getAttribute('data-pair');
500                var rightEl=matchWrap.querySelector('.esl-match-item[data-side="right"][data-pair="'+pg+'"]');
501                var userMatchedEl=matchWrap.querySelector('.esl-match-item[data-side="right"][data-aid="'+l.getAttribute('data-matched')+'"]');
502                var isOk=l.classList.contains('esl-match-correct');
503                rows+='<div style="display:flex;align-items:center;gap:8px;padding:5px 8px;margin-bottom:4px;border-radius:6px;background:'+(isOk?'#f0fdf4':'#fff8f8')+'">'+
504                  '<span style="color:'+(isOk?'#16a34a':'#dc2626')+';font-size:15px;flex-shrink:0">'+(isOk?'✓':'✗')+'</span>'+
505                  '<span style="flex:1;color:#0f172a">'+l.textContent+'</span>'+
506                  '<span style="color:#94a3b8;flex-shrink:0">→</span>'+
507                  '<span style="flex:1;color:'+(isOk?'#16a34a':'#16a34a')+'">'+( rightEl?rightEl.textContent:'' )+'</span>'+
508                '</div>';
509                if(!isOk && userMatchedEl){
510                  rows+='<div style="font-size:11px;color:#dc2626;padding:0 8px 6px 31px">You chose: '+userMatchedEl.textContent+'</div>';
511                }
512              });
513              key.innerHTML=rows;
514              matchWrap.parentNode.insertBefore(key, matchWrap.nextSibling);
515            }
516          }
517          matchWrap&&matchWrap.querySelectorAll('.esl-match-item').forEach(function(i){i.style.pointerEvents='none';});
518        } else if(type==='ordering'){
519          var ordList=block.querySelector('.esl-order-list');
520          if(ordList){
521            var items=Array.from(ordList.querySelectorAll('.esl-order-item'));
522            // Sort by data-pos (1-based) to get correct sequence
523            var correctSeq=items.slice().sort(function(a,b){
524              return parseInt(a.getAttribute('data-pos'),10)-parseInt(b.getAttribute('data-pos'),10);
525            }).map(function(i){ return i.getAttribute('data-aid'); });
526            var userSeq=items.map(function(i){ return i.getAttribute('data-aid'); });
527            var allCorrect=userSeq.join(',')=== correctSeq.join(',');
528            items.forEach(function(item,idx){
529              item.style.pointerEvents='none';
530              var isItemOk=item.getAttribute('data-aid')===correctSeq[idx];
531              item.classList.add(isItemOk?'esl-order-correct':'esl-order-wrong');
532            });
533            isCorrect=allCorrect;
534            if(!allCorrect){
535              // Show correct order as hint below list
536              var hint=block.querySelector('.esl-order-correct-hint');
537              if(!hint){
538                hint=document.createElement('p');
539                hint.className='esl-order-correct-hint';
540                ordList.parentNode.insertBefore(hint, ordList.nextSibling);
541              }
542              hint.innerHTML='<strong>Correct order:</strong> '+correctSeq.map(function(aid){
543                var el=ordList.querySelector('[data-aid="'+aid+'"]');
544                return el?el.querySelector('.esl-order-text').textContent:'';
545              }).join(' → ');
546            }
547          }
548        } else if(type==='sentence_building'){
549          var sbAns=block.querySelector('.esl-sentence-answer');
550          if(sbAns){
551            var chips=Array.from(sbAns.querySelectorAll('.esl-word-chip'));
552            var sbBank=block.querySelector('.esl-sentence-bank');
553            var sbWrap=block.querySelector('.esl-sentence-wrap');
554            // Get all bank chips (including used) for content lookup
555            var allBankChips=sbBank?Array.from(sbBank.querySelectorAll('.esl-word-chip')):[];
556            function getTextByAid(aid){
557              for(var i=0;i<allBankChips.length;i++){
558                if(allBankChips[i].getAttribute('data-aid')===String(aid)) return allBankChips[i].textContent;
559              }
560              return '';
561            }
562            var correctOrder=(block.getAttribute('data-correct-order')||'').split(',').filter(Boolean);
563            // Compare by TEXT content (handles duplicate words like two "to")
564            var userTexts=chips.map(function(c){ return c.textContent.trim(); });
565            var correctTexts=correctOrder.map(function(aid){ return getTextByAid(aid).trim(); });
566            isCorrect = userTexts.join(' ') === correctTexts.join(' ');
567            // Lock all chips
568            chips.forEach(function(c){ c.style.pointerEvents='none'; });
569            allBankChips.forEach(function(c){ c.style.pointerEvents='none'; });
570            // Show correct sentence hint AFTER the wrap (not between answer and bank)
571            var hintTarget = sbWrap || sbAns;
572            var sbHint=block.querySelector('.esl-sb-correct-hint');
573            if(!sbHint){
574              sbHint=document.createElement('div');
575              sbHint.className='esl-sb-correct-hint';
576              hintTarget.parentNode.insertBefore(sbHint, hintTarget.nextSibling);
577            }
578            sbHint.innerHTML='<span style="font-weight:600;color:#16a34a">✓ Correct sentence:</span> <span style="color:#0f172a">'+
579              correctTexts.join(' ')+'</span>';
580          }
581        } else {
582          var sel=block.querySelector('.esl-option.esl-selected');
583          isCorrect=!!sel&&sel.dataset.correct==='1';
584          block.querySelectorAll('.esl-option').forEach(function(o){
585            if(o.dataset.correct==='1') o.classList.add('esl-correct');
586            else if(o.classList.contains('esl-selected')) o.classList.add('esl-wrong');
587            o.style.pointerEvents='none';
588          });
589        }
590
591        if(isCorrect) correct_count++;
592        checked++;
593        // Analytics: answer checked
594        window.dataLayer && window.dataLayer.push({event:'quiz_answer',test_id:894,question_index:checked,question_type:type,is_correct:isCorrect});
595        // Sound feedback
596        if(window.eslSFX){ isCorrect ? eslSFX.correct() : eslSFX.wrong(); }
597
598        var fb = document.getElementById('esl-mini-fb-'+qid);
599        if(fb){
600          fb.classList.add('esl-show', isCorrect?'esl-fb-correct':'esl-fb-wrong');
601          var icon=fb.querySelector('.esl-fb-icon'), txt=fb.querySelector('.esl-fb-text');
602          if(icon) icon.textContent = isCorrect?'✓':'✗';
603          var correctMsgs = ['Correct!','Great job!','Nailed it!','Perfect!','Well done!'];
604          var wrongMsgs   = ['Not quite.','Incorrect.','Keep trying!','Almost!'];
605          if(txt) txt.textContent = isCorrect
606            ? correctMsgs[Math.floor(Math.random()*correctMsgs.length)]
607            : wrongMsgs[Math.floor(Math.random()*wrongMsgs.length)];
608          // Confetti on correct
609          if(isCorrect && typeof miniConfetti==='function') miniConfetti(fb);
610        }
611
612        // Add correct/wrong visual to sentence answer area
613        if(type==='sentence_building'){
614          var sbAnsEl = block.querySelector('.esl-sentence-answer');
615          if(sbAnsEl) sbAnsEl.classList.add(isCorrect?'esl-sb-correct':'esl-sb-wrong');
616        }
617
618        if(current===TOTAL-1){
619          btnSub.style.display='';
620          setTimeout(function(){ btnSub.scrollIntoView({behavior:'smooth',block:'nearest'}); },400);
621        }
622      }
623
624      function doSubmit(){
625        if(btnSub.disabled) return;
626        btnSub.disabled=true; btnSub.textContent='Submitting…';
627        var timeSpent = Math.round((Date.now()-started)/1000);
628
629        if(LOGGED){
630          /* Logged-in: submit to API — xp_cap=MINI_XP_MAX (5) so server caps correctly */
631          fetch(REST+'tests/'+TESTID+'/submit',{
632            method:'POST',
633            headers:{'Content-Type':'application/json','X-WP-Nonce':NONCE},
634            body:JSON.stringify({answers:answers, time_spent:timeSpent, xp_cap:MINI_XP_MAX})
635          }).then(function(r){return r.json();})
636          .then(function(res){
637            if(res && res.score_pct!==undefined){ showLoggedResult(res, correct_count); }
638            else { showLoggedResult(null, correct_count); }
639          }).catch(function(){ showLoggedResult(null, correct_count); });
640        } else {
641          /* Guest: park the answers, then show the capture card. */
642          var parked = eslParkResult(TESTID, answers, timeSpent, MINI_XP_MAX);
643          eslPingGuestResult(TESTID);
644          showGuestResult(correct_count, parked);
645        }
646      }
647
648      /* → docs/tests/article-tab-render.php.md §5 — v1.6.17 — park a guest result so signing in can CLAIM it */
649      function eslParkResult(testId, ans, secs, xpCap){
650        try{
651          // Nothing answered = nothing worth claiming. Parking {} would hand a
652          // brand-new account a 0% result row, 1 XP and a streak day for free.
653          var any = false, k;
654          for(k in ans){ if(Object.prototype.hasOwnProperty.call(ans,k)){ any = true; break; } }
655          if(!any) return false;
656          var payload = {id:testId, answers:ans, time_spent:secs||0, ts:Date.now(), tries:0};
657          if(xpCap) payload.xp_cap = xpCap;
658          window.localStorage.setItem(PKEY, JSON.stringify(payload));
659          /* → docs/tests/article-tab-render.php.md §12 — Short on purpose. This cookie is the only thing linking a parked */
660          document.cookie = PKEY + '=1; path=/; max-age=' + PTTL + '; SameSite=Lax';
661          return true;
662        }catch(e){ return false; }
663      }
664      var PKEY = 'esl_pending_result';
665      var PTTL = 7200;
666      function eslPingGuestResult(testId){
667        try{
668          fetch(REST+'growth/guest-result',{
669            method:'POST', credentials:'same-origin',
670            headers:{'Content-Type':'application/json'},
671            body:JSON.stringify({test:testId})
672          })['catch'](function(){});
673        }catch(e){}
674      }
675      // Only /login/ reads redirect_to (forum/shortcodes/login.php). The signup
676      // handler routes by audience instead, so adding it there would be dead
677      // weight in the URL.
678      function eslClaimUrl(base){
679        var u = base + '?src=quiz_result';
680        if(base.indexOf('/login') === 0){
681          try{ u += '&redirect_to=' + encodeURIComponent(location.href.split('#')[0]); }catch(e){}
682        }
683        return u;
684      }
685
686      /* → docs/tests/article-tab-render.php.md §3 — v1.9.29 (C4) — "WHAT NEXT?" */
687      function eslEsc(s){
688        return String(s == null ? '' : s)
689          .replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;')
690          .replace(/"/g,'&quot;').replace(/'/g,'&#39;');
691      }
692      /* Một gợi ý trỏ về ĐÚNG trang đang mở còn tệ hơn không gợi ý gì: nó
693         trông như một đường ra nhưng không đưa người ta đi đâu cả. */
694      function eslSamePage(u){
695        try{
696          var a = document.createElement('a'); a.href = u;
697          return a.pathname.replace(/\/+$/,'') === location.pathname.replace(/\/+$/,'');
698        }catch(e){ return false; }
699      }
700      function eslNextBlock(res){
701        var n = (res && res.next_step && res.next_step.url) ? res.next_step : null;
702        if (n && eslSamePage(n.url)) { n = null; }
703
704        var rows = '';
705        if (n) {
706          rows += '<a class="esl-c4row" href="'+eslEsc(n.url)+'">'
707                + '<span class="esl-c4row__t">'+eslEsc(n.title)+'</span>'
708                + (n.why ? '<span class="esl-c4row__w">'+eslEsc(n.why)+'</span>' : '')
709                + '<span class="esl-c4row__go">'+eslEsc(n.cta || 'Start')+' →</span></a>';
710        } else if (CATURL) {
711          rows += '<a class="esl-c4row" href="'+eslEsc(CATURL)+'">'
712                + '<span class="esl-c4row__t">More '+eslEsc(CATNAME)+'</span>'
713                + '<span class="esl-c4row__w">Lessons and quizzes on the same topic</span>'
714                + '<span class="esl-c4row__go">Browse →</span></a>';
715        }
716
717        /* → docs/tests/article-tab-render.php.md §7 — GIÁO VIÊN. Không hỏi cookie, không hỏi vai trò: chỉ hỏi "nút giao */
718        if (document.querySelector('[data-esl-as="open"]')) {
719          rows += '<button type="button" class="esl-c4row" data-esl-c4="assign">'
720                + '<span class="esl-c4row__t">Set this for your class</span>'
721                + '<span class="esl-c4row__w">They get it as homework, and you see each score</span>'
722                + '<span class="esl-c4row__go">Assign →</span></button>';
723        }
724
725        if (!rows) { return ''; }
726        return '<div class="esl-c4next"><p class="esl-c4next__h">What next?</p>'+rows+'</div>';
727      }
728      /* → docs/tests/article-tab-render.php.md §9 — Nút giao bài đã có sẵn trên trang và đã mang đủ data-src / data-ref */
729      function eslWireC4(root){
730        if (!root) { return; }
731        var b = root.querySelector('[data-esl-c4="assign"]');
732        if (!b) { return; }
733        b.addEventListener('click', function(){
734          var t = document.querySelector('[data-esl-as="open"]');
735          if (t) { t.click(); }
736        });
737      }
738
739      var PASS_THRESHOLD = Math.ceil(TOTAL * 0.6); // 60% = 3/5
740      function showLoggedResult(res, correctN){
741        var shownTotal = TOTAL;
742        /* → docs/tests/article-tab-render.php.md §15 — v1.6.21 — the server now grades exactly these 5 questions, and it is */
743        var pct    = Math.round(correctN / TOTAL * 100);
744        var passed = correctN >= PASS_THRESHOLD;
745        if (res && res.score_pct !== undefined && res.score_pct !== null) {
746          var spct = parseInt(res.score_pct, 10);
747          if (!isNaN(spct)) { pct = spct; }
748          passed = !!res.passed;
749          /* → docs/tests/article-tab-render.php.md §14 — Take the headline count from the same place as the percentage. */
750          if (res.detail) {
751            var sc = 0, sn = 0, dk;
752            for (dk in res.detail) {
753              if (!Object.prototype.hasOwnProperty.call(res.detail, dk)) { continue; }
754              sn++;
755              if (res.detail[dk] && res.detail[dk].correct) { sc++; }
756            }
757            // Denominator too: TOTAL was baked into this page when it was
758            // cached, and the graded slice can be smaller if the test shrank.
759            if (sn > 0) { correctN = sc; shownTotal = sn; }
760          }
761        }
762        // Analytics: mini quiz completed
763        window.dataLayer && window.dataLayer.push({event:'quiz_complete',test_id:894,score_pct:pct,passed:passed,logged_in:true,total_questions:shownTotal,questions_answered:checked,quiz_type:'mini'});
764        // Sound effects
765        if(window.eslSFX){
766          setTimeout(function(){ passed ? eslSFX.pass() : eslSFX.fail(); }, 300);
767          if(passed) setTimeout(function(){ eslSFX.xp(); }, 900);
768          if(pct === 100) setTimeout(function(){ eslSFX.perfect(); }, 400);
769        }
770        /* → docs/tests/article-tab-render.php.md §11 — XP: prefer what the server actually stored (v1.6.21 — the mini quiz */
771        var xp = (res && res.xp_earned !== undefined && res.xp_earned !== null)
772                   ? parseInt(res.xp_earned, 10)
773                   : Math.max(1, Math.round(pct / 100 * MINI_XP_MAX));
774        if (isNaN(xp) || xp < 0) { xp = 0; }
775        if (V2 && window.eslResult) {
776          var box = window.eslResult.render(wrap, {kind:'mini', logged:true, correct:correctN, total:shownTotal, pct:pct, passed:passed,
777            xp:xp, streak:(res && res.streak ? res.streak : 0), level:LVL,
778            nextUrl:(FULLURL && FULLCOUNT>TOTAL) ? FULLURL : '', nextLabel:'Take the full '+FULLCOUNT+'-question test &rarr;',
779            extra:eslNextBlock(res)});
780          eslWireC4(box);
781          return;
782        }
783        var html = '<div class="esl-result-screen" style="padding:28px 24px;text-align:center">';
784        html += '<div style="font-size:48px;margin-bottom:8px">'+(correctN===shownTotal?'🏆':correctN>=3?'👏':'💪')+'</div>';
785        html += '<h3 class="esl-result-title" style="margin-bottom:6px">You got '+correctN+'/'+shownTotal+' correct!</h3>';
786        if(xp>0){
787          html += '<div class="esl-xp-toast" style="margin:12px auto">⚡ +'+xp+' XP earned!</div>';
788        }
789        var stk = res && res.streak ? res.streak : 0;
790        if(stk>=1){
791          html += '<div style="margin:0 auto 6px;color:#475569;font-size:13px">🔥 Day '+stk+' of your streak'+(stk>=2?' — don\'t break it tomorrow.':' — come back tomorrow to make it 2.')+'</div>';
792        }
793        html += '<div class="esl-result-stats" style="margin:16px 0">';
794        html += '<div class="esl-result-stat"><strong>'+pct+'%</strong><span>Score</span></div>';
795        html += '<div class="esl-result-stat"><strong>'+correctN+'/'+shownTotal+'</strong><span>Correct</span></div>';
796        html += '</div>';
797
798        /* CTA to full test */
799        if(FULLURL && FULLCOUNT>TOTAL){
800          html += '<a href="'+FULLURL+'" style="display:inline-flex;align-items:center;gap:8px;background:linear-gradient(135deg,#0f7ea4,#27a9cb);color:#fff;padding:13px 24px;border-radius:50px;font-size:14px;font-weight:700;text-decoration:none;margin-bottom:12px">';
801          html += '🚀 Take the Full '+FULLCOUNT+'-Question Test — Earn up to +'+FULL_TEST_XP+' XP</a>';
802          html += '<p style="font-size:12px;color:#64748b;margin:0">Complete the full test to climb the leaderboard!</p>';
803        }
804        html += eslNextBlock(res);
805        html += '<div style="margin-top:14px"><button class="esl-btn esl-btn-outline" onclick="location.reload()">Try again</button></div>';
806        html += '</div>';
807        wrap.innerHTML = html;
808        eslWireC4(wrap);
809      }
810
811      function showGuestResult(correctN, parked){
812        // Analytics: mini quiz completed (guest) + signup prompt
813        var pctG = Math.round(correctN / TOTAL * 100);
814        window.dataLayer && window.dataLayer.push({event:'quiz_complete',test_id:894,score_pct:pctG,logged_in:false,total_questions:TOTAL,quiz_type:'mini'});
815        window.dataLayer && window.dataLayer.push({event:'signup_prompt_shown',test_id:894,trigger:'quiz_complete'});
816        if (V2 && window.eslResult) {
817          var box = window.eslResult.render(wrap, {kind:'mini', logged:false, correct:correctN, total:TOTAL, pct:pctG, xp:MINI_XP_MAX, parked:parked,
818            signupUrl:eslClaimUrl('/signup/'), loginUrl:eslClaimUrl('/login/'),
819            nextUrl:(FULLURL && FULLCOUNT>TOTAL) ? FULLURL : '', nextLabel:'Take the full '+FULLCOUNT+'-question test &rarr;',
820            extra:eslNextBlock(null)});
821          eslWireC4(box);
822          return;
823        }
824        var html = '<div class="esl-result-screen" style="padding:28px 24px;text-align:center">';
825        html += '<div style="font-size:48px;margin-bottom:8px">'+(correctN===TOTAL?'\uD83C\uDFC6':correctN>
825=3?'\uD83D\uDC4F':'\uD83D\uDCAA')+'</div>';
826        html += '<h3 class="esl-result-title" style="margin-bottom:6px">You got '+correctN+'/'+TOTAL+' correct \u2014 '+pctG+'%</h3>';
827        html += '<div style="background:rgba(39,169,203,.08);border:1.5px solid rgba(39,169,203,.25);border-radius:12px;padding:16px 18px;margin:16px 0;text-align:left">';
828        if(parked){
829          html += '<p style="margin:0 0 10px;font-size:15px;font-weight:800;color:#0f172a">Keep this result \u2014 free account</p>';
830          html += '<ul style="margin:0 0 14px;padding-left:18px;font-size:13.5px;color:#334155;line-height:1.75">';
831          html += '<li>This score is saved and the XP is added \u2014 nothing is retyped</li>';
832          html += '<li>\uD83D\uDD25 Your daily streak starts today</li>';
833          html += '<li>Every question you missed goes to your Mistake Notebook to redo</li>';
834          html += '</ul>';
835        } else {
836          html += '<p style="margin:0 0 12px;font-size:15px;font-weight:800;color:#0f172a">Free account \u2014 save your scores, XP and streak</p>';
837        }
838        html += '<div style="display:flex;gap:10px;flex-wrap:wrap">';
839        html += '<a href="'+eslClaimUrl('/signup/')+'" style="background:linear-gradient(135deg,#0f7ea4,#27a9cb);color:#fff;padding:11px 22px;border-radius:50px;font-size:13.5px;font-weight:800;text-decoration:none">'+(parked?'Save my result \u2014 free':'Create a free account')+'</a>';
840        html += '<a href="'+eslClaimUrl('/login/')+'" style="background:#f4f8fb;border:1.5px solid #e3ebf3;color:#0f172a;padding:11px 20px;border-radius:50px;font-size:13.5px;font-weight:700;text-decoration:none">I already have one</a>';
841        html += '</div>';
842        html += '<p style="margin:10px 0 0;font-size:11.5px;color:#94a3b8">Free forever. No card. All 80+ tools stay free either way.</p>';
843        html += '</div>';
844        if(FULLURL && FULLCOUNT>TOTAL){
845          html += '<p style="font-size:13px;color:#475569;margin:0 0 8px">Ready for the full '+FULLCOUNT+'-question test?</p>';
846          html += '<a href="'+FULLURL+'" style="display:inline-flex;align-items:center;gap:6px;border:1.5px solid #27a9cb;color:#0f7ea4;padding:10px 20px;border-radius:50px;font-size:13px;font-weight:700;text-decoration:none;margin-bottom:12px">View Full Test \u2192</a>';
847        }
848        html += eslNextBlock(null);
849        html += '<div style="margin-top:14px"><button class="esl-btn esl-btn-outline" onclick="location.reload()">Try again</button></div>';
850        html += '</div>';
851        wrap.innerHTML = html;
852        eslWireC4(wrap);
853      }
854
855      showBlock(0);
856    })();</script>
856 <aside class="esl-fulltest-cta" aria-label="Full test"><div class="esl-fulltest-cta__text"><p class="esl-fulltest-cta__eyebrow">Full assessment</p><p class="esl-fulltest-cta__headline">Articles Practice Test (A1-B2) — Grammar Exercises with Answers</p><p class="esl-fulltest-cta__sub">20 questions &middot; timed mode &middot; full feedback</p></div> <a class="esl-fulltest-cta__btn" href="https://7esl.com/practice/grammar/articles-test/"> Take the full test <svg viewBox="0 0 24 24" aria-hidden="true"><polyline points="9 18 15 12 9 6"/></svg> </a></aside></section><section class="sevenesl-helpful-widget inside-article" data-helpful-object-type="term" data-helpful-object-id="37395" data-helpful-storage-key="sevenesl_helpful_term_37395"><div class="sevenesl-helpful-widget__inner"><div class="sevenesl-helpful-widget__copy"><p class="sevenesl-helpful-widget__eyebrow">Quick Feedback</p><h2 class="sevenesl-helpful-widget__title">Is this article helpful?</h2></div><div class="sevenesl-helpful-widget__actions" role="group" aria-label="Was this article helpful?"> <button type="button" class="sevenesl-helpful-button is-yes" data-helpful-vote="yes" aria-pressed="false"> <span class="sevenesl-helpful-button__icon" aria-hidden="true">😍</span> <span class="sevenesl-helpful-button__label">Yes</span> <span class="sevenesl-helpful-button__count" data-helpful-count="yes">24</span> </button> <button type="button" class="sevenesl-helpful-button is-no" data-helpful-vote="no" aria-pressed="false"> <span class="sevenesl-helpful-button__icon" aria-hidden="true">☹️</span> <span class="sevenesl-helpful-button__label">No</span> <span class="sevenesl-helpful-button__count" data-helpful-count="no">0</span> </button></div><p class="sevenesl-helpful-widget__status" data-helpful-status aria-live="polite"></p></div></section><section class="sevenesl-helpful-related inside-article" aria-label="Other Students Also Like"><div class="sevenesl-helpful-related__header"><p class="sevenesl-helpful-related__eyebrow">Related posts</p><h2 class="sevenesl-helpful-related__title">Other Students Also Like</h2></div><div class="sevenesl-helpful-related__grid"><article class="sevenesl-helpful-related-card"> <a class="sevenesl-helpful-related-card__link" href="https://7esl.com/a-versus-an/"> <span class="sevenesl-helpful-related-card__kicker">Articles</span><div class="sevenesl-helpful-related-card__top"> <span class="sevenesl-helpful-related-card__meta">😍 5</span></div><h3 class="sevenesl-helpful-related-card__title">A vs. An: Mastering the Basics of English Articles</h3><p class="sevenesl-helpful-related-card__summary">When speaking or writing in English, you will notice that there are two forms of the indefinite article, ‘a’ and…</p> </a></article><article class="sevenesl-helpful-related-card"> <a class="sevenesl-helpful-related-card__link" href="https://7esl.com/use-no-article-rules/"> <span class="sevenesl-helpful-related-card__kicker">Articles</span><div class="sevenesl-helpful-related-card__top"> <span class="sevenesl-helpful-related-card__meta">😍 3</span></div><h3 class="sevenesl-helpful-related-card__title">When to Use No Article in English with 7 Useful Rules</h3><p class="sevenesl-helpful-related-card__summary">Understanding when to use no article in English is essential for mastering grammar. This article covers key rules and provides…</p> </a></article><article class="sevenesl-helpful-related-card"> <a class="sevenesl-helpful-related-card__link" href="https://7esl.com/rules-for-using-the/"> <span class="sevenesl-helpful-related-card__kicker">Articles</span><div class="sevenesl-helpful-related-card__top"> <span class="sevenesl-helpful-related-card__meta">😍 3</span></div><h3 class="sevenesl-helpful-related-card__title">When to Use THE: Essential Rules for English Learners</h3><p class="sevenesl-helpful-related-card__summary">The article covers key information about the definite article &quot;THE,&quot; including its rules and proper usage. You will learn when…</p> </a></article></div></section><section class="ar-list ar-box"><div class="ar-head"><div><p class="eu-eyebrow">Curated list</p><h2 class="ar-h2">More Articles in Articles</h2></div><div class="eu-count"><b>5</b> articles</div></div><ol class="ar-ol"><li class="ar-c">
856<script>document.addEventListener("error",function(e){var i=e.target,f=i&&"IMG"===i.tagName&&i.closest&&i.closest(".eu-fig");if(f){f.classList.add("eu-fig--x");f.querySelectorAll("img").forEach(function(x){x.remove()})}},true);</script>
856 <div class="eu-fig eu-fig--b eu-fig--n eu-t--grammar" data-e="📝"><img class="eu-fig__bg" alt="" aria-hidden="true" data-pin-nopin="true" src="https://7esl.com/wp-content/uploads/2018/01/How-to-use-a-an-1.jpg" width="3000" height="3700" loading="lazy" decoding="async"><img src="https://7esl.com/wp-content/uploads/2018/01/How-to-use-a-an-1.jpg" width="3000" height="3700" alt="" loading="lazy" decoding="async"></div><a href="https://7esl.com/a-versus-an/"><span class="ar-c__t">A vs. An: Mastering the Basics of English Articles</span></a></li><li class="ar-c"><div class="eu-fig eu-fig--b eu-fig--n eu-t--grammar" data-e="📝"><img class="eu-fig__bg" alt="" aria-hidden="true" data-pin-nopin="true" src="https://7esl.com/wp-content/uploads/2018/01/conunt-and-noncount-nouns-with-articles.jpg" width="3000" height="2000" loading="lazy" decoding="async"><img src="https://7esl.com/wp-content/uploads/2018/01/conunt-and-noncount-nouns-with-articles.jpg" width="3000" height="2000" alt="" loading="lazy" decoding="async"></div><a href="https://7esl.com/articles-with-countable-and-uncountable-nouns/"><span class="ar-c__t">Articles with Countable and Uncountable Nouns</span></a></li><li class="ar-c"><div class="eu-fig eu-fig--b eu-t--grammar" data-e="📝"><img class="eu-fig__bg" alt="" aria-hidden="true" data-pin-nopin="true" width="768" height="1086" src="https://7esl.com/wp-content/uploads/2025/05/Colorful-Iluustrated-A-and-An-Worksheet-768x1086.jpg" loading="lazy" decoding="async" sizes="auto, (min-width:1024px) 260px, (min-width:600px) 30vw, 45vw" srcset="https://7esl.com/wp-content/uploads/2025/05/Colorful-Iluustrated-A-and-An-Worksheet-768x1086.jpg 768w, https://7esl.com/wp-content/uploads/2025/05/Colorful-Iluustrated-A-and-An-Worksheet-212x300.jpg 212w, https://7esl.com/wp-content/uploads/2025/05/Colorful-Iluustrated-A-and-An-Worksheet-724x1024.jpg 724w, https://7esl.com/wp-content/uploads/2025/05/Colorful-Iluustrated-A-and-An-Worksheet-1086x1536.jpg 1086w, https://7esl.com/wp-content/uploads/2025/05/Colorful-Iluustrated-A-and-An-Worksheet.jpg 1414w" /><img width="768" height="1086" src="https://7esl.com/wp-content/uploads/2025/05/Colorful-Iluustrated-A-and-An-Worksheet-768x1086.jpg" class="attachment-medium_large size-medium_large" alt="" loading="lazy" decoding="async" sizes="auto, (min-width:1024px) 260px, (min-width:600px) 30vw, 45vw" srcset="https://7esl.com/wp-content/uploads/2025/05/Colorful-Iluustrated-A-and-An-Worksheet-768x1086.jpg 768w, https://7esl.com/wp-content/uploads/2025/05/Colorful-Iluustrated-A-and-An-Worksheet-212x300.jpg 212w, https://7esl.com/wp-content/uploads/2025/05/Colorful-Iluustrated-A-and-An-Worksheet-724x1024.jpg 724w, https://7esl.com/wp-content/uploads/2025/05/Colorful-Iluustrated-A-and-An-Worksheet-1086x1536.jpg 1086w, https://7esl.com/wp-content/uploads/2025/05/Colorful-Iluustrated-A-and-An-Worksheet.jpg 1414w" /></div><a href="https://7esl.com/article-worksheets/"><span class="ar-c__t">Mastering Articles in English: Practice Exercises &#038; Downloadable Worksheets</span></a></li><li class="ar-c"><div class="eu-fig eu-fig--b eu-t--grammar" data-e="📝"><img class="eu-fig__bg" alt="" aria-hidden="true" data-pin-nopin="true" width="768" height="960" src="https://7esl.com/wp-content/uploads/2018/01/rules-for-using-no-article-2-2-768x960.jpg" loading="lazy" decoding="async" sizes="auto, (min-width:1024px) 260px, (min-width:600px) 30vw, 45vw" srcset="https://7esl.com/wp-content/uploads/2018/01/rules-for-using-no-article-2-2-768x960.jpg 768w, https://7esl.com/wp-content/uploads/2018/01/rules-for-using-no-article-2-2-460x575.jpg 460w, https://7esl.com/wp-content/uploads/2018/01/rules-for-using-no-article-2-2-819x1024.jpg 819w, https://7esl.com/wp-content/uploads/2018/01/rules-for-using-no-article-2-2-48x60.jpg 48w, https://7esl.com/wp-content/uploads/2018/01/rules-for-using-no-article-2-2-96x120.jpg 96w, https://7esl.com/wp-content/uploads/2018/01/rules-for-using-no-article-2-2-310x388.jpg 310w" /><img width="768" height="960" src="https://7esl.com/wp-content/uploads/2018/01/rules-for-using-no-article-2-2-768x960.jpg" class="attachment-medium_large size-medium_large" alt="" loading="lazy" decoding="async" sizes="auto, (min-width:1024px) 260px, (min-width:600px) 30vw, 45vw" srcset="https://7esl.com/wp-content/uploads/2018/01/rules-for-using-no-article-2-2-768x960.jpg 768w, https://7esl.com/wp-content/uploads/2018/01/rules-for-using-no-article-2-2-460x575.jpg 460w, https://7esl.com/wp-content/uploads/2018/01/rules-for-using-no-article-2-2-819x1024.jpg 819w, https://7esl.com/wp-content/uploads/2018/01/rules-for-using-no-article-2-2-48x60.jpg 48w, https://7esl.com/wp-content/uploads/2018/01/rules-for-using-no-article-2-2-96x120.jpg 96w, https://7esl.com/wp-content/uploads/2018/01/rules-for-using-no-article-2-2-310x388.jpg 310w" /></div><a href="https://7esl.com/use-no-article-rules/"><span class="ar-c__t">
856When to Use No Article in English with 7 Useful Rules</span></a></li><li class="ar-c"><div class="eu-fig eu-fig--b eu-fig--n eu-t--grammar" data-e="📝"><img class="eu-fig__bg" alt="" aria-hidden="true" data-pin-nopin="true" src="https://7esl.com/wp-content/uploads/2018/01/The-Article-%E2%80%9CThe%E2%80%9D-in-Geographical-Names-1.jpg" width="3700" height="4700" loading="lazy" decoding="async"><img src="https://7esl.com/wp-content/uploads/2018/01/The-Article-%E2%80%9CThe%E2%80%9D-in-Geographical-Names-1.jpg" width="3700" height="4700" alt="" loading="lazy" decoding="async"></div><a href="https://7esl.com/rules-for-using-the/"><span class="ar-c__t">When to Use THE: Essential Rules for English Learners</span></a></li></ol></section></main></div><div class="widget-area sidebar is-right-sidebar" id="right-sidebar"><div class="inside-right-sidebar"><aside class="widget sevenesl-sidebar-search-widget" aria-label="Search 7ESL"><form role="search" method="get" class="sevenesl-sidebar-search-form" action="https://7esl.com/" data-sevenesl-popup-search="true"><label class="screen-reader-text" for="sevenesl-sidebar-search-input-1">Search 7ESL</label><div class="sevenesl-sidebar-search-form__inner"><input type="search" id="sevenesl-sidebar-search-input-1" class="sevenesl-sidebar-search-form__field" placeholder="Search" value="" name="s" autocomplete="off" /><button type="submit" class="sevenesl-sidebar-search-form__button" aria-label="Search"><svg viewBox="0 0 24 24" focusable="false" aria-hidden="true"><path d="M10.5 4.75a5.75 5.75 0 1 0 0 11.5a5.75 5.75 0 0 0 0-11.5Zm0-1.5a7.25 7.25 0 1 1 0 14.5a7.25 7.25 0 0 1 0-14.5Zm6.23 12.42l3.52 3.52a.75.75 0 1 1-1.06 1.06l-3.52-3.52a.75.75 0 1 1 1.06-1.06Z" fill="currentColor"></path></svg></button></div></form></aside><aside id="text-6" class="widget inner-padding widget_text"><div class="textwidget"><div class="esl-lbw "><div class="esl-lbw__head"><span aria-hidden="true">🏆</span> Weekly Top 5</div><div class="esl-lbw__list"> <a href="https://7esl.com/profile/?u=9776" class="esl-lbw__row" title="Judy Beth Lazaro"> <span class="esl-lbw__rank">🥇</span> <img decoding="async" class="esl-lbw__av" src="https://7esl.com/wp-content/uploads/nsl_avatars/5bd460c0f788984f187ae93830eb81e4.png" alt="" width="34" height="34" loading="lazy"
857onerror="this.onerror=null;this.src='https://www.gravatar.com/avatar/?d=mp';"> <span class="esl-lbw__name">Judy Beth Lazaro</span> <span class="esl-lbw__xp">+216 XP</span> </a> <a href="https://7esl.com/profile/?u=10002" class="esl-lbw__row" title="May Moe"> <span class="esl-lbw__rank">🥈</span> <img decoding="async" class="esl-lbw__av" src="https://7esl.com/wp-content/uploads/nsl_avatars/fa3c7c40b0e7a7c6eb267bfd839bd0fb.jpg" alt="" width="34" height="34" loading="lazy"
858onerror="this.onerror=null;this.src='https://www.gravatar.com/avatar/?d=mp';"> <span class="esl-lbw__name">May Moe</span> <span class="esl-lbw__xp">+134 XP</span> </a> <a href="https://7esl.com/profile/?u=9744" class="esl-lbw__row" title="Aulia Yustisia D"> <span class="esl-lbw__rank">🥉</span> <img decoding="async" class="esl-lbw__av" src="https://7esl.com/wp-content/uploads/nsl_avatars/1c14feec28a1b2892b965b517595eafa.jpg" alt="" width="34" height="34" loading="lazy"
859onerror="this.onerror=null;this.src='https://www.gravatar.com/avatar/?d=mp';"> <span class="esl-lbw__name">Aulia Yustisia D</span> <span class="esl-lbw__xp">+96 XP</span> </a> <a href="https://7esl.com/profile/?u=9596" class="esl-lbw__row" title="Thuy Test"> <span class="esl-lbw__rank esl-lbw__rank--num">4</span> <img decoding="async" class="esl-lbw__av" src="https://7esl.com/wp-content/uploads/nsl_avatars/e4bd5625da3903c975a622fb01a2e96e.png" alt="" width="34" height="34" loading="lazy"
860onerror="this.onerror=null;this.src='https://www.gravatar.com/avatar/?d=mp';"> <span class="esl-lbw__name">Thuy Test</span> <span class="esl-lbw__xp">+71 XP</span> </a> <a href="https://7esl.com/profile/?u=7928" class="esl-lbw__row" title="Minh Thu Lê"> <span class="esl-lbw__rank esl-lbw__rank--num">5</span> <img decoding="async" class="esl-lbw__av" src="https://7esl.com/wp-content/uploads/nsl_avatars/85c8a27bcba5d6219a248485fc06bebc.webp" alt="" width="34" height="34" loading="lazy"
861onerror="this.onerror=null;this.src='https://www.gravatar.com/avatar/?d=mp';"> <span class="esl-lbw__name">Minh Thu Lê</span> <span class="esl-lbw__xp">+69 XP</span> </a></div><div class="esl-lbw__foot">Updated 47 min ago</div></div></div></aside>
861<aside id="nav_menu-19" class="widget inner-padding widget_nav_menu sevenesl-interesting-topics-widget sevenesl-topic-widget"><h2 class="widget-title">Interesting Topics</h2><div class="menu-sidebar-container"><ul id="menu-sidebar" class="menu"><li id="menu-item-102385" class="menu-item menu-item-type-taxonomy menu-item-object-category current-category-ancestor menu-item-102385"><a href="https://7esl.com/category/grammar/">Grammar</a></li><li id="menu-item-102393" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-102393"><a href="https://7esl.com/category/vocabulary/">Vocabulary</a></li><li id="menu-item-102387" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-102387"><a href="https://7esl.com/category/visual-vocabulary/">Visual Vocabulary</a></li><li id="menu-item-102386" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-102386"><a href="https://7esl.com/category/writing/">Writing</a></li><li id="menu-item-102392" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-102392"><a href="https://7esl.com/category/speaking/">Speaking</a></li><li id="menu-item-102388" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-102388"><a href="https://7esl.com/category/words-list/">Words List</a></li><li id="menu-item-102467" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-102467"><a href="https://7esl.com/category/slang/">Slang</a></li><li id="menu-item-102466" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-102466"><a href="https://7esl.com/category/internet-slang/">Internet Slang</a></li><li id="menu-item-102468" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-102468"><a href="https://7esl.com/category/idioms/">Idioms</a></li><li id="menu-item-102390" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-102390"><a href="https://7esl.com/category/foreign-language/">Foreign Words</a></li><li id="menu-item-102391" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-102391"><a href="https://7esl.com/category/positive-words/">Positive Words &amp; Phrases</a></li><li id="menu-item-102389" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-102389"><a href="https://7esl.com/category/business-english/">Business English</a></li><li id="menu-item-102394" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-102394"><a href="https://7esl.com/category/american-and-british-english/">British vs. American English</a></li></ul></div></aside></div></div></div></div><div class="site-footer"></div><a title="Scroll back to top" aria-label="Scroll back to top" rel="nofollow" href="#" class="generate-back-to-top" data-scroll-speed="400" data-start-scroll="300" role="button"> <span class="gp-icon icon-arrow-up"><svg viewBox="0 0 330 512" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M305.863 314.916c0 2.266-1.133 4.815-2.832 6.514l-14.157 14.163c-1.699 1.7-3.964 2.832-6.513 2.832-2.265 0-4.813-1.133-6.512-2.832L164.572 224.276 53.295 335.593c-1.699 1.7-4.247 2.832-6.512 2.832-2.265 0-4.814-1.133-6.513-2.832L26.113 321.43c-1.699-1.7-2.831-4.248-2.831-6.514s1.132-4.816 2.831-6.515L158.06 176.408c1.699-1.7 4.247-2.833 6.512-2.833 2.265 0 4.814 1.133 6.513 2.833L303.03 308.4c1.7 1.7 2.832 4.249 2.832 6.515z" fill-rule="nonzero" /></svg></span> </a><footer class="escx-foot"><div class="escx-wrap escx-foot__top"><div class="escx-foot__brand"> <a href="https://7esl.com/" class="escx-logo escx-logo--foot"> <img loading="lazy" src="https://7esl.com/wp-content/plugins/7esl-core/assets/images/logo-7esl-light.svg" alt="7ESL" width="139" height="36"
862onerror="this.style.display='none';this.nextElementSibling.style.display='inline-flex'"> <span style="display:none;align-items:center;gap:8px">7<b>ESL</b></span> </a><p>Established in 2017, 7ESL is a leading global English-learning platform &mdash; clear lessons, practical tools, fun games and exam practice to help millions learn, teach and master English.</p><div class="escx-foot__social"> <a href="https://www.facebook.com/7ESLAI" aria-label="Facebook"><svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"/></svg></a> <a href="https://www.pinterest.com/7english/" aria-label="Pinterest"><svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2a10 10 0 0 0-3.6 19.3c-.1-.9-.1-2.2.1-3.1l1.2-5s-.3-.6-.3-1.5c0-1.4.8-2.4 1.8-2.4.9 0 1.3.6 1.3 1.4 0 .9-.5 2.1-.8 3.3-.2 1 .5 1.7 1.4 1.7 1.7 0 3-1.8 3-4.4 0-2.3-1.6-3.9-4-3.9-2.7 0-4.3 2-4.3 4.1 0 .8.3 1.7.7 2.1a.3.3 0 0 1 .1.3l-.3 1.1c0 .2-.1.2-.3.1-1.2-.5-1.9-2.3-1.9-3.7 0-3 2.2-5.7 6.3-5.7 3.3 0 5.9 2.4 5.9 5.5 0 3.3-2.1 5.9-5 5.9-1 0-1.9-.5-2.2-1.1 0 0-.5 1.9-.6 2.3-.2.8-.8 1.9-1.2 2.5A10 10 0 1 0 12 2z"/>
862</svg></a> <a href="https://www.youtube.com/channel/UCPDQgXju7hqEGBwzLIeI7Zw" aria-label="YouTube"><svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M23 12s0-3.5-.4-5.2a2.7 2.7 0 0 0-1.9-1.9C18.9 4.5 12 4.5 12 4.5s-6.9 0-8.7.4a2.7 2.7 0 0 0-1.9 1.9C1 8.5 1 12 1 12s0 3.5.4 5.2a2.7 2.7 0 0 0 1.9 1.9c1.8.4 8.7.4 8.7.4s6.9 0 8.7-.4a2.7 2.7 0 0 0 1.9-1.9C23 15.5 23 12 23 12zM10 15.5v-7l6 3.5z"/></svg></a> <a href="https://x.com/7eslenglish" aria-label="X"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="M18 2h3l-7 8 8 12h-6l-5-7-5 7H3l8-9L3 2h6l4 6z"/></svg></a></div></div><div class="escx-foot__col"><h5>Learn &amp; Practice</h5> <a href="https://7esl.com/grammar/">Grammar</a> <a href="https://7esl.com/vocabulary/">Vocabulary</a> <a href="https://7esl.com/idioms/">Idioms</a> <a href="https://7esl.com/phrasal-verbs/">Phrasal Verbs</a> <a href="https://7esl.com/reading/">Reading Practice</a><a href="https://7esl.com/listening/">Listening Practice</a><a href="https://7esl.com/speaking/">Speaking Practice</a><a href="https://7esl.com/writing-practice/">Writing Practice</a></div><div class="escx-foot__col"><h5>Courses <span class="escx-tag">NEW</span></h5> <a href="https://7esl.com/courses/phonics/">Phonics</a><a href="https://7esl.com/courses/cambridge-starters/">Pre A1 Starters</a><a href="https://7esl.com/courses/cambridge-movers/">A1 Movers</a><a href="https://7esl.com/courses/cambridge-flyers/">A2 Flyers</a><a href="https://7esl.com/courses/cambridge-a2-key-for-schools/">A2 Key for Schools</a><a href="https://7esl.com/courses/cambridge-b1-preliminary-for-schools/">B1 Preliminary for Schools</a><a href="https://7esl.com/courses/b2-first/">B2 First</a> <a href="https://7esl.com/courses/">All Courses</a></div><div class="escx-foot__col"><h5>Tools &amp; Games</h5> <a href="https://7esl.com/tools/">All Tools</a> <a href="https://7esl.com/learning-tools/">Learning Tools</a> <a href="https://7esl.com/writing-tools/">Writing Tools</a> <a href="https://7esl.com/word-tools/">Word Tools</a> <a href="https://7esl.com/teacher-tools/">Teacher Tools</a> <a href="https://7esl.com/picture-vocabulary/">Picture Vocabulary</a> <a href="https://7esl.com/word-games/">Word Games</a> <a href="https://7esl.com/vocabulary-games/">Vocabulary Games</a> <a href="https://7esl.com/games/">All Games</a></div><div class="escx-foot__col"><h5>Tests &amp; Resources <span class="escx-tag escx-tag--hot">HOT</span></h5> <a href="https://7esl.com/english-level-test/">Level Test</a> <a href="https://7esl.com/exams/">Exam Practice</a> <a href="https://7esl.com/tests/">All Tests</a> <a href="https://7esl.com/worksheets/">Free Worksheets</a> <a href="https://7esl.com/category/esl-resources/esl-pdfs/">Free PDF Books</a> <a href="https://7esl.com/tutors/">Find a Tutor</a> <a href="https://7esl.com/forum/">Forums</a></div><div class="escx-foot__col"><h5>For Teachers</h5> <a href="https://7esl.com/teacher-tools/">Teacher Tools</a> <a href="https://7esl.com/worksheets/">Worksheets</a> <a href="https://7esl.com/category/esl-resources/esl-pdfs/">PDF Books</a> <a href="https://7esl.com/picture-vocabulary/">Picture Vocabulary</a> <a href="https://7esl.com/kids-games/">Kids Games</a> <a href="https://7esl.com/tutor-register/">Become a Tutor</a> <a href="https://7esl.com/signup/"><strong style="color:#cfe0ec">Free account &rarr;</strong></a></div></div><div class="escx-foot__bottom"><div class="escx-wrap"><div>&copy; 2026 7ESL. All rights reserved.</div><div class="escx-foot__legal"> <a href="https://7esl.com/about/">About</a> <a href="https://7esl.com/editorial-policy/">Editorial Policy</a> <a href="https://7esl.com/privacy-policy/">Privacy</a> <a href="https://7esl.com/terms-of-service/">Terms</a> <a href="https://7esl.com/contact/">Contact</a></div></div></div></footer><div class="escx-dbg" id="escxDbg"></div><aside class="escx-drawer" id="escxDrawer" aria-label="Mobile menu"><div class="escx-drawer__h"> <a href="https://7esl.com/" class="escx-logo"><img loading="lazy" src="https://7esl.com/wp-content/plugins/7esl-core/assets/images/logo-7esl-dark.svg" alt="7ESL" width="116" height="30"></a> <button class="escx-icbtn" id="escxDclose" style="display:grid" aria-label="Close menu"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M18 6L6 18M6 6l12 12"/></svg></button></div> <details><summary>
862Learn <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#888" stroke-width="2"><path d="M6 9l6 6 6-6"/></svg></summary><div class="escx-sub"><span class="escx-sub__h">Courses</span><a href="https://7esl.com/courses/phonics/">Phonics</a><a href="https://7esl.com/courses/cambridge-starters/">Pre A1 Starters <span class="escx-pro">PRO</span></a><a href="https://7esl.com/courses/cambridge-movers/">A1 Movers <span class="escx-pro">PRO</span></a><a href="https://7esl.com/courses/cambridge-flyers/">A2 Flyers <span class="escx-pro">PRO</span></a><a href="https://7esl.com/courses/cambridge-a2-key-for-schools/">A2 Key for Schools <span class="escx-pro">PRO</span></a><a href="https://7esl.com/courses/cambridge-b1-preliminary-for-schools/">B1 Preliminary for Schools <span class="escx-pro">PRO</span></a><a href="https://7esl.com/courses/b2-first/">B2 First <span class="escx-pro">PRO</span></a><a href="https://7esl.com/courses/">All courses</a><span class="escx-sub__h">Lessons</span><a href="https://7esl.com/grammar/">Grammar</a><a href="https://7esl.com/vocabulary/">Vocabulary</a><a href="https://7esl.com/idioms/">Idioms</a><a href="https://7esl.com/pronunciation/">Pronunciation</a></div></details> <details><summary>Practice <span class="escx-badge">NEW</span><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#888" stroke-width="2"><path d="M6 9l6 6 6-6"/></svg></summary><div class="escx-sub"><a href="https://7esl.com/reading/">Reading</a><a href="https://7esl.com/listening/">Listening</a><a href="https://7esl.com/speaking/">Speaking</a><a href="https://7esl.com/writing-practice/">Writing</a></div></details> <details><summary>Tests <span class="escx-badge escx-badge--hot">HOT</span><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#888" stroke-width="2"><path d="M6 9l6 6 6-6"/></svg></summary><div class="escx-sub"><a href="https://7esl.com/english-level-test/">Level Test</a><a href="https://7esl.com/exams/">Exam Practice</a><a href="https://7esl.com/practice/">Practice Tests</a></div></details> <details><summary>Tools <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#888" stroke-width="2"><path d="M6 9l6 6 6-6"/></svg></summary><div class="escx-sub"><a href="https://7esl.com/tools/">All Tools</a><a href="https://7esl.com/learning-tools/">Learning Tools</a><a href="https://7esl.com/writing-tools/">Writing Tools</a><a href="https://7esl.com/word-tools/">Word Game Tools</a><a href="https://7esl.com/picture-vocabulary/">Picture Vocabulary</a><a href="https://7esl.com/teacher-tools/">Teacher Tools</a><a href="https://7esl.com/how-to-pronounce/">Pronunciation Tools</a><a href="https://7esl.com/spelling-tools/">Spelling Tools</a></div></details> <details><summary>Games <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#888" stroke-width="2"><path d="M6 9l6 6 6-6"/></svg></summary><div class="escx-sub"><a href="https://7esl.com/word-games/">Word Games</a><a href="https://7esl.com/vocabulary-games/">Vocabulary Games</a><a href="https://7esl.com/grammar-games/">Grammar Games</a><a href="https://7esl.com/kids-games/">Kids Games</a><a href="https://7esl.com/pronunciation-games/">Pronunciation Games</a></div></details> <details data-aud-hide="teacher"><summary>Tutors <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#888" stroke-width="2"><path d="M6 9l6 6 6-6"/></svg></summary><div class="escx-sub"><a href="https://7esl.com/tutors/">Find a Tutor</a></div></details> <details><summary>For Teachers <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#888" stroke-width="2"><path d="M6 9l6 6 6-6"/></svg></summary><div class="escx-sub"><a href="https://7esl.com/teacher-tools/">Teacher Tools</a><a href="https://7esl.com/worksheets/">Worksheets</a><a href="https://7esl.com/category/esl-resources/esl-pdfs/">PDF Books</a><a href="https://7esl.com/kids-games/">Kids Games</a><a data-aud-hide="learner kid ask none" href="https://7esl.com/tutor-register/">Become a Tutor</a></div></details> <details><summary>
862Download <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#888" stroke-width="2"><path d="M6 9l6 6 6-6"/></svg></summary><div class="escx-sub"><a href="https://7esl.com/app/">Mobile App</a><a href="https://7esl.com/worksheets/">Worksheets</a><a href="https://7esl.com/category/esl-resources/esl-pdfs/">PDF Books</a></div></details> <details><summary>Forums</summary><div class="escx-sub"><a href="https://7esl.com/forum/">Community Forum</a></div></details><div class="escx-drawer__btns"> <a class="escx-btn escx-btn--ghost" href="https://7esl.com/login/">Login</a> <a class="escx-btn escx-btn--pri" href="https://7esl.com/signup/">Sign up free</a></div></aside> 
862<script type="speculationrules">{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/generatepress/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}</script>
862 
862<script>function isOldIOSDevice() {
863                const userAgent = navigator.userAgent || navigator.vendor || window.opera;
864
865                // Check if it's an iOS device
866                const isIOS = /iPad|iPhone|iPod/.test(userAgent) && !window.MSStream;
867
868                if (!isIOS) return false;
869
870                // Extract iOS version from userAgent
871                const match = userAgent.match(/OS (\d+)_/);
872                if (match && match.length > 1) {
873                    const majorVersion = parseInt(match[1], 10);
874
875                    // Example: Consider iOS 12 and below as old
876                    return majorVersion <= 12;
877                }
878
879                // If version not found, assume not old
880                return false;
881            }
882            if (isOldIOSDevice()) {
883                document.addEventListener('DOMContentLoaded', function() {
884                    setTimeout(() => {
885                        document.querySelectorAll('audio:not(.plyr audio)').forEach(function(audio, index) {
886                            audio.setAttribute('controls', '')
887                        });
888                    }, 3000);
889                });
890            }
891            // ios old devices</script>
891 <svg width="0" height="0" class="h5ap_svg_hidden" style="display: none;"> <symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 511.997 511.997" id="exchange"> <path d="M467.938 87.164L387.063 5.652c-7.438-7.495-19.531-7.54-27.02-.108s-7.54 19.525-.108 27.014l67.471 68.006-67.42 67.42c-7.464 7.457-7.464 19.557 0 27.014 3.732 3.732 8.616 5.598 13.507 5.598s9.781-1.866 13.513-5.591l80.876-80.876c7.443-7.44 7.463-19.495.056-26.965z"></path> <path d="M455.005 81.509H56.995c-10.552 0-19.104 8.552-19.104 19.104v147.741c0 10.552 8.552 19.104 19.104 19.104s19.104-8.552 19.104-19.104V119.718h378.905c10.552 0 19.104-8.552 19.104-19.104.001-10.552-8.551-19.105-19.103-19.105zM83.964 411.431l67.42-67.413c7.457-7.457 7.464-19.55 0-27.014-7.463-7.464-19.563-7.464-27.02 0l-80.876 80.869c-7.444 7.438-7.47 19.493-.057 26.963l80.876 81.512a19.064 19.064 0 0013.564 5.649c4.865 0 9.731-1.847 13.456-5.54 7.489-7.432 7.54-19.525.108-27.02l-67.471-68.006z"></path> <path d="M454.368 238.166c-10.552 0-19.104 8.552-19.104 19.104v135.005H56.995c-10.552 0-19.104 8.552-19.104 19.104s8.552 19.104 19.104 19.104h397.38c10.552 0 19.104-8.552 19.098-19.104V257.271c-.001-10.552-8.553-19.105-19.105-19.105z"></path> </symbol> </svg> <svg width="0" height="0" class="h5ap_svg_hidden" style="display: none;"> <symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 477.88 477.88" id="shuffle"> <path d="M472.897 124.269a.892.892 0 01-.03-.031l-.017.017-68.267-68.267c-6.78-6.548-17.584-6.36-24.132.42-6.388 6.614-6.388 17.099 0 23.713l39.151 39.151h-95.334c-65.948.075-119.391 53.518-119.467 119.467-.056 47.105-38.228 85.277-85.333 85.333h-102.4C7.641 324.072 0 331.713 0 341.139s7.641 17.067 17.067 17.067h102.4c65.948-.075 119.391-53.518 119.467-119.467.056-47.105 38.228-85.277 85.333-85.333h95.334l-39.134 39.134c-6.78 6.548-6.968 17.353-.419 24.132 6.548 6.78 17.353 6.968 24.132.419.142-.137.282-.277.419-.419l68.267-68.267c6.674-6.657 6.687-17.463.031-24.136z"></path> <path d="M472.897 329.069l-.03-.03-.017.017-68.267-68.267c-6.78-6.548-17.584-6.36-24.132.42-6.388 6.614-6.388 17.099 0 23.712l39.151 39.151h-95.334a85.209 85.209 0 01-56.9-21.726c-7.081-6.222-17.864-5.525-24.086 1.555-6.14 6.988-5.553 17.605 1.319 23.874a119.28 119.28 0 0079.667 30.43h95.334l-39.134 39.134c-6.78 6.548-6.968 17.352-.42 24.132 6.548 6.78 17.352 6.968 24.132.42.142-.138.282-.277.42-.42l68.267-68.267c6.673-6.656 6.686-17.462.03-24.135zM199.134 149.702a119.28 119.28 0 00-79.667-30.43h-102.4C7.641 119.272 0 126.913 0 136.339s7.641 17.067 17.067 17.067h102.4a85.209 85.209 0 0156.9 21.726c7.081 6.222 17.864 5.525 24.086-1.555 6.14-6.989 5.553-17.606-1.319-23.875z"></path> </symbol> </svg> 
891<script>const single_player = document.querySelectorAll(".h5ap_single_button");
892			single_player.forEach(item => {
893				const audio = item.querySelector("audio");
894				audio.volume = 0.6;
895				item.querySelector('.play').addEventListener("click", function() {
896					single_player.forEach(player => {
897						player.querySelector("audio")?.pause();
898					})
899					setTimeout(() => {
900						audio.currentTime = 0;
901						audio.play();
902					}, 0);
903
904				});
905
906				item.querySelector('.pause').style.display = 'none';
907				item.querySelector('.pause').addEventListener("click", function() {
908					audio.pause();
909				});
910
911				audio.addEventListener("ended", () => {
912					item.querySelector(".play").style.display = 'inline-block';
913					item.querySelector(".pause").style.display = 'none';
914				});
915
916				audio.addEventListener("pause", () => {
917					item.querySelector(".play").style.display = 'inline-block';
918					item.querySelector(".pause").style.display = 'none';
919				});
920				audio.addEventListener("play", () => {
921					item.querySelector(".play").style.display = 'none';
922					item.querySelector(".pause").style.display = 'inline-block';
923				});
924
925			})</script>
925 
925<script id="generate-a11y">!function(){"use strict";if("querySelector"in document&&"addEventListener"in window){var e=document.body;e.addEventListener("pointerdown",(function(){e.classList.add("using-mouse")}),{passive:!0}),e.addEventListener("keydown",(function(){e.classList.remove("using-mouse")}),{passive:!0})}}();</script>
925 
925<script id="thinklab-js-js-extra">var ESL_TL = {"scope":"body.single-post .inside-article .entry-content","legacy":""};
926//# sourceURL=thinklab-js-js-extra</script>
926 
926<script id="generate-menu-js-before">var generatepressMenu = {"toggleOpenedSubMenus":true,"openSubMenuLabel":"Open Sub-Menu","closeSubMenuLabel":"Close Sub-Menu"};
927//# sourceURL=generate-menu-js-before</script>
927 
927<script id="generate-back-to-top-js-before">var generatepressBackToTop = {"smooth":true};
928//# sourceURL=generate-back-to-top-js-before</script>
928 
928<script id="breeze-lazy-js-after">document.addEventListener("DOMContentLoaded", function () {
929							if ( "function" !== typeof window.LazyLoad && "function" !== typeof LazyLoad ) {
930								return;
931							}
932
933							var breezeLazyLoad = window.LazyLoad || LazyLoad;
934
935							window.lazyLoadInstance = new breezeLazyLoad({
936						    elements_selector: ".br-lazy",
937						    data_src: "breeze",
938						    data_srcset: "brsrcset",
939						    data_sizes: "brsizes",
940						    class_loaded: "br-loaded",
941						    threshold: 300,
942								    });
943						});
944//# sourceURL=breeze-lazy-js-after</script>
944 
944<script id="esl-tests-js-js-extra">var eslTests = {"ajaxUrl":"https://7esl.com/wp-admin/admin-ajax.php","restUrl":"https://7esl.com/wp-json/esl/v1/","nonce":"06d84125a1","userId":"0","is_paid":"0","profileUrl":"https://7esl.com/profile/"};
945//# sourceURL=esl-tests-js-js-extra</script>
945 
945<script id="esl-article-tabs-js-js-extra">var eslArticleTabs = {"context":"category","contextId":"37395","postId":"0","testId":"894","xpReward":"5","testTitle":"Articles Practice Test (A1-B2) \u2014 Grammar Exercises with Answers","loggedIn":"","passScore":"60","timeLimit":"600"};
946//# sourceURL=esl-article-tabs-js-js-extra</script>
946 
946<script id="sevenesl-sidebar-search-js-extra">var seveneslSidebarSearch = {"ajaxUrl":"https://7esl.com/wp-admin/admin-ajax.php","nonce":"1ff38f333f","homeUrl":"https://7esl.com/"};
947//# sourceURL=sevenesl-sidebar-search-js-extra</script>
947 
947<script id="sevenesl-helpful-vote-js-extra">var seveneslHelpfulVote = {"ajaxUrl":"https://7esl.com/wp-admin/admin-ajax.php","nonce":"f5d4111456"};
948//# sourceURL=sevenesl-helpful-vote-js-extra</script>
948 
948<script type="text/javascript">(function (undefined) {let scriptOptions={"_localizedStrings":{"redirect_overlay_title":"Hold On","redirect_overlay_text":"You are being redirected to another page,<br>it may take a few seconds.","webview_notification_text":"The selected provider doesn't support embedded browsers!"},"_targetWindow":"prefer-popup","_redirectOverlay":"overlay-with-spinner-and-message","_unsupportedWebviewBehavior":""};
949/**
950 * Used when Cross-Origin-Opener-Policy blocked the access to the opener. We can't have a reference of the opened windows, so we should attempt to refresh only the windows that has opened popups.
951 */
952window._nslHasOpenedPopup = false;
953window._nslWebViewNoticeElement = null;
954
955window.NSLPopup = function (url, title, w, h) {
956
957    /**
958     * Cross-Origin-Opener-Policy blocked the access to the opener
959     */
960    if (typeof BroadcastChannel === "function") {
961        const _nslLoginBroadCastChannel = new BroadcastChannel('nsl_login_broadcast_channel');
962        _nslLoginBroadCastChannel.onmessage = (event) => {
963            if (window?._nslHasOpenedPopup && event.data?.action === 'redirect') {
964                window._nslHasOpenedPopup = false;
965
966                const url = event.data?.href;
967                _nslLoginBroadCastChannel.close();
968                if (typeof window.nslRedirect === 'function') {
969                    window.nslRedirect(url);
970                } else {
971                    window.opener.location = url;
972                }
973            }
974        };
975    }
976
977    const userAgent = navigator.userAgent,
978        mobile = function () {
979            return /\b(iPhone|iP[ao]d)/.test(userAgent) ||
980                /\b(iP[ao]d)/.test(userAgent) ||
981                /Android/i.test(userAgent) ||
982                /Mobile/i.test(userAgent);
983        },
984        screenX = window.screenX !== undefined ? window.screenX : window.screenLeft,
985        screenY = window.screenY !== undefined ? window.screenY : window.screenTop,
986        outerWidth = window.outerWidth !== undefined ? window.outerWidth : document.documentElement.clientWidth,
987        outerHeight = window.outerHeight !== undefined ? window.outerHeight : document.documentElement.clientHeight - 22,
988        targetWidth = mobile() ? null : w,
989        targetHeight = mobile() ? null : h,
990        left = parseInt(screenX + (outerWidth - targetWidth) / 2, 10),
991        right = parseInt(screenY + (outerHeight - targetHeight) / 2.5, 10),
992        features = [];
993    if (targetWidth !== null) {
994        features.push('width=' + targetWidth);
995    }
996    if (targetHeight !== null) {
997        features.push('height=' + targetHeight);
998    }
999    features.push('left=' + left);
1000    features.push('top=' + right);
1001    features.push('scrollbars=1');
1002
1003    const newWindow = window.open(url, title, features.join(','));
1004
1005    if (window.focus) {
1006        newWindow.focus();
1007    }
1008
1009    window._nslHasOpenedPopup = true;
1010
1011    return newWindow;
1012};
1013
1014let isWebView = null;
1015
1016function checkWebView() {
1017    if (isWebView === null) {
1018        function _detectOS(ua) {
1019            if (/Android/.test(ua)) {
1020                return "Android";
1021            } else if (/iPhone|iPad|iPod/.test(ua)) {
1022                return "iOS";
1023            } else if (/Windows/.test(ua)) {
1024                return "Windows";
1025            } else if (/Mac OS X/.test(ua)) {
1026                return "Mac";
1027            } else if (/CrOS/.test(ua)) {
1028                return "Chrome OS";
1029            } else if (/Firefox/.test(ua)) {
1030                return "Firefox OS";
1031            }
1032            return "";
1033        }
1034
1035        function _detectBrowser(ua) {
1036            let android = /Android/.test(ua);
1037
1038            if (/Opera Mini/.test(ua) || / OPR/.test(ua) || / OPT/.test(ua)) {
1039                return "Opera";
1040            } else if (/CriOS/.test(ua)) {
1041                return "Chrome for iOS";
1042            } else if (/Edge/.test(ua)) {
1043                return "Edge";
1044            } else if (android && /Silk\//.test(ua)) {
1045                return "Silk";
1046            } else if (/Chrome/.test(ua)) {
1047                return "Chrome";
1048            } else if (/Firefox/.test(ua)) {
1049                return "Firefox";
1050            } else if (android) {
1051                return "AOSP";
1052            } else if (/MSIE|Trident/.test(ua)) {
1053                return "IE";
1054            } else if (/Safari\//.test(ua)) {
1055                return "Safari";
1056            }
1056 else if (/AppleWebKit/.test(ua)) {
1057                return "WebKit";
1058            }
1059            return "";
1060        }
1061
1062        function _detectBrowserVersion(ua, browser) {
1063            if (browser === "Opera") {
1064                return /Opera Mini/.test(ua) ? _getVersion(ua, "Opera Mini/") :
1065                    / OPR/.test(ua) ? _getVersion(ua, " OPR/") :
1066                        _getVersion(ua, " OPT/");
1067            } else if (browser === "Chrome for iOS") {
1068                return _getVersion(ua, "CriOS/");
1069            } else if (browser === "Edge") {
1070                return _getVersion(ua, "Edge/");
1071            } else if (browser === "Chrome") {
1072                return _getVersion(ua, "Chrome/");
1073            } else if (browser === "Firefox") {
1074                return _getVersion(ua, "Firefox/");
1075            } else if (browser === "Silk") {
1076                return _getVersion(ua, "Silk/");
1077            } else if (browser === "AOSP") {
1078                return _getVersion(ua, "Version/");
1079            } else if (browser === "IE") {
1080                return /IEMobile/.test(ua) ? _getVersion(ua, "IEMobile/") :
1081                    /MSIE/.test(ua) ? _getVersion(ua, "MSIE ")
1082                        :
1083                        _getVersion(ua, "rv:");
1084            } else if (browser === "Safari") {
1085                return _getVersion(ua, "Version/");
1086            } else if (browser === "WebKit") {
1087                return _getVersion(ua, "WebKit/");
1088            }
1089            return "0.0.0";
1090        }
1091
1092        function _getVersion(ua, token) {
1093            try {
1094                return _normalizeSemverString(ua.split(token)[1].trim().split(/[^\w\.]/)[0]);
1095            } catch (o_O) {
1096            }
1097            return "0.0.0";
1098        }
1099
1100        function _normalizeSemverString(version) {
1101            const ary = version.split(/[\._]/);
1102            return (parseInt(ary[0], 10) || 0) + "." +
1103                (parseInt(ary[1], 10) || 0) + "." +
1104                (parseInt(ary[2], 10) || 0);
1105        }
1106
1107        function _isWebView(ua, os, browser, version, options) {
1108            switch (os + browser) {
1109                case "iOSSafari":
1110                    return false;
1111                case "iOSWebKit":
1112                    return _isWebView_iOS(options);
1113                case "AndroidAOSP":
1114                    return false;
1115                case "AndroidChrome":
1116                    return parseFloat(version) >= 42 ? /; wv/.test(ua) : /\d{2}\.0\.0/.test(version) ? true : _isWebView_Android(options);
1117            }
1118            return false;
1119        }
1120
1121        function _isWebView_iOS(options) {
1122            const document = (window["document"] || {});
1123
1124            if ("WEB_VIEW" in options) {
1125                return options["WEB_VIEW"];
1126            }
1127            return !("fullscreenEnabled" in document || "webkitFullscreenEnabled" in document || false);
1128        }
1129
1130        function _isWebView_Android(options) {
1131            if ("WEB_VIEW" in options) {
1132                return options["WEB_VIEW"];
1133            }
1134            return !("requestFileSystem" in window || "webkitRequestFileSystem" in window || false);
1135        }
1136
1137        const options = {},
1138            nav = window.navigator || {},
1139            ua = nav.userAgent || "",
1140            os = _detectOS(ua),
1141            browser = _detectBrowser(ua),
1142            browserVersion = _detectBrowserVersion(ua, browser);
1143
1144        isWebView = _isWebView(ua, os, browser, browserVersion, options);
1145    }
1146
1147    return isWebView;
1148}
1149
1150function isAllowedWebViewForUserAgent(provider) {
1151    const facebookAllowedWebViews = [
1152        'Instagram',
1153        'FBAV',
1154        'FBAN'
1155    ];
1156    let whitelist = [];
1157
1158    if (provider && provider === 'facebook') {
1159        whitelist = facebookAllowedWebViews;
1160    }
1161
1162    const nav = window.navigator || {},
1163        ua = nav.userAgent || "";
1164
1165    if (whitelist.length && ua.match(new RegExp(whitelist.join('|')))) {
1166        return true;
1167    }
1168
1169    return false;
1170}
1171
1172function disableButtonInWebView(providerButtonElement) {
1173    if (providerButtonElement) {
1174        providerButtonElement.classList.add('nsl-disabled-provider');
1175        providerButtonElement.setAttribute('href', '#');
1176
1177        providerButtonElement.addEventListener('pointerdown', (e) => {
1178            const closeNotice = function () {
1179                if (window._nslWebViewNoticeElement) {
1180                    window._nslWebViewNoticeElement.remove();
1181                    window._nslWebViewNoticeElement = null;
1182                }
1183            };
1184
1185            closeNotice();
1186
1187            window._nslWebViewNoticeElement = document.createElement('div');
1188            window._nslWebViewNoticeElement.id = "nsl-notices-fallback";
1189            window._nslWebViewNoticeElement.role = 'alert';
1190            window._nslWebViewNoticeElement.ariaLive = 'assertive';
1191            window._nslWebViewNoticeElement.ariaAtomic = 'true';
1192
1193            window._nslWebViewNoticeElement.addEventListener('pointerdown', closeNotice);
1194
1195            window._nslWebViewNoticeElement.addEventListener('keydown', function (e) {
1196                if (e.key === 'Enter') {
1197                    e.preventDefault();
1198                    closeNotice();
1199                }
1200            });
1201            const webviewNoticeHTML = '<div class="error"><p>' + scriptOptions._localizedStrings.webview_notification_text + '</p></div>';
1202
1203            window._nslWebViewNoticeElement.insertAdjacentHTML("afterbegin", webviewNoticeHTML);
1204            document.body.appendChild(window._nslWebViewNoticeElement);
1205        });
1206    }
1207
1208}
1209
1210window._nslDOMReady(function () {
1211
1212    window.nslRedirect = function (url) {
1213        if (scriptOptions._redirectOverlay) {
1214            const overlay = document.createElement('div');
1215            overlay.id = "nsl-redirect-overlay";
1216            let overlayHTML = '';
1217            const overlayContainer = "<div id='nsl-redirect-overlay-container'>",
1218                overlayContainerClose = "</div>",
1219                overlaySpinner = "<div id='nsl-redirect-overlay-spinner'></div>",
1220                overlayTitle = "<p id='nsl-redirect-overlay-title'>" + scriptOptions._localizedStrings.redirect_overlay_title + "</p>",
1221                overlayText = "<p id='nsl-redirect-overlay-text'>" + scriptOptions._localizedStrings.redirect_overlay_text + "</p>";
1222
1223            switch (scriptOptions._redirectOverlay) {
1224                case "overlay-only":
1225                    break;
1226                case "overlay-with-spinner":
1227                    overlayHTML = overlayContainer + overlaySpinner + overlayContainerClose;
1228                    break;
1229                default:
1230                    overlayHTML = overlayContainer + overlaySpinner + overlayTitle + overlayText + overlayContainerClose;
1231                    break;
1232            }
1233
1234            overlay.insertAdjacentHTML("afterbegin", overlayHTML);
1235            document.body.appendChild(overlay);
1236        }
1237
1238        window.location = url;
1239    };
1240
1241    let targetWindow = scriptOptions._targetWindow || 'prefer-popup',
1242        lastPopup = false;
1243
1244
1245    document.addEventListener('click', function (e) {
1246        if (e.target) {
1247            const buttonLinkElement = e.target.closest('a[data-plugin="nsl"][data-action="connect"]') || e.target.closest('a[data-plugin="nsl"][data-action="link"]');
1248            if (buttonLinkElement) {
1249                if (lastPopup && !lastPopup.closed) {
1250                    e.preventDefault();
1251                    lastPopup.focus();
1252                } else {
1253
1254                    let href = buttonLinkElement.href,
1255                        success = false;
1256                    if (href.indexOf('?') !== -1) {
1257                        href += '&';
1258                    } else {
1259                        href += '?';
1260                    }
1261
1262                    const redirectTo = buttonLinkElement.dataset.redirect;
1263                    if (redirectTo === 'current') {
1264                        href += 'redirect=' + encodeURIComponent(window.location.href) + '&';
1265                    } else if (redirectTo && redirectTo !== '') {
1266                        href += 'redirect=' + encodeURIComponent(redirectTo) + '&';
1267                    }
1268
1269                    if (targetWindow !== 'prefer-same-window' && checkWebView()) {
1270                        targetWindow = 'prefer-same-window';
1271                    }
1272
1273                    if (targetWindow === 'prefer-popup') {
1274                        lastPopup = NSLPopup(href + 'display=popup', 'nsl-social-connect', buttonLinkElement.dataset.popupwidth, buttonLinkElement.dataset.popupheight);
1275                        if (lastPopup) {
1276                            success = true;
1277                            e.preventDefault();
1278                        }
1279                    } else if (targetWindow === 'prefer-new-tab') {
1280                        const newTab = window.open(href + 'display=popup', '_blank');
1281                        if (newTab) {
1282                            if (window.focus) {
1283                                newTab.focus();
1284                            }
1285                            success = true;
1286                            window._nslHasOpenedPopup = true;
1287                            e.preventDefault();
1288                        }
1289                    }
1290
1291                    if (!success) {
1292                        window.location = href;
1293                        e.preventDefault();
1294                    }
1295                }
1296            }
1297        }
1298    });
1299
1300    let buttonCountChanged = false;
1301
1302    const googleLoginButtons = document.querySelectorAll(' a[data-plugin="nsl"][data-provider="google"]');
1303    if (googleLoginButtons.length && checkWebView()) {
1304        googleLoginButtons.forEach(function (googleLoginButton) {
1305            if (scriptOptions._unsupportedWebviewBehavior === 'disable-button') {
1306                disableButtonInWebView(googleLoginButton);
1307            } else {
1308                googleLoginButton.remove();
1309                buttonCountChanged = true;
1310            }
1311        });
1312    }
1313
1314    const facebookLoginButtons = document.querySelectorAll(' a[data-plugin="nsl"][data-provider="facebook"]');
1315    if (facebookLoginButtons.length && checkWebView() && /Android/.test(window.navigator.userAgent) && !isAllowedWebViewForUserAgent('facebook')) {
1316        facebookLoginButtons.forEach(function (facebookLoginButton) {
1317            if (scriptOptions._unsupportedWebviewBehavior === 'disable-button') {
1318                disableButtonInWebView(facebookLoginButton);
1319            } else {
1320                facebookLoginButton.remove();
1321                buttonCountChanged = true;
1322            }
1323        });
1324    }
1325
1326    const separators = document.querySelectorAll('div.nsl-separator');
1327    if (buttonCountChanged && separators.length) {
1328        separators.forEach(function (separator) {
1329            const separatorParentNode = separator.parentNode;
1330            if (separatorParentNode) {
1331                const separatorButtonContainer = separatorParentNode.querySelector('div.nsl-container-buttons');
1332                if (separatorButtonContainer && !separatorButtonContainer.hasChildNodes()) {
1333                    separator.remove();
1334                }
1335            }
1336        })
1337    }
1338});})();</script>
1338<div id="sevenesl-search-modal" class="sevenesl-search-modal" hidden aria-hidden="true"><div class="sevenesl-search-modal__dialog" role="dialog" aria-modal="true" aria-labelledby="sevenesl-search-modal-title"> <button class="sevenesl-search-modal__close" data-sevenesl-search-close aria-label="Close search popup"> <span aria-hidden="true">×</span> </button><div class="sevenesl-search-modal__header"><div class="sevenesl-search-modal__heading"><p class="sevenesl-search-modal__label">Search 7ESL</p><p id="sevenesl-search-modal-title" class="sevenesl-search-modal__title">Find the right article faster</p></div><form class="sevenesl-search-modal__form" role="search" method="get" action="https://7esl.com/"> <span class="sevenesl-search-modal__search-icon" aria-hidden="true"> <svg viewBox="0 0 24 24" focusable="false" aria-hidden="true"><path d="M10.5 4.75a5.75 5.75 0 1 0 0 11.5a5.75 5.75 0 0 0 0-11.5Zm0-1.5a7.25 7.25 0 1 1 0 14.5a7.25 7.25 0 0 1 0-14.5Zm6.23 12.42l3.52 3.52a.75.75 0 1 1-1.06 1.06l-3.52-3.52a.75.75 0 1 1 1.06-1.06Z" fill="currentColor"></path></svg> </span> <input type="search" class="sevenesl-search-modal__input" name="s" placeholder="Search articles, grammar, vocabulary..." autocomplete="off" /> <button type="submit" class="sevenesl-search-modal__submit">Search</button></form></div><div class="sevenesl-search-modal__summary"></div><div class="sevenesl-search-modal__status"></div><div class="sevenesl-search-modal__results"></div></div></div>
1338<script type="text/javascript">window.addEventListener("DOMContentLoaded",(e=>{document.querySelectorAll('img[loading="lazy"]').forEach((e=>{e.getBoundingClientRect().top<=window.innerHeight&&(e.loading="eager")}))}));</script>
1338 
1338<script type="text/javascript" src="https://7esl.com/wp-content/cache/breeze-minification/js/breeze_category-grammar-articles-1-112735-functions-js-sticky.min-243a12dcd23b.js?ver=1790912477"></script>
1338<script type="text/javascript" src="https://7esl.com/wp-content/cache/breeze-minification/js/breeze_category-grammar-articles-1-112735-assets-js-thinklab-e5eeb69600bc.js?ver=1790912477"></script>
1338<script type="text/javascript" src="https://7esl.com/wp-content/cache/breeze-minification/js/breeze_category-grammar-articles-1-112735-assets-js-menu.min-826f0eef6b5f.js?ver=1790912477"></script>
1338<script type="text/javascript" src="https://7esl.com/wp-content/cache/breeze-minification/js/breeze_category-grammar-articles-1-112735-assets-js-back-to-top.min-888dfb066496.js?ver=1790912477"></script>
1338<script type="text/javascript" src="https://7esl.com/wp-content/cache/breeze-minification/js/breeze_category-grammar-articles-1-112735-js-js-front-end-breeze-lazy-load.min-396a30523880.js?ver=1790912477"></script>
1338<script type="text/javascript" src="https://7esl.com/wp-content/cache/breeze-minification/js/breeze_category-grammar-articles-1-112735-tests-assets-tests-2bfa4ec760bc.js?ver=1790912477"></script>
1338<script type="text/javascript" src="https://7esl.com/wp-content/cache/breeze-minification/js/breeze_category-grammar-articles-1-112735-assets-js-toc-c4a67bd4f5d3.js?ver=1790912477"></script>
1338<script type="text/javascript" src="https://7esl.com/wp-content/cache/breeze-minification/js/breeze_category-grammar-articles-1-112735-tests-assets-esl-sounds-342f7b24e8d5.js?ver=1790912477"></script>
1338<script type="text/javascript" src="https://7esl.com/wp-content/cache/breeze-minification/js/breeze_category-grammar-articles-1-112735-tests-assets-article-tabs-0745ff6fdaba.js?ver=1790912477"></script>
1338<script type="text/javascript" src="https://7esl.com/wp-content/cache/breeze-minification/js/breeze_category-grammar-articles-1-112735-assets-js-site-chrome-7fff92bb9ee3.js?ver=1790912477"></script>
1338<script type="text/javascript" src="https://7esl.com/wp-content/cache/breeze-minification/js/breeze_category-grammar-articles-1-112735-assets-js-sidebar-search-1483100a9f2b.js?ver=1790912477"></script>
1338<script type="text/javascript" src="https://7esl.com/wp-content/cache/breeze-minification/js/breeze_category-grammar-articles-1-112735-assets-js-helpful-vote-3b9a9ab89cab.js?ver=1790912477"></script>
1338</body></html>
1339<!-- Cache served by breeze CACHE - Last modified: Fri, 02 Oct 2026 03:41:17 GMT -->

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.