min(), max(), and clamp() are CSS magic!

CSS has come a long way, but min(), max(), and clamp() make a lot of things a lot easier than they used to be, and really open up the world of responsive typography like we never had before! Clamp() is the ingredient that we've needed for a long time to really be able to make type fully responsive in our CSS, and to be able to do it on one line is absolute magic!
Until Safari gets there too, we can use it, but with the help of feature queries, which I made a video on here: • Using Feature Queries ...
If you'd like to learn more about viewport units like `vw` and `vh`: • CSS Units: vh, vw, vmi...
#css #responsive #typography
--
Come hang out with other dev's in my Discord Community
/ discord
---
Keep up to date with everything I'm up to
www.kevinpowell.co/newsletter
---
Help support my channel
Get a course: www.kevinpowell.co/courses
Buy the t-shirt: teespring.com/stores/making-t...
Support me on Patreon: / kevinpowell
---
My editor: VS Code - code.visualstudio.com/
How my browser refreshes when I save: • How to automatically r...
---
I'm on some other places on the internet too!
If you'd like a behind the scenes and previews of what's coming up on my KZread channel, make sure to follow me on Instagram and Twitter.
Instagram: / kevinpowell.co
Twitter: / kevinjpowell
Codepen: codepen.io/kevinpowell/
Github: github.com/kevin-powell
---
And whatever you do, don't forget to keep on making your corner of the internet just a little bit more awesome!

Пікірлер: 301

  • @MelTurner
    @MelTurner3 жыл бұрын

    Maybe important to mention that SCSS can get confused if it encounters a CSS min or max function because SASS has conflicting functions. For example min(200px, 80%) will cause a SASS units error. The trick is to capitalize: Min and Max so they are ignored by SASS (CSS is case insensitive)

  • @gemarefantero1723

    @gemarefantero1723

    2 жыл бұрын

    Wow! Thanks for the tips!. I've been found this problem for a long time ago, and I never get the answer of it until now!

  • @cretik5296

    @cretik5296

    Жыл бұрын

    I encourage this problem today, thank you for this comment

  • @holypowerenjoyer6059

    @holypowerenjoyer6059

    Жыл бұрын

    dude's a lifesavior

  • @kariakichernocherno2274

    @kariakichernocherno2274

    Жыл бұрын

    very case insensitive

  • @sivavijay1208

    @sivavijay1208

    Жыл бұрын

    tHaNkS dUdE

  • @mintran
    @mintran3 жыл бұрын

    I thought I was pretty good at CSS until I discovered your channel.

  • @coced

    @coced

    3 жыл бұрын

    Subscribe to Kevin for your regular dose of Dunning-Kruger effect

  • @proudyy

    @proudyy

    Жыл бұрын

    Actually same. My css is quite messy but still at a point sorta advanced. I just have huge problems with responsibility and the entire layout which is basic stuff. xD So to be honest, I am still quite a beginner. I got my way although already into custom box-shadows, linear and radial gradients as such, and different color units (rgb, hex, ...).

  • @lewisone

    @lewisone

    Жыл бұрын

    Right. I felt I was a rockstar until I found Kevin telling me that I barely know 20% of the things I need to know. Ego drop.

  • @Bean-kw2xp

    @Bean-kw2xp

    Жыл бұрын

    same

  • @rileycroft5835
    @rileycroft58353 жыл бұрын

    Whenever I have a issue with CSS or just want to learn a new property. I’m always so happy when I can find a video from Kevin explaining the subject! His a CSS magician ✨

  • @shaikhabdulazim6908

    @shaikhabdulazim6908

    2 жыл бұрын

    He is a legend 👌

  • @astrodas1910

    @astrodas1910

    2 жыл бұрын

    So true! I was thinking, it'd be great to have a way to make font-size responsive with simple code. Next time I open youtube BOOM! This video appeared on my home page :)

  • @ukyo6195
    @ukyo61954 жыл бұрын

    Works in all modern Browser: font-size: calc([minimum size] + ([maximum size] - [minimum size]) * ((100vw - [minimum viewport width]) / ([maximum viewport width] - [minimum viewport width]))); e. g. font-size: calc(2.25rem + (36 - 20) * ((100vw - 300px) / (1600 - 300)));

  • @noinfo9941

    @noinfo9941

    4 жыл бұрын

    I use this one too after reading the article from css-tricks "The Math of CSS locks".

  • @samuelgoncalves5616

    @samuelgoncalves5616

    4 жыл бұрын

    Your code is wrong, should be: font-size: calc(20 + (36 - 20) * ((100vw - 300px) / (1600 - 300px)))

  • @samuelgoncalves5616

    @samuelgoncalves5616

    4 жыл бұрын

    But is a great tip, thanks

  • @ukyo6195

    @ukyo6195

    4 жыл бұрын

    @@samuelgoncalves5616 does it not automatically use px if a unit is not set, I’m not sure. Otherwise thanks for the correction, I’ll test it. 👍

  • @nikilragav

    @nikilragav

    3 жыл бұрын

    Ya that's what I used to do :)

  • @joeldcanfield_spinhead
    @joeldcanfield_spinhead4 жыл бұрын

    This, I've dreamt about for so so long. Not back in '94 when I started coding HTML3.2, but it's definitely been years.

  • @Colstonewall

    @Colstonewall

    4 жыл бұрын

    WOW! I had no idea there was anything like HTML around that time ('94). I didn't even know the Internet existed until about 1997. You've been at it a while Joel!

  • @joeldcanfield_spinhead

    @joeldcanfield_spinhead

    4 жыл бұрын

    @@Colstonewall Sheesh; I was LATE to the game. The first graphical browser, Mosaic, was released in '93 and other folks were already making stuff I envied. Now, imagine the years from 94 to 99, the long wait for HTML4. Oh, and the same wait for CSS to be widely supported by both browsers [yeah, 'both':Netscape Navigator and Internet Explorer because, c'mon, there were like 3 people using Opera and 12 using Konqueror.] More old man rant: this was also all delivered over modems at speeds of 28.8kb. A 2:36-long mp3 would take 6+ minutes to download. A video would take about ten thousand years.

  • @Colstonewall

    @Colstonewall

    4 жыл бұрын

    @@joeldcanfield_spinhead Amazing. How I wish I had gotten into the game at least in the late 90's or early 2000's much less when you did. You're a Legend, Joel!

  • @KevinPowell

    @KevinPowell

    4 жыл бұрын

    Same. I did it on and off as a hobby since the late 90s. Sort of wish I got into it full-time earlier! Though I don't miss table based layouts 😂

  • @joeldcanfield_spinhead

    @joeldcanfield_spinhead

    4 жыл бұрын

    @@KevinPowell No kidding. I stumbled across a horror yesterday: I'm redesigning my author website and went to take one last look at two of my favorite authors' sites. I keep forgetting that one of them, a famous mystery writer, has a website that was built with tables in 1998 (no exaggeration) and nothing but the content has been updated since.

  • @spyrosp
    @spyrosp4 жыл бұрын

    Thank you Kevin! Always up-to-date 💪

  • @ZoeSiskos
    @ZoeSiskos4 жыл бұрын

    Oh boy, I have an itch to go back to all my projects and use this! Thank you for such a clear explanation!

  • @codingtime3803
    @codingtime38033 жыл бұрын

    I can't thank you enough kevin! I have learned so much about css and responsive design from your channel !! Your videos are gems!

  • @MarkRMu
    @MarkRMu4 жыл бұрын

    Started coding websites professionally about two years back. Your videos really helped me out back then and still do today :)

  • @degagnemarc
    @degagnemarc3 жыл бұрын

    Just love it! Great for replacing some media query. .row { width: clamp( min( 95%, 414px ), 80%, 1200px ); } Thanks Kevin for making us better devs.

  • @guillermodanielmazzarigiov1768

    @guillermodanielmazzarigiov1768

    2 жыл бұрын

    Could you please explain what you did in that codeline 😂😂😂 I'm new to this

  • @the_meaning_of_love

    @the_meaning_of_love

    2 жыл бұрын

    @@guillermodanielmazzarigiov1768 width of: - It doesn’t matter how big the screen is, it will never grow over 1.200 px (max-width) - When the screen size is small enough that the 80% of the container is smaller than 1200px (for example a screen of 1240px), it will be 80% of the width of the container. - And when the screen size is really small (as in mobile devices), the minimum size the element is going to get is 414px or 95% of the container, whatever is smaller. Basically this line is defining what’s the minimum width of the element with a min value (95% or 414px, whatever is smaller), what’s the preferred size of the element with an 80% of the container width, and what’s the maximum size of the element with a fixed value in pixels (1200)

  • @dexter3943

    @dexter3943

    2 жыл бұрын

    what would be the media query values for this?

  • @guillermodanielmazzarigiov1768

    @guillermodanielmazzarigiov1768

    2 жыл бұрын

    @@the_meaning_of_love I hadn't seen your answer, thanks man! Btw, this is brilliant, and if I would have read your answer 2 weeks ago I wouldn't have understand it anyway lol, this made me very happy, to see how much I've learned in only 2 weeks 😀

  • @irfansaeedkhan7242

    @irfansaeedkhan7242

    Жыл бұрын

    you are geniius, can i get your github repo or linkedin profile for more pro stuff, like a project that covers all these standards and we can copy from here when making new project, i already use mixins for media queries and fonts for reusability but you share some next level thing for me in a single line

  • @shvideo1
    @shvideo12 жыл бұрын

    Loved the usage of clamp() function with the font-size property and also learning about "vw" units. This is very handy and useful for web design. Thank you Kevin for this great video!

  • @rodrigonoales
    @rodrigonoales3 жыл бұрын

    Amazing the amount of media queries you could potentially save to write ! Thanks for sharing

  • @ra9r
    @ra9r3 жыл бұрын

    I've only recently discovered your channel but DAMN, great content. Thank you and keep it coming!

  • @GineetMehta
    @GineetMehta4 жыл бұрын

    I am absolutely baffled at the quality of content you put out, Kevin. Direct, crystal clear, practical videos of everything relevant. No BS. I have been working as a frontend developer for around 14 months now, and I stumbled on your channel while searching for Intersection Observers. Love the content! Subscribed to the channel and will sign up for the newsletter too. Thank you for your time and effort in giving back to the community. Much appreciated.

  • @patrickc.6183
    @patrickc.61834 жыл бұрын

    Wow! This is literally something I could use ALL the time when writing CSS! Thanks 😁!

  • @manantank
    @manantank4 жыл бұрын

    I used this a while ago and forgot about it. Thanks for reminding me. Also I didn't know you could give more than 2 values as arguments. That is pretty cool

  • @crstfrdrnt
    @crstfrdrnt3 жыл бұрын

    I'm two weeks into seriously learning html and CSS and keep coming to your videos because they're awesome. You are one great teacher

  • @loganligas8418

    @loganligas8418

    2 жыл бұрын

    How are you doing now? Hope all is well. :)

  • @nikhiltyagi1080
    @nikhiltyagi10804 жыл бұрын

    One of the best and most useful videos you have ever made. Thanks a lot boss!!

  • @janelleschuh8424
    @janelleschuh84243 жыл бұрын

    Kevin, thanks so much for the great video!! I've recently started my web development journey and your channel has been a tremendous help. So much so that as I'm practicing my skills via KZread video projects or Udemy course projects I'm not following along entirely and instead am inserting some of the new, cool CSS properties like clamp(). Thanks again!!!

  • @pagalpantipupun
    @pagalpantipupun4 жыл бұрын

    You won't believe I was looking for the exact thing today. Superb job. I am a new member of the house but I know there is a lot to learn.

  • @petarkolev6928
    @petarkolev69282 жыл бұрын

    Amazing video! Kevin, you just don't stop amazing me with each video, love your work!!!!

  • @gosnooky
    @gosnooky3 жыл бұрын

    Really enjoy your videos. I spent most of my career from the 90's onward doing systems programming in C, C++ and Java, but now that the money is in front end, I'm digging all these modern toys and tooling.

  • @nested9301

    @nested9301

    Жыл бұрын

    toys lol

  • @stefanielis7052
    @stefanielis70523 жыл бұрын

    OMG you SAVED ME. I'm just starting out but I wrote a webpage using TEN MEDIA QUERIES just to make the simple home page responsive and now with this I don't need a one. THANK YOU.

  • @codellyson
    @codellyson2 жыл бұрын

    I guess you can never know it all when it comes to CSS, thanks Kevin, you are doing a great job.

  • @iJimJones
    @iJimJones4 жыл бұрын

    I think this will come in handy for a use-case I am planning. It is a cemetery layout with grid blocks for gravesites in which the text within each block as one zooms in or out stays readable and appropriately sized. I need to couple this idea with displaying alternative text and more/less text based on size too (last name of burial only to full name to name and dates, for example).

  • @BogdanAnghelina
    @BogdanAnghelina4 жыл бұрын

    Great job, man! It's a great content and your work is very helpful. I just start do write my new Wordpress theme and I use some of your videos for my CSS optimizations, tips and tricks.

  • @burmesepotato447
    @burmesepotato4473 жыл бұрын

    Hi Kevin. I always learn something new from your vids and loved 'em! Can't wait to try clamp() on fonts. It'd be nice to see how to add proper fallbacks for them in next video :)

  • @danielChibuogwu
    @danielChibuogwu2 жыл бұрын

    Thanks for this video Kevin, it was really really helpful😊

  • @TDavisOfficial
    @TDavisOfficial2 жыл бұрын

    Man, this just helped me out sooooooo much. Thank you, thank you, thank you!

  • @j.almadhaji
    @j.almadhaji4 жыл бұрын

    Thank you Awesome content as always

  • @AllElectronicsGr
    @AllElectronicsGr4 жыл бұрын

    Your channel is sooo nice !

  • @mahdihashemi408
    @mahdihashemi4087 ай бұрын

    Thank you for your valuable and amazing videos. Your videos helped me a lot since I have started programming.

  • @mtolin82
    @mtolin824 жыл бұрын

    Wow. Thank you so much, you explain very well, so I have just subscribed!

  • @crooker2
    @crooker24 жыл бұрын

    This is great. I was using your calc() dynamic font-size trick, but I think I will default to this and have the calc as the fallback until mass support.

  • @gabrielpena5829
    @gabrielpena58293 жыл бұрын

    This video is amazing, I understood everything, THANK YOU

  • @ritaravinsky8262
    @ritaravinsky82624 жыл бұрын

    So cool, thank you Kevin

  • @hanziel
    @hanziel3 жыл бұрын

    Ok, I think I need to binge your videos! Great CSS I've never seen before.

  • @KevinPowell

    @KevinPowell

    3 жыл бұрын

    Hope you enjoy my other videos :)

  • @nomadaxable
    @nomadaxable3 жыл бұрын

    Loved this video. Thanks for the good content.

  • @norbertperka9231
    @norbertperka92313 жыл бұрын

    hi Kevin I recently found your channel and as I'm rookie to coding and building my own project I gave it a go to clamp() not only for font-size but also for margin and padding and I can say it works pretty good but I guess you already know about it :)

  • @obscurecult
    @obscurecult3 жыл бұрын

    This is awesome, I'm gonna start using right now

  • @shhhpiderman8332
    @shhhpiderman83323 жыл бұрын

    I couldn't figure out why people were adding in 1em/rem/px for the middle value. Thank you so much!

  • @CB-fd4xu
    @CB-fd4xu2 жыл бұрын

    Finally! I've been enlightened. Thank you, Kevin.

  • @_jeffe04
    @_jeffe042 жыл бұрын

    I tried max and it works perfectly with both desktop and mobile. It is what I was looking for. thanks!

  • @_neuromanser_
    @_neuromanser_4 жыл бұрын

    This is excellent, thanks! :D

  • @nevergonnadanceagain369
    @nevergonnadanceagain369 Жыл бұрын

    thank you for the video :) helped me with clamp alot.

  • @somtovitus
    @somtovitus2 жыл бұрын

    this is beautiful

  • @JohnChristosMolura
    @JohnChristosMolura4 жыл бұрын

    Css is getting more exciting recently. I have not done much css work for a few years. On and off ... and each time i come here first to brush up on it. Thanks Kevin. Appreciate the videos. I have a request though. Could you make a video on using variable fonts reliably with fallbacks that make sense.

  • @alexisjones2045
    @alexisjones20452 жыл бұрын

    Clamp seriously saved me on this website I'm building right now! Thanks so much.

  • @singhravjot
    @singhravjot Жыл бұрын

    Awesome explanation!

  • @bazzle_brush
    @bazzle_brush4 жыл бұрын

    I've been waiting for this for years

  • @sleepless83
    @sleepless83 Жыл бұрын

    You are awesome! I love your videos!

  • @jamjam3448
    @jamjam3448 Жыл бұрын

    You're the best!!! Thanks so much

  • @pulok9909
    @pulok99094 жыл бұрын

    KP you are really awesome.I am learning CSS from your channel.It helps me a lot .May you live long.Recently I have become your fan.pls keep this good work up.

  • @KevinPowell

    @KevinPowell

    4 жыл бұрын

    Thanks and welcome :D

  • @deankinyua2365
    @deankinyua23652 ай бұрын

    your channel is incredibly enllightening Kevin🤩

  • @Cdswjp
    @Cdswjp2 жыл бұрын

    thank u man. I appreciate u

  • @kokazo2009
    @kokazo20094 жыл бұрын

    Thank you Kevin, I should definitely give it a try. Maybe you could show the computed section from the dev tools to see how font-size is changing on real time

  • @KeksBln

    @KeksBln

    2 жыл бұрын

    Good idea!

  • @andreiode8712
    @andreiode87123 жыл бұрын

    Thank you sir....good explanation 🙏

  • @VasilyPavlik
    @VasilyPavlik4 жыл бұрын

    That is absolutely incredible cool!!! This is exactly what I need right now. Last and this week. Thank you so much. (Went to change 25% of my code).

  • @aaron_phillips
    @aaron_phillips2 жыл бұрын

    Great video! This solved an issue I was having with a project I was working. :P

  • @ushanmithma9716
    @ushanmithma97164 жыл бұрын

    Wow this is very useful sir, thank you very much 👌

  • @nikilragav
    @nikilragav3 жыл бұрын

    I used to do this with calc with a linear equation although I don't remember exactly what it was something like calc(vw*some small number + 16px) so 16 is the min and it can get bigger from there

  • @klutch4198
    @klutch41982 жыл бұрын

    Absolute GOLD, font size responsiveness is just one of those things

  • @jv18creator
    @jv18creator3 жыл бұрын

    O my goddddd... Man great video... Helped me a lot

  • @csupra7
    @csupra74 жыл бұрын

    Finally something that I've been searching since long time...

  • @JacksBracket
    @JacksBracket3 жыл бұрын

    This.is.INCREDIBLE

  • @justingiovanetti
    @justingiovanetti3 жыл бұрын

    Great video, cool stuff. Definitely a step in the right direction. Better than just relying on media queries. Regarding its application for font size, I’d argue though that a person’s field of view doesn’t change according to a view port or container size. That said, there are still specific use cases for being able to dial the font size on a granular level, but I believe it’s not nearly as many as people think, or nearly as significant as people perceive it to be.

  • @sherwancaris5199
    @sherwancaris51992 жыл бұрын

    just before one hour, i wrote these line of code: width: max(min(10vw, 250px), 150px); because I had never heard from clamp() function! And after I watched your video, i realized that I can change this to clamp(). thanks 👍

  • @CipherosX
    @CipherosX4 ай бұрын

    It's interesting... something that maybe wasn't clafiried it's about with the 'min' and 'max' functions as well as the clamp one. One of the both values must be a relative unit such as percentage or viewport. With the clamp function this concept is applied on the 'ideal' value. Thanks Kevin for all the information you share!

  • @shayanfaghihi
    @shayanfaghihi4 жыл бұрын

    You are awesome! Thanks and big love from Iran :)

  • @slipoch6635
    @slipoch66354 жыл бұрын

    it's css vars, or wasm. Completely supported without any fanfare whatsoever. Although I never use a max body size for a website, because then on 2k/4k screens it can end up looking awful. You could use clamp for column size in css grids for auto column sizing. Great video man!

  • @DerSolinski
    @DerSolinski4 жыл бұрын

    Oh... it wasn't fully supported until recently that explained a lot 🤣 I'm so used to those functions and never really checked since they are fairly common in many programming languages...

  • @mfranchi82
    @mfranchi822 жыл бұрын

    What a Awesome videos, Kevin. Thanks for your explain

  • @Olderaccount17
    @Olderaccount17 Жыл бұрын

    Thank you from Argentina, sir!

  • @kaveengoonawardane9651
    @kaveengoonawardane9651 Жыл бұрын

    Thanks mate!!

  • @suav1148
    @suav11484 жыл бұрын

    Great to know! I've always wished I could use min- and max- for font-sizes. Now I can use this! Thank you, Kevin!

  • @CreativeJE
    @CreativeJE4 жыл бұрын

    Awesome keep the great content coming

  • @mariachaudhry4608
    @mariachaudhry46083 жыл бұрын

    Your cheering voice is infectious

  • @mariprugovechi
    @mariprugovechi2 жыл бұрын

    thanks for that! u r awesome! :)

  • @quietScooter
    @quietScooter Жыл бұрын

    9:28 this is why I watch your content and nothing else, you don't fail to address the minor details!

  • @noco2605
    @noco2605 Жыл бұрын

    Thank you very much, very useful to know

  • @sergeialekseenko3545
    @sergeialekseenko35452 жыл бұрын

    Thank you man for your great job.Every video is quite helpful.👍How about prefer-color-schem exploration? Could you do it?

  • @bernattousfiga
    @bernattousfiga2 жыл бұрын

    Hi Kevin, Have you tried to set the html font size with clamp() and define all your site sizes (margins, font sizes, paddings...) with rem units? It makes all your web 100% responsive without using any media query! I used to redefine de html font size inside the media queries to scale the content according to the page width, but with clamp() I just don't need to do that anymore! Combined with the proper grid and flex properties, I'm able to have a nice responsive layout and get rid of media queries. Awesome! PS. Thanks a lot for all your content! I really appreciate your work. It's just brilliant and it helps a lot of people like me to become better frontend developers.

  • @incorporealnuance
    @incorporealnuance2 жыл бұрын

    the thing I do with responsive font sizes before clamp, was too do calc(Xpx + Yvw), so that the pixel size was a sort of "soft" clamp of as low as the font could go, and would grow to fit & when zoom adjusted.

  • @RanjitSachin
    @RanjitSachin3 жыл бұрын

    Well explained.. Thank you.

  • @mohamaddadh3493
    @mohamaddadh34932 жыл бұрын

    thank you so much teacher you are awesome man

  • @EricFrankLi
    @EricFrankLi3 жыл бұрын

    Thank you!

  • @JS-zm5se
    @JS-zm5se2 жыл бұрын

    Grateful I found this one.

  • @MelTurner
    @MelTurner3 жыл бұрын

    The only time more than 2 values is useful is when the values are custom properties being set somewhere else such as in a separate class. e.g. min(var(--prop1, 999), var(--prop2, 999), var(--prop3, 999)) where prop1/2/3 are only set by a specific class

  • @mikegogl
    @mikegogl3 жыл бұрын

    Thanks Kevin, I can always count on you.

  • @taylorhorne1046
    @taylorhorne10462 жыл бұрын

    you singlehandedly saved me from losing many hours of sleep last night. thank you king

  • @MarisaClardy
    @MarisaClardy4 жыл бұрын

    For three+ entries, Em/Rem/Percent/Pixels? For example, max(50em, 500px, 50%); 50 * 16 (if font size is 16) is bigger than 500px, but if font size is 9 pixels, 500px would be bigger.And then 50% could be bigger than either. That's a case where I could see it. Good for component classes (such as a card or something).

  • @rafatulalam8677
    @rafatulalam86774 жыл бұрын

    hey Kevin, when will you be making design tutorials using Adobe XD/Figma ? Would really love to see such videos.

  • @sivavijay1208
    @sivavijay1208 Жыл бұрын

    Yea, you hoped I learnt something. I learnt that I'm still a newbie in css whenever I see your channel

  • @nicolasmercadograd9941
    @nicolasmercadograd99412 жыл бұрын

    I think I've grown as designer since I met your channel. Thank you!?

  • @anasouardini
    @anasouardini4 жыл бұрын

    hey, can you do videos about ( is() matches() any() and math() ). i love your videos, keep it up

  • @carlos126q
    @carlos126q3 жыл бұрын

    thanks bro! from chile!

  • @brankoh
    @brankoh4 жыл бұрын

    14:36 I think you forgot to save and that's why it doesn't change the title font-size when you zoom in/out. GREAT VIDEO!!! THANKS FOR SHARING YOU KNOWLEDGE!!!

  • @vahidjamshidnejad9525
    @vahidjamshidnejad95252 жыл бұрын

    great,thank you

  • @RubberDuckCoding
    @RubberDuckCoding2 жыл бұрын

    VERY NICE!

  • @teal4069
    @teal40692 жыл бұрын

    You taught me about clamp. Now I am a happy as a clam