Files
g11-m3/README.md
2026-01-14 22:17:01 +03:00

425 lines
15 KiB
Markdown

# Building a Modern Social Media Platform with Bulma CSS
This guide will walk you through the process of transforming a basic HTML structure ([starter_index.html](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict/Year/2025/g11/G11M3-Web Development Frameworks/3.4 Sub-Project: CMS Website/g11-m3/bulma_version/starter_index.html)) into a fully styled modern social media platform ([index.html](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict/Year/2025/g11/G11M3-Web Development Frameworks/3.4 Sub-Project: CMS Website/g11-m3/bulma_version/index.html)) using the Bulma CSS framework.
## What is Bulma?
Bulma is a free, open-source CSS framework based on Flexbox. It provides ready-to-use frontend components for building modern, responsive websites. Unlike some other CSS frameworks, Bulma is **pure CSS** and does **not require JavaScript** to function, making it lightweight and easy to implement.
### Key Features of Bulma:
- **Responsive**: Works on mobile, tablet, and desktop
- **Flexbox-based**: Uses modern CSS technology for layout
- **Pure CSS**: No JavaScript dependency
- **Modular**: Pick and choose only the components you need
- **Modern**: Clean, minimalist design by default
## Prerequisites
- Basic understanding of HTML
- A text editor (like VS Code, Sublime Text, etc.)
- A modern web browser for testing
## Setting Up Your Project Files
Before adding Bulma classes to your HTML, you need to properly set up your project structure and CSS files.
### Step 1: Create the Proper Folder Structure
Create the following folder structure in your project:
```
your-project-folder/
├── assets/
│ └── css/
│ ├── bulma.min.css # Bulma framework CSS
│ └── style.css # Your custom CSS
├── index.html # Your main HTML file
├── starter_index.html # Your starter HTML template
└── assets/
└── image/
└── logo.png # Your logo image
```
### Step 2: Obtain Bulma CSS Files
You have two options to get the Bulma CSS file:
#### Option A: Download and Place Locally (Recommended for Beginners)
1. Go to the official Bulma website: https://bulma.io/
2. Click on "Download" and select "Standalone version"
3. Extract the downloaded file and find the `bulma.min.css` file
4. Place the `bulma.min.css` file in your [assets/css](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict/Year/2025/g11/G11M3-Web Development Frameworks/3.4 Sub-Project:%20CMS%20Website/g11-m3/bulma_version/assets/css) folder
Alternatively, you can download it directly from: https://cdn.jsdelivr.net/npm/bulma@0.9.4/css/bulma.min.css
#### Option B: Use CDN (Content Delivery Network)
Instead of downloading the file, you can link directly to Bulma hosted on a CDN by replacing the local link with:
```html
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.4/css/bulma.min.css">
```
##### Advantages of CDN approach:
- No need to download and store files locally
- Potentially faster loading if users have already cached the file from another site
- Automatic updates when you change the version in the URL
##### Disadvantages of CDN approach:
- Requires an internet connection to load the styles
- Slight dependency risk if the CDN goes down (though rare with major CDNs)
- Less control over the exact version used
### Step 3: Create Your Custom Style Sheet
Create a file called [style.css](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict/Year/2025/g11/G11M3-Web Development Frameworks/3.4 Sub-Project:%20CMS%20Website/g11-m3/bulma_version/assets/css/style.css) in your [assets/css](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict/Year/2025/g11/G11M3-Web Development Frameworks/3.4 Sub-Project:%20CMS%20Website/g11-m3/bulma_version/assets/css) folder to add your custom styles that complement Bulma.
## Step-by-Step Transformation Guide
### Step 1: Setting Up Bulma in Your Project
First, you need to add the Bulma CSS framework to your HTML file. In the [head](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict/Year/2025/g11/G11M3-Web Development Frameworks/3.4 Sub-Project:%20CMS%20Website/g11-m3/bulma_version/simple_version.html#L7-L11) section of your HTML document, add the following links:
```html
<head>
<!-- ... existing code ... -->
<!-- BULMA LOCAL FILE -->
<link rel="stylesheet" href="./assets/css/bulma.min.css">
<!-- Custom CSS -->
<link rel="stylesheet" href="./assets/css/style.css">
</head>
```
The first link imports the Bulma CSS framework from your local assets folder, and the second imports your custom styles that complement Bulma.
### Step 2: Applying Bulma Classes to Your Navigation
In the [starter_index.html](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict/Year/2025/g11/G11M3-Web Development Frameworks/3.4 Sub-Project: CMS Website/g11-m3/bulma_version/starter_index.html) file, the navigation is basic HTML. Transform it using Bulma classes:
**Before (starter version):**
```
<!-- Navigation Bar -->
<nav>
<div>
<div>
<a href="#">
<!-- Logo Image -->
<div>
M
</div>
<span>Maxy</span>
</a>
<!-- Mobile menu button -->
<a role="button" aria-label="menu" aria-expanded="false" data-target="navbarMenu">
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</a>
</div>
</div>
</nav>
```
**After (improved version):**
```
<nav class="navbar is-fixed-top has-shadow">
<div class="container">
<div class="navbar-brand">
<a class="navbar-item" href="#">
<!-- Logo Image -->
<div class="bg-indigo-600 text-white font-bold text-xl w-10 h-10 rounded-lg flex items-center justify-center mr-2 animate-float">
M
</div>
<span class="has-text-weight-bold is-size-4 has-text-maxy">Maxy</span>
</a>
<a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false" data-target="navbarMenu">
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</a>
</div>
<div id="navbarMenu" class="navbar-menu">
<div class="navbar-end">
<a class="navbar-item is-active">
<span class="icon">
<!-- Home icon would go here -->
</span>
<span class="ml-2">Home</span>
</a>
<!-- More navigation items -->
</div>
</div>
</div>
</nav>
```
#### Key Bulma Classes Used:
- `navbar`: Creates a navigation bar component
- `is-fixed-top`: Fixes the navbar at the top of the page
- `has-shadow`: Adds a shadow to the navbar
- `container`: Centers content and adds padding
- `navbar-brand`: Contains the logo and brand name
- `navbar-item`: An item inside the navbar (links, buttons, etc.)
- `navbar-burger`: Creates a responsive hamburger menu for mobile
- `navbar-menu`: Contains the navigation items
- `navbar-end`: Aligns navbar items to the right
- `is-active`: Highlights the currently active page
- `icon`: Creates an icon container
- `ml-2`: Adds left margin (margin-left: 0.5rem)
- `has-text-weight-bold`: Makes text bold
- `is-size-4`: Sets font size to level 4
### Step 3: Creating Responsive Layout with Columns
Let's compare the transformation of the main content area using Bulma's grid system:
#### Before (Basic HTML Structure)
```
<section>
<div>
<div>
<!-- Left Sidebar -->
<div>
<!-- Profile Card -->
</div>
</div>
</div>
</section>
```
#### After (Bulma Styled Version)
```
<section class="section" style="padding-top: 80px;">
<div class="container">
<div class="columns is-variable is-5">
<div class="column is-one-quarter">
<!-- Left Sidebar -->
<div class="card has-text-centered mb-5">
<!-- Profile Card Content -->
</div>
</div>
<div class="column">
<!-- Main Feed Content -->
</div>
<div class="column is-one-quarter">
<!-- Right Sidebar -->
</div>
</div>
</div>
</section>
```
#### Key Bulma Classes Used:
- `section`: Adds padding around content
- `columns`: Creates a row of columns
- `column`: Defines a column within the row
- `is-one-quarter`: Makes the column take up 1/4 of the row width
- `is-variable`: Allows spacing between columns to be adjusted
- `is-5`: Sets column spacing to level 5 (2rem)
- `card`: Creates a box with shadow for content
- `has-text-centered`: Centers text alignment
- `mb-5`: Adds bottom margin (margin-bottom: 1.5rem)
### Step 4: Creating Responsive Layout with Columns
Transform your main content area to use Bulma's grid system:
**Before:**
```
<section>
<div>
<div>
<!-- Left Sidebar -->
<div>
<!-- Profile Card -->
</div>
</div>
</div>
</section>
```
**After:**
```
<section class="section" style="padding-top: 80px;">
<div class="container">
<div class="columns is-variable is-5">
<div class="column is-one-quarter">
<!-- Left Sidebar -->
<div class="card has-text-centered mb-5">
<!-- Profile Card Content -->
</div>
</div>
<div class="column">
<!-- Main Feed Content -->
</div>
<div class="column is-one-quarter">
<!-- Right Sidebar -->
</div>
</div>
</div>
</section>
```
#### Key Bulma Classes Used:
- `section`: Adds padding around content
- `columns`: Creates a row of columns
- `column`: Defines a column within the row
- `is-one-quarter`: Makes the column take up 1/4 of the row width
- `is-variable`: Allows spacing between columns to be adjusted
- `is-5`: Sets column spacing to level 5 (2rem)
- `card`: Creates a box with shadow for content
- `has-text-centered`: Centers text alignment
- `mb-5`: Adds bottom margin (margin-bottom: 1.5rem)
### Step 5: Styling Cards and Content Elements
Apply Bulma classes to make cards and content look professional:
**Before:**
```
<div>
<div>
<div>JS</div>
<h2>John Smith</h2>
<p>@johnsmith</p>
<div>
<div>
<div>
<p>Posts</p>
<p>245</p>
</div>
</div>
<!-- More stats -->
</div>
</div>
</div>
```
**After:**
```
<div class="card has-text-centered mb-5">
<div class="card-content">
<div class="post-avatar mx-auto mb-4" style="background-color: #ff5722;">
JS
</div>
<h2 class="title is-5">John Smith</h2>
<p class="subtitle is-6 has-text-grey">@johnsmith</p>
<div class="level is-mobile profile-stats mt-4">
<div class="level-item has-text-centered">
<div>
<p class="heading">Posts</p>
<p class="title is-5">245</p>
</div>
</div>
<div class="level-item has-text-centered">
<div>
<p class="heading">Followers</p>
<p class="title is-5">1.2K</p>
</div>
</div>
<div class="level-item has-text-centered">
<div>
<p class="heading">Following</p>
<p class="title is-5">562</p>
</div>
</div>
</div>
</div>
</div>
```
#### Key Bulma Classes Used:
- `title`: Styles heading text
- `subtitle`: Styles subheading text
- `is-5`: Font size level 5
- `is-6`: Font size level 6
- `has-text-grey`: Grey text color
- `level`: Flexible horizontal layout component
- `is-mobile`: Makes level responsive for mobile
- `level-item`: Individual item in a level component
- `mx-auto`: Margin left and right auto (centers element)
- `mt-4`: Top margin (margin-top: 1rem)
- `heading`: Smaller heading text for labels
### Step 6: Adding Buttons with Bulma
Replace basic buttons with styled Bulma buttons:
**Before:**
```
<button>Message</button>
```
**After:**
```
<button class="button maxy-primary">Message</button>
```
#### Key Bulma Classes Used:
- `button`: Creates a styled button
- `maxy-primary`: Custom class defined in style.css for our brand color
### Step 7: Understanding Custom CSS
While Bulma provides many built-in styles, we've added custom CSS in [style.css](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict/Year/2025/g11/G11M3-Web Development Frameworks/3.4 Sub-Project:%20CMS%20Website/g11-m3/bulma_version/assets/css/style.css) to enhance the design:
```css
/* Custom button styles */
.maxy-primary {
background-color: #3273dc;
color: white;
}
.maxy-primary:hover {
background-color: #2761bb;
}
/* Avatar styles - Fixed distortion */
.post-avatar {
width: 50px;
height: 50px;
min-width: 50px;
min-height: 50px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
}
```
## Advantages of Using Bulma
1. **Responsive by Default**: Everything automatically adapts to different screen sizes
2. **No JavaScript Required**: Pure CSS framework means faster loading and fewer conflicts
3. **Modern Design**: Clean aesthetic without additional customization needed
4. **Flexbox-Based**: Modern CSS technology for reliable layouts
5. **Extensive Documentation**: Well-documented with many examples
6. **Modular Approach**: Only use the parts you need
7. **Consistent Spacing**: Built-in spacing utilities make design consistent
## Common Bulma Utilities
Throughout the project, you'll see various utility classes:
- **Spacing**: `m-*` (margin), `p-*` (padding), combined with directions (`t`, `b`, `l`, `r`) and sizes (1-6)
- **Text**: `has-text-centered`, `has-text-weight-bold`, `is-capitalized`
- **Colors**: `has-text-primary`, `has-background-info`, etc.
- **Typography**: `title`, `subtitle`, `is-size-1` through `is-size-7`
## Troubleshooting Tips
1. **Layout Not Responsive**: Ensure you're using the `columns` and `column` classes correctly
2. **Elements Overlapping**: Check that you're using proper spacing classes (`mt-*`, `mb-*`, `pt-*`, `pb-*`)
3. **Buttons Not Styled**: Make sure you've added the `button` class
4. **Navigation Not Working on Mobile**: Verify that your navbar-burger and navbar-menu IDs match
## Next Steps
Once you've successfully transformed your [starter_index.html](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict/Year/2025/g11/G11M3-Web Development Frameworks/3.4 Sub-Project: CMS Website/g11-m3/bulma_version/starter_index.html) into the full featured [index.html](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict/Year/2025/g11/G11M3-Web Development Frameworks/3.4 Sub-Project: CMS Website/g11-m3/bulma_version/index.html), consider exploring more Bulma components like modals, dropdowns, panels, and tabs to further enhance your social media platform.