0px рд╕реЗ рдСрдЯреЛ рддрдХ рдКрдВрдЪрд╛рдИ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рд╕реАрдПрд╕рдПрд╕ рд╕рдВрдХреНрд░рдордг

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░!

рдореИрдВ 0px рд╕реЗ auto рддрдХ рдХреА height рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕реАрдПрд╕рдПрд╕ рд╕рдВрдХреНрд░рдордг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рд╡реЗрдм рдШрдЯрдХ рдЯреНрд░реАрд╡реНрдпреВ рдФрд░ рдбреЗрдЯрд╛рдЧреНрд░рд┐рдб рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЯреНрд░реА рд╡реНрдпреВ рдореЗрдВ, рдореИрдВрдиреЗ рдиреЛрдбреНрд╕ рдХрд╛ рдПрдХ рд╕реБрдЧрдо рд╡рд┐рд╕реНрддрд╛рд░ / рдкрддрди рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдФрд░ рдПрдХ DataGrid рдореЗрдВ - рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдордЧреНрд░реА рд╡рд╛рд▓реА рдкрдВрдХреНрддрд┐рдпрд╛рдБред рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдХрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдзрд┐рдпрд╛рдВ рдорд┐рд▓реАрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ max-height рдорд╛рдзреНрдпрдо рд╕реЗ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╣реИрдВред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ - рд╕рдВрдХреНрд░рдордг рдФрд░ рдПрдирд┐рдореЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рд╕реАрдПрд╕рдПрд╕ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рдореЗрдиреВ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, max-height рдмрдиреА рд╣реБрдИ рд╣реИ, рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЯреНрд░реА рд╡реНрдпреВ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдореЗрдВ рдЕрд╕реАрдорд┐рдд рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рддреБрд░рдВрдд рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рдЕрдзрд┐рдХрддрдо рдКрдВрдЪрд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк max-height рдХреЛ рдмрд╣реБрдд рдмрдбрд╝реЗ рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдХреНрд░рдордг рдПрдиреАрдореЗрд╢рди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдВрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк рдмрдЪреНрдЪреЗ рдХреЗ рдиреЛрдбреНрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рдКрдВрдЪрд╛рдИ рдмрдврд╝ рдЬрд╛рдПрдЧреА рдФрд░ max-height рдХреЛ рдУрд╡рд░рд▓реИрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдкрд╕рдВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ, max-height рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред DataGrid рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ - рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХреЛрдИ рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдордЧреНрд░реА рд╣реЛ рд╕рдХрддреА рд╣реИред height:auto рдЪрд╛рд╣рд┐рдП height:auto !

рддреЛ, рдЪрд▓реЛ рд╕рдВрдХреНрд░рдордг рдХреЛ 0px рд╕реЗ auto рддрдХ рдХреА height рд╕рдВрдкрддреНрддрд┐ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдХрд░рддреЗ рд╣реИрдВ:

  • elBlock: HTMLDivElement - elBlock: HTMLDivElement / рдзреНрд╡рд╕реНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдмреНрд▓реЙрдХ;
  • elToggle: HTMLButtonElement - рд╕реНрдерд┐рддрд┐ рдХреЛ рдЯреЙрдЧрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЯрдиред

рдЙрд╕ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдПрд╕рдПрд╕ рдХреНрд▓рд╛рд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╕рд╛рдордЧреНрд░реА рдХреА рдЯреНрд░рд┐рдорд┐рдВрдЧ рдФрд░ рд╕рдВрдХреНрд░рдордг рдХреЛ рд╕реНрд╡рдпрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 .block { overflow: hidden; transition: height 500ms ease; } 

рд╣рдо elToggle рд▓рд┐рдП elToggle рдЗрд╡реЗрдВрдЯ onClick рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:

 elToggle.addEventListener("click", () => { if (elBlock.style.height === "0px") { elBlock.style.height = `${ elBlock.scrollHeight }px` } else { elBlock.style.height = `${ elBlock.scrollHeight }px`; window.getComputedStyle(elBlock, null).getPropertyValue("height"); elBlock.style.height = "0"; } }); 

рдпрд╣ рд╡рд╛рдкрд╕реА height:auto рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ height:auto рд╕рдВрдХреНрд░рдордг рдХреЗ рдмрд╛рдж height:auto :

 elBlock.addEventListener("transitionend", () => { if (elBlock.style.height !== "0px") { elBlock.style.height = "auto" } }); 

рдЦреИрд░, рдпрд╣ рд╕рдм, рдЕрдм рдмреНрд▓реЙрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ / рдкрддрди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред


рдЪрд┐рддреНрд░ 1 - рдЯреНрд░реА рд╡реНрдпреВ рдореЗрдВ рдиреЛрдбреНрд╕ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ / рдЯреВрдЯрдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг

рдпрд╣ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ:

  • рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдореИрдВ рдХреЗрд╡рд▓ рд╕реАрдПрд╕рдПрд╕ рдЪрд╛рд╣реВрдВрдЧрд╛;
  • рд╕рдВрдХреНрд░рдордг рдХреЗ рджреМрд░рд╛рди, рд╕рд╛рдордЧреНрд░реА (рдЗрд╕рдХреА рдКрдВрдЪрд╛рдИ, scrollHeight ) рдмрджрд▓ рд╕рдХрддреА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдпрджрд┐ auto рд▓реМрдЯрддрд╛ рд╣реИ, рддреЛ рдмреНрд▓реЙрдХ рдХреА рдКрдВрдЪрд╛рдИ рдПрдХ рджрд┐рд╢рд╛ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЗрдВ рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рдмрджрд▓ рдЬрд╛рдПрдЧреАред рдЗрд╕ рдкреНрд░рднрд╛рд╡ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ scrollHeight рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдФрд░ height рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рд╕рдВрдХреНрд░рдордг рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ / рдкрддрди рдкреНрд░рддреНрдпреЗрдХ 0.5 s рд▓реЗрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдВрджрд░ рдХреБрдЫ рдмрджрд▓рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреНрд░реА рд╡реНрдпреВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрдЪреНрдЪреЗ рдХреЗ рдиреЛрдб рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

Source: https://habr.com/ru/post/hi475520/


All Articles