The Product That (Almost) Does it All: How to Use Leave-in Conditioner
Published on September 27, 2024 — 11 min read
Share this article
Home / The Archive / The Product That (Almost) Does it All: How to Use Leave-in Conditioner
Consider leave-in conditioner ahair styling productstraddling two categories: moisturizing and styling. It may not completely replace theconditionerin your shower if you have tangle-prone hair, but some hair types (undamaged) or lengths (short) can skip the wet step altogether and condition once they’re out of the tub.
What do leave-in conditioners do?
Leave-in conditioners offer benefits for any hair type, especially if it’s damaged or normally dry (read: curls). In general, the purpose of leave-in conditioner is to soften hair with natural oils and nutrients, offer a little hold to help curls coalesce, and add a bit of weight to keep flyaways and frizz at bay.
Leave-in conditioners are the best way to add hydration to hair after chemical treatments such as waving, straightening, and coloring, and following the physical trauma of drying, brushing, and styling for all hair types. Leave-ins can also protect hair from pollution, environmental damage, and the sun’s UV rays.
Why do we put conditioner in our hair, and then immediately rinse it out? You don’t do that after applying a moisturizer to your body, do you?
Here’s some food for thought: Why do we put conditioner in our hair, and then immediately rinse it out? You don’t do that after applying a moisturizer to your body, do you? The purpose of leave-in conditioner is to provide your hair with moisture all day, rather than in a quick five-minute dose.
How do leave-in conditioners work?
Hair is composed of three major layers: 1) the innermost medulla, 2) the cortex, where color resides, and 3) the cuticle, which is made up of overlapping shingles that look something like fish scales and ideally lay flat and smooth.
The cuticle layer is held together by forces called hydrogen bonding. The more hydrogen that is present, the more secure the bond. Acids have lots of hydrogen, so the scales make a tighter seal when hair is acidic. Conditioners are usually acidic (pH < 7) to counteract the hydrogen ions that shampoo removes. They make hair easier to handle and appear shinier after washing because the cuticle is smoother. (This is the same reason that some people reach for acidic lemon, vinegar, or mayonnaise as DIY conditioners.)
Some shampoos also have ingredients that leave hair dry and brittle, which is why we recommend asulfate-free shampooor shampoo alternative. The benefits of leave-in conditioner combat those nasty effects to keep your hair healthier.
Another force at work is charged ions: The negative charge of hair is attracted to the positively charged conditioner, which results in conditioner being deposited on specific areas of damaged hair that are even more negatively charged.
How to use leave-in conditioner
There’s nothing complex about learning how to apply leave-in conditioner – all you need are your fingers. Here’s a quick step-by-step tutorial:
- Apply conditioner immediately after you shower to damp (not sopping wet) hair, so that you seal in the water to maintain hydration.
“In my experience, leave-ins are better absorbed by hair when it’s wet,” says hairstylist Jason Devastation. “Think about a sponge: A damp one will pick up moisture; a dry one just moves it around. So, if you put a cream on damp hair, you get more internal benefit; on dry hair, only the surface will be affected – and the finish will be more matte.”
- For maximum volume (especially if you want toadd volume to fine hair), apply leave-in conditioner from the ends up, avoiding the scalp area to prevent greasiness.
- Now, simply air dry, and you’re all set. However, leave-in conditioners also serve as a good foundation for secondary hair products, like gels and mousses, when you want firmer hold.
Our favorite hairstyling tip to fully reap the benefits of leave-in conditioner: Work with your hair, not against it. That generally means allowing it to air dry, rather than usingheat styling toolsto alter your natural texture. Fortunately, leave-in conditioners make your natural, air-dried results much more predictable – and help avoid the extreme wattage of a hair dryer aimed at your head, which can sap moisture and lead to breakage. Especially for those with thin or already damaged hair, air drying has many benefits, such as reduced split ends andhealthier hairoverall.
While application of leave-in conditioner is generally the same for all hair types, here are a few additional tips:
How to Use Leave-In Conditioner for Curly Hair
Immediately after you apply the product on damp hair, section curls and twist them into ringlets to set them. Let them dry, fluffing with your fingers to break them up if you’d like. Then, you can simply sweep on more leave-in conditioner as you need to tame flyaways, redefine curl, or refresh hold throughout the day. If you’re looking for an extra boost of moisture, you may also use leave-in conditioner as a part of theLOC method.
How to Use Leave-In Conditioner for Straight Hair
Straight hair looks amazing when it’s smooth and frizz-free, and to get that sleek look, you likely don’t need a ton of product. tart with small amounts of leave-in conditioner at a time, so you can gauge the appropriate amount for your hair.
How to Use Leave-In Conditioner for Fine Hair
If you have fine hair, we recommend starting with a small amount of leave-in conditioner and adding more as you go. This will allow you to observe the effects of the product and avoid getting greasy right out of the gate.
Our favorite hairstyling tip to fully reap the benefits of leave-in conditioner: Work with your hair, not against it. That generally means allowing it to air dry, rather than using heat styling tools to alter your natural texture.
Common Leave-in Conditioner Questions:
Is Leave-in Conditioner Good for Hair?
Leave-in conditioner is a great product for all hair types, offering benefits like added hydration, protection from styling damage, and fewer tangles. Regular use of leave-in conditioner can improve elasticity and make hair softer.
Can I Use Leave-in Conditioner on Dry Hair?
Leave-in conditioner is most beneficial when applied to damp hair. However, if your leave-in conditioner doubles as a styling product you may be able to use it directly on dry hair. For example, you can re-applyHair Balmthroughout the day – even after hair is dry – to revitalize your style and tame frizz.
How Often Should I Use Leave-in Conditioner?
How frequently you use leave-in conditioner depends on the specific product you use – and the rest of your hair care routine. Some leave-in conditioners can lead to product buildup if you don’t regularly and thoroughly cleanse your hair. In that case, it’s best to use leave-in conditioners once or twice a week.
However, if your hair cleanser completely removes products and impurities, you can confidently use a leave-in conditioner on a daily basis.
Which Hair Types Can Benefit From Leave-in Conditioner?
Nearly every hair type can benefit from a leave-in conditioner. For example, when used in curly hair, which tends to dry out easily, leave-in conditioner can add much-needed moisture and help define spirals. For straight hair, whether fine or thick, a leave-in conditioner can moisturize and fight frizz.
If you struggle with oily or greasy hair, you may be hesitant to try a leave-in conditioner – but by focusing a small amount of the product on the ends of your hair rather than the roots, you can still reap the smoothing benefits.
Common Conditioning Ingredients
What does leave-in conditioner contain? Typically, conditioners are formulated with various types of botanical and chemical ingredients and nourishing agents that work to improve your hair’s texture. Water is invariably the first ingredient, followed by:
Cationic Surfactants and Polymers
These two groups of compounds adhere to the hair surface and coat it in microscopic lubricating “fur” that makes hair strands glide past each other to ease detangling without snagging on ragged cuticles. Cationic ingredients also help reduce the build-up of static electricity between strands. Examples include cetrimonium chloride and dicetyldimonium chloride.
Refatting Agents
These agents include vegetable-derived fatty alcohols (not all alcohols are drying) and waxes that serve to replenish the lipids typically lost to washing.
Oils
Oils coat hair strands in slippery protection that seal in natural hydration to make styling easier and less damaging. Some oils such as olive and coconut penetrate the cuticle to the core and improve elasticity and softness. Oils significantly improve textured hair; however, the downside of oils is their potential to make hair feel greasy or heavy.
Humectants
Humectants such as panthenol and glycerol attract water to the hair and keep it there. If your hair type is susceptible to frizziness in humidity, a conditioner with these ingredients high on the list might make it worse; silicones may be your answer.
Silicones
These coat hair in a thin, glossy, lubricating film – a water barrier to help protect the hair from heat styling damage. They can, however, weigh down fine hair, cause build-up at the roots, and stretch natural waves and curls. But many people love the effect, primarily the shine. Dimethicone, dimethiconol, amodimethicone, and cyclomethicone are all silicones.
Proteins
Proteins are often added to regular conditioners with the claim that they “repair.” While they do form a protective coating over damaged hair, and some might penetrate the cuticle – slightly – and seal split ends, any repair is temporary and washes out with the next shampooing. Examples include hydrolyzed keratin and silk proteins, and the word on the curl grapevine is that they can build up over time to compromise follicles and dull your shine.
Other
In addition to the ingredients above, many leave-in conditioners include emulsifiers to keep the oil and water components in a formula mixed, pH balancers, fragrance, and preservatives.
Our recommendation for a leave-in conditioner that offers something for everybody:Hair Balmby Hairstory. “Hair Balm serves different functions for different people,” says Devastation. “If your hair is really bleached and compromised, Balm gives moisture and stability so it’s not as fragile or brittle. If your hair is curly, Balm both moisturizes and controls but doesn’t overwhelm; you get that natural spring and body while protecting it.”
Add a daily dose of vegetable proteins, antioxidants, and anti-inflammatory flower extracts, and you have a leave-in you’ll never leave out of your haircare toolkit.
shop the collection
New Wash Method for All Hair Types
PRE-WASH AND NEW WASH ORIGINAL
`; } await waitForRechargeWidgetToBeMounted(); await waitForRechargeSelect(); await relocateSubscriptionPriceAndCleanup(); if (shouldRenderBulletPoints) { assignProductBullets(); createBulletPoints(); } handleRechargeEventListeners('add'); configureRechargeForProductSelection(productId); const spinnerElement = document.getElementById('loading-spinner'); if (spinnerElement) { spinnerElement.remove(); } if (rechargeWidgetContainer) { rechargeWidgetContainer.style.opacity = '100'; rechargeWidgetContainer.classList.add('opacity-100', 'transition-opacity', 'duration-300'); } } /** * @description Function that is used to initially mount the recharge widget * @returns { boolean } based on if the product is found in recharge or not. If false, then the widget will not mount. * In addition if it cannot find the product, it short circuits and returns early. */ function shouldRechargeMount() { const checkReChargeWidget = setInterval(() => { if (window.ReChargeWidget && window.ReChargeWidget.api) { clearInterval(checkReChargeWidget); window.ReChargeWidget.api.fetchProduct(productId) .then(rechargeProduct => { if (!rechargeProduct.in_recharge) { return false; } const config = { productId: productId, injectionParent: `#subscription-selector-${productId}` }; window.ReChargeWidget.createWidget(config); return true; }) } }, 100); } async function waitForRechargeWidgetToBeMounted() { return new Promise(resolve => { const checkForRechargeContainer = setInterval(() => { if (document.querySelector(`#subscription-selector-${productId} > .rc-container-wrapper`)) { rechargeWidgetContainer = document.querySelector(`#subscription-selector-${productId} > .rc-container-wrapper`) clearInterval(checkForRechargeContainer) resolve() } }, 100) }) } /** * @description Function that is used to determine the initial price of the product, and then properly assign * the otpPriceText and subscriptionPriceText * @param {HTMLElement} originalPriceElement HTML Element that is used to determine the base price, and then calculate the subscription discount */ function derivePriceOptions(originalPriceElements) { let priceElementTextContent = originalPriceElements[0].innerText; let priceRegex = /([£$€¥])(\d+(?:\.\d{1,2})?)/; let match = priceElementTextContent.match(priceRegex); if (match) { let currencySymbol = match[1]; let priceValue = match[2]; otpPriceText = currencySymbol + priceValue; let subscriptionPrice if (productsWithTenPercentOff.includes(productId)) { subscriptionPrice = Number(priceValue) * 0.9; } else { subscriptionPrice = Number(priceValue) * 0.95; } subscriptionPriceText = `${currencySymbol}${subscriptionPrice.toFixed(2)}`; } } /** * @description Function to add or remove Recharge event listeners * @param {string} action - 'add' to add listeners, 'remove' to remove listeners */ function handleRechargeEventListeners(action) { function manageListeners() { const oneTimePurchaseInput = document.querySelector(`#subscription-selector-${productId} [data-radio-onetime]`); const subscriptionPurchaseInput = document.querySelector(`#subscription-selector-${productId} [data-radio-subsave]`); if (oneTimePurchaseInput && subscriptionPurchaseInput) { if (originalPriceElements.length > 0 && action === 'add') { derivePriceOptions(originalPriceElements) } if (currentSubscriptionSelector) { // Because recharge is responsbile for adding the .rc-option--active class when a user clicks a radio, we must set it manually for the accent-color black // to be present if we switch the radio manually, after the recharge widget remounts if (currentSubscriptionSelector === 'subscription') { subscriptionPurchaseInput.classList.add('rc-option--active') subscriptionPurchaseInput.checked = true // In products.js, the onSubmitHandler checks for a select element named 'selling_plan'. // When remounting and setting the checked value programmatically, it defaults to 'One time purchase', adding name=''. // If switching products and subscribe and save is selected, the select with name='' will still mount, causing the cart item to show a OTP rechargeSelectElement.setAttribute('name', 'selling_plan') let rechargeSellingPlans = deliveryOptionsContainer.querySelector('.rc-selling-plans') // By default our config for recharge is set to OTP. If we remount with a subscription option selected via our event handlers // The select with have a display: none; hardcoded onto the style, so we must remove it in order for it to be visible. if (rechargeSellingPlans) { if (rechargeSellingPlans.style.display === 'none') { rechargeSellingPlans.style.removeProperty('display'); } } } else { deliveryOptionsContainer.classList.add('hidden') oneTimePurchaseInput.classList.add('rc-option--active') oneTimePurchaseInput.checked = true // In products.js, the onSubmitHandler checks for a select element named 'selling_plan'. // When remounting and setting the checked value programmatically, it defaults to 'subscribe and save', adding name='selling_plan'. // If switching products and OTP is selected, the input with name='selling_plan' will still mount, causing the cart item to show as a subscription, even if it's OTP. rechargeSelectElement.setAttribute('name', '') } } // Check to see which input is checked on dom mount, then properly set the price based on the product and variant selected. if (subscriptionPurchaseInput.checked === true) { // reassign the perks container to the new product id on being switched, or set the intitial element if it doesn't exist on initial mount if ((!subscriptionPerksContainer && action === 'add') || (action === 'add' && subscriptionPerksContainer.id !== document.querySelector(`[id="${productId}-subscription-perks"]`).id)) { subscriptionPerksContainer = document.querySelector(`[id="${productId}-subscription-perks"]`); } if (originalPriceElements.length > 0) { originalPriceElements.forEach(element => { element.textContent = subscriptionPriceText; }); } if (shouldRenderBulletPoints) { subscriptionPerksContainer.classList.remove('hidden'); } } else { if (originalPriceElements.length > 0) { originalPriceElements.forEach(element => { element.textContent = otpPriceText; }); } } if (action === 'add') { oneTimePurchaseInput.addEventListener('click', onOneTimePurchaseClick); subscriptionPurchaseInput.addEventListener('click', onSubscriptionPurchaseClick); // At the time of this writing. Recharge after mounting sets the selling plan to 0. so we need to set the name manually // otherwise on PLP's radio options will only allow one option to be set oneTimePurchaseInput.name = `${productId}_selling_option` subscriptionPurchaseInput.name = `${productId}_selling_option` } else if (action === 'remove') { oneTimePurchaseInput.removeEventListener('click', onOneTimePurchaseClick); subscriptionPurchaseInput.removeEventListener('click', onSubscriptionPurchaseClick); } handleSellingPlanSelect(action) return true; } return false; } if (manageListeners()) return; const waitForElements = setInterval(() => { if (manageListeners()) { clearInterval(waitForElements); } }, 100); } /** * @description binds the proper event listerns to the proper selling plan select, in addition to pre-selecting the existing plan if * the previously selected option is present in the newly mounted select. */ function handleSellingPlanSelect(action) { const checkForSellingPlanSelect = setInterval(() => { const sellingPlanSelect = document.querySelector(`#selling_plan_${productId}`); if (sellingPlanSelect) { clearInterval(checkForSellingPlanSelect); if (action === 'add') { sellingPlanSelect.addEventListener('change', onSellingPlanChange); } else if (action === 'remove') { sellingPlanSelect.removeEventListener('change', onSellingPlanChange); } if (lastSelectedSellingPlan) { // Convert array like object into a proper array const matchingSellingPlanOption = [...sellingPlanSelect.options].find(option => option.textContent.trim() === lastSelectedSellingPlan ); if (matchingSellingPlanOption) { sellingPlanSelect.value = matchingSellingPlanOption.value; } } } }, 100); } /** * @description Function that is called when the OTP input is clicked */ function onOneTimePurchaseClick() { onRechargeOptionClick('otp'); } /** * @description Function that is called when the subscription input is clicked */ function onSubscriptionPurchaseClick() { onRechargeOptionClick('subscription'); } /** * @description Function that is called whenever the selling plan selected option has changed */ function onSellingPlanChange(event) { lastSelectedSellingPlan = event.target.options[event.target.selectedIndex].textContent.trim(); } /** * @description Function that is called when a recharge option input is clicked. Primarly used to add bullet points, and make sure the select has an option mounted * @param {string} optionType The type of option that was clicked, either OTP, or subscription */ function onRechargeOptionClick(optionType) { const selectedPriceText = optionType === 'subscription' ? subscriptionPriceText : otpPriceText; // Save the current selected selector, so when we remount, we can default to that option being checked currentSubscriptionSelector = optionType if (originalPriceElements[0].getAttribute('data-price-id') !== `price-${productId}`) { let originalPriceElementQuerySelector = document.querySelectorAll(`[data-price-id="price-${productId}"]`); // Assign all matching elements to the array originalPriceElements = Array.from(originalPriceElementQuerySelector); } if (originalPriceElements.length > 0) { originalPriceElements.forEach(element => { element.textContent = selectedPriceText; }); } if (optionType === 'otp') { deliveryOptionsContainer.classList.add('hidden') } // If the widget has been remounted, and OTP was selected, we need to remove hidden from the container so a user can see the selling plans if (deliveryOptionsContainer && optionType === 'subscription' && deliveryOptionsContainer.classList.contains('hidden')) { deliveryOptionsContainer.classList.remove('hidden') } if (subscriptionPerksContainer) { if (optionType === 'subscription' && shouldRenderBulletPoints) { subscriptionPerksContainer.classList.remove('hidden'); } else { subscriptionPerksContainer.classList.add('hidden'); } } if (optionType === 'subscription') { if (rechargeSelectElement) { // Make sure the select element as the first child element selected after mount // otherwise the select shows as empty rechargeSelectElement.children[0].selected = 'selected'; // on remount, if OTP is selected, we remove the name from the selling plan, this messes up recharge's internal logic, and then the select name always remains empty // to stop this from happening, we just manually set it everytime subscription is clicked rechargeSelectElement.setAttribute('name', 'selling_plan') } } if (optionType === 'otp') { if (rechargeSelectElement) { // When we select the OTP, but subscription was selected previously, it will still have the selling plan, name, we need to remove this or it falsely gets set as a subscription product rechargeSelectElement.setAttribute('name', '') } } } /** * @description Waits for the data price subsave attribute to be loaded, and then moves it down to the add cart button, in additio to cleaning up any remnants from recharge */ async function relocateSubscriptionPriceAndCleanup() { return new Promise((resolve) => { const waitForPriceElements = setInterval(() => { const subscriptionPriceElement = document.querySelector(`#subscription-selector-${productId} .rc_widget__price--subsave[data-price-subsave]`); const otpPriceElement = document.querySelector(`#subscription-selector-${productId} .rc_widget__price--onetime[data-price-onetime]`); const discountSpan = document.querySelector(`#subscription-selector-${productId} .rc_widget__option__discount[data-label-discount]`) let originalPriceElementQuerySelector = document.querySelectorAll(`[data-price-id="price-${productId}"]`); // Assign all matching elements to the array originalPriceElements = Array.from(originalPriceElementQuerySelector); if (subscriptionPriceElement && otpPriceElement && originalPriceElements.length > 0 && discountSpan) { // Left over elements from recharge that need to be hidden // I.E Subscription price vs OTP price, and percentage discounted const unusedRechargeElementSelectors = [ `#subscription-selector-${productId} .rc_widget__price--subsave[data-price-subsave]`, `#subscription-selector-${productId} .rc_widget__price--onetime[data-price-onetime]` ]; unusedRechargeElementSelectors.forEach(selector => { const element = document.querySelector(selector); if (element) { element.classList.add('hidden'); } }); clearInterval(waitForPriceElements); resolve(); } }, 100); }) } /** * @description Waits for the recharge select element to be loaded into the dom, and then moves it down to below the variant selector */ function waitForRechargeSelect() { return new Promise((resolve) => { const checkForRechargeSelect = setInterval(() => { if (document.querySelector(`#selling_plan_${productId}`)) { rechargeSelectElement = document.querySelector(`#selling_plan_${productId}`); const checkForNewDeliveryOptionsContainer = setInterval(() => { if (document.querySelector(`#delivery-options-${productId}`)) { deliveryOptionsContainer = document.querySelector(`#delivery-options-${productId}`); deliveryOptionsContainer.append(rechargeSelectElement.parentElement); clearInterval(checkForNewDeliveryOptionsContainer); // We only want to add the additional styles on the PDP if its the refill collection if (collection?.id === 449976238310 || pageTemplate === 'page.refill-club' || isStyledForCarousel) { conditionallyStyleRechargeOnPLP(); } // Remove the strong tag between the span and the subscribe and save text const subSaveSpan = document.querySelector(`#subscription-selector-${productId} .rc-option__text[data-label-text-subsave]`); if (subSaveSpan.querySelector('strong')) { const strongElement = subSaveSpan.querySelector('strong'); const strongText = strongElement.textContent.trim(); const textNode = document.createTextNode(strongText); subSaveSpan.replaceChild(textNode, strongElement); } clearInterval(checkForRechargeSelect); resolve(); } }, 100); } }, 100); }); } /** * @description Checks to see if the recharge widget is on the PDP, if so, it conditionally applies CSS styles, since there will be some products on the PDP that don't have * a
Damage Repair Method
8OZ NEW WASH ORIGINAL, BOND BOOST AND BOND SERUM
Richest Damage Repair Method
8OZ NEW WASH RICH, BOND BOOST AND BOND SERUM