Customizing Styles
Learn how to customize the appearance of your Next-Blog-AI content
Overview
Next-Blog-AI provides a comprehensive styling system that allows you to customize the appearance of your blog content and listings. The package includes sensible default styles, but you can override them with your own custom CSS to match your application's design system.
When using the json
format for content, you'll need to implement your own styling since you're doing the rendering yourself. This guide focuses on styling HTML content returned by the API.
CSS Classes Structure
To effectively customize the styling, it's important to understand the CSS class structure used by Next-Blog-AI:
Blog Content Classes
.next-blog-ai-content
Main container for blog post content.next-blog-ai-comments
Container for comments section.next-blog-ai-comment
Individual comment container.next-blog-ai-comment-form
Comment submission form
Blog List Classes
.next-blog-ai-list
Container for blog list.next-blog-ai-list.grid-view
Applied when using grid display format.next-blog-ai-list.list-view
Applied when using list display format.next-blog-ai-post-card
Individual post card in the list.next-blog-ai-pagination
Pagination controls container
Setting Custom Styles
There are two ways to set custom styles for your Next-Blog-AI content:
1. At Initialization
You can provide custom styles when creating the Next-Blog-AI client:
import { createNextBlogAIForNextJs } from 'next-blog-ai';
// Next.js only: use createNextBlogAIForNextJs for all integrations
// Example:
// const { setStyles } = createNextBlogAIForNextJs(process.env.NEXT_BLOG_AI_API_KEY!);
apiKey: process.env.NEXT_BLOG_AI_API_KEY!,
// Add your custom styles
styles: {
blogContent: `
.next-blog-ai-content {
max-width: 800px;
margin: 0 auto;
font-family: 'Georgia', serif;
}
.next-blog-ai-content h1 {
color: #0070f3;
}
`,
blogList: `
.next-blog-ai-list {
gap: 2rem;
}
.next-blog-ai-post-card {
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
`
}
});
2. Using the setStyles Method
You can update the styles after creating the client using the setStyles
method:
// Update styles after client creation
const { setStyles } = createNextBlogAIForNextJs(process.env.NEXT_BLOG_AI_API_KEY!);
setStyles({
blogContent: `
.next-blog-ai-content {
/* Your custom styles */
}
`,
blogList: `
.next-blog-ai-list {
/* Your custom styles */
}
`
});
Extending Default Styles
Rather than replacing the default styles completely, you can extend them by importing the default style constants and adding your customizations:
import {
DEFAULT_BLOG_STYLES,
DEFAULT_BLOG_LIST_STYLES
} from 'next-blog-ai';
// Extend the default styles
const customBlogContentStyles = `
${DEFAULT_BLOG_STYLES}
/* Add your custom styles */
.next-blog-ai-content h1 {
color: #0070f3;
}
`;
const customBlogListStyles = `
${DEFAULT_BLOG_LIST_STYLES}
/* Add your custom styles */
.next-blog-ai-post-card {
border-radius: 8px;
}
`;
// Use the extended styles
// Next.js only: use createNextBlogAIForNextJs for all integrations
// Example:
// const { setStyles } = createNextBlogAIForNextJs(process.env.NEXT_BLOG_AI_API_KEY!);
apiKey: process.env.NEXT_BLOG_AI_API_KEY!,
styles: {
blogContent: customBlogContentStyles,
blogList: customBlogListStyles
}
});
Styling Blog Content
The .next-blog-ai-content
container includes the main blog post content with standard HTML elements like headings, paragraphs, lists, and images. You can style these elements using standard CSS selectors:
const { setStyles } = createNextBlogAIForNextJs(process.env.NEXT_BLOG_AI_API_KEY!);
setStyles({
blogContent: `
/* Typography */
.next-blog-ai-content {
font-family: 'Inter', sans-serif;
line-height: 1.7;
color: #333;
}
/* Headings */
.next-blog-ai-content h1 {
font-size: 2.5rem;
color: #0070f3;
margin-bottom: 1.5rem;
}
.next-blog-ai-content h2 {
font-size: 2rem;
color: #0070f3;
margin-top: 2.5rem;
margin-bottom: 1rem;
}
/* Links */
.next-blog-ai-content a {
color: #0070f3;
text-decoration: none;
border-bottom: 1px solid transparent;
transition: border-color 0.3s;
}
.next-blog-ai-content a:hover {
border-color: #0070f3;
}
/* Images */
.next-blog-ai-content img {
max-width: 100%;
height: auto;
border-radius: 8px;
margin: 2rem 0;
}
/* Code blocks */
.next-blog-ai-content pre {
background-color: #f7f7f7;
padding: 1rem;
border-radius: 4px;
overflow-x: auto;
}
.next-blog-ai-content code {
font-family: 'Fira Code', monospace;
font-size: 0.9rem;
}
`
});
Styling Blog Lists
The .next-blog-ai-list
container includes blog post cards arranged in either a grid or list layout. You can style the container and cards using these selectors:
const { setStyles } = createNextBlogAIForNextJs(process.env.NEXT_BLOG_AI_API_KEY!);
setStyles({
blogList: `
/* Grid layout */
.next-blog-ai-list.grid-view {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 2rem;
}
/* List layout */
.next-blog-ai-list.list-view {
display: flex;
flex-direction: column;
gap: 1.5rem;
}
/* Post cards */
.next-blog-ai-post-card {
background-color: white;
border-radius: 8px;
overflow: hidden;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
transition: transform 0.3s, box-shadow 0.3s;
}
.next-blog-ai-post-card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1);
}
/* Post card elements */
.next-blog-ai-post-card-image {
width: 100%;
height: 200px;
object-fit: cover;
}
.next-blog-ai-post-card-content {
padding: 1.5rem;
}
.next-blog-ai-post-card-title {
font-size: 1.5rem;
color: #333;
margin-bottom: 0.5rem;
}
.next-blog-ai-post-card-date {
font-size: 0.875rem;
color: #666;
margin-bottom: 1rem;
}
.next-blog-ai-post-card-excerpt {
color: #444;
margin-bottom: 1.5rem;
}
.next-blog-ai-post-card-link {
display: inline-block;
color: #0070f3;
font-weight: 500;
text-decoration: none;
}
/* Pagination */
.next-blog-ai-pagination {
display: flex;
justify-content: center;
margin-top: 3rem;
gap: 0.5rem;
}
.next-blog-ai-pagination-button {
padding: 0.5rem 1rem;
background-color: #f5f5f5;
border: 1px solid #ddd;
border-radius: 4px;
cursor: pointer;
}
.next-blog-ai-pagination-button.active {
background-color: #0070f3;
color: white;
border-color: #0070f3;
}
`
});
Styling for Dark Mode
You can add styles that detect and respond to dark mode using CSS media queries:
const { setStyles } = createNextBlogAIForNextJs(process.env.NEXT_BLOG_AI_API_KEY!);
setStyles({
blogContent: `
.next-blog-ai-content {
color: #333;
}
/* Dark mode support */
@media (prefers-color-scheme: dark) {
.next-blog-ai-content {
color: #e1e1e1;
}
.next-blog-ai-content h1,
.next-blog-ai-content h2,
.next-blog-ai-content h3 {
color: #61dafb;
}
.next-blog-ai-content a {
color: #61dafb;
}
.next-blog-ai-content pre {
background-color: #2d2d2d;
}
.next-blog-ai-content code {
color: #e1e1e1;
}
}
`
});
Responsive Styling
Add responsive styles to make your blog look great on all screen sizes:
const { setStyles } = createNextBlogAIForNextJs(process.env.NEXT_BLOG_AI_API_KEY!);
setStyles({
blogList: `
/* Default (mobile) */
.next-blog-ai-list.grid-view {
display: grid;
grid-template-columns: 1fr;
gap: 1.5rem;
}
/* Tablet */
@media (min-width: 640px) {
.next-blog-ai-list.grid-view {
grid-template-columns: repeat(2, 1fr);
}
}
/* Desktop */
@media (min-width: 1024px) {
.next-blog-ai-list.grid-view {
grid-template-columns: repeat(3, 1fr);
}
}
`
});