Canonical tags can only be used when two pages have the same content. They tell search engines which of the two duplicate URLs is your preferred URL that you would like to have indexed. When you use canonical tags for any other purpose, search engines are likely to ignore the tags. Google especially has been ignoring canonical tags when the content of the pages isn't duplicate for a few years now.
If you use a canonical tag on a blog post pointing to the category page, what you are trying to say to search engines is: "Don't index this page full of text, rather index and rank this other page that has a bunch of links on it." That doesn't make any SEO sense. Pages with text are better for SEO than pages of links. Users don't like to click from the search results to get another page with a lot of links from which they have to click again to get what they want. Users would rather land directly on some specific page that has exactly what they want. Google knows this and ranks pages accordingly. Category pages don't have a lot of SEO value. It is difficult to get them to rank, and rightly so. If you want your category pages to rank, it is best to enhance them beyond the default functionality provided by most blog platforms.
The best way to pass value from one page to another on your site is not to use canonical tags. Rather, use links from your blog pages to your valuable pages.
/blog-post/gifts
,/gifts
, and/blog-posts/category/gifts
have the same contents?