Customization
Customize the appearance and behavior of FiveM Menu V1 to match your server's branding and style.
Theme Customization
Built-in Themes
FiveM Menu V1 comes with pre-configured themes in config/menu.json:
{
"theme": "dark", // Options: "dark", "light", "custom"
"styling": {
"width": 400,
"maxHeight": 600,
"opacity": 0.95,
"blur": true,
"shadow": true,
"borderRadius": 8
}
}Available Themes
Dark Theme (Default):
- Dark background with light text
- Optimized for nighttime gameplay
- Reduced eye strain
Light Theme:
- Light background with dark text
- Better visibility in bright areas
- Clean, modern appearance
Custom Theme:
- Fully customizable CSS
- Define your own colors and styles
Custom CSS Styling
Creating a Custom Theme
Create a new CSS file in html/css/custom-theme.css:
/* Custom Theme Variables */
:root {
--menu-primary-color: #6366f1;
--menu-secondary-color: #4f46e5;
--menu-background: rgba(17, 24, 39, 0.95);
--menu-text-color: #f9fafb;
--menu-border-color: rgba(99, 102, 241, 0.3);
--menu-hover-bg: rgba(99, 102, 241, 0.2);
--menu-selected-bg: rgba(99, 102, 241, 0.3);
}
/* Menu Container */
.menu-container {
background: var(--menu-background);
border: 2px solid var(--menu-border-color);
border-radius: 12px;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
backdrop-filter: blur(10px);
}
/* Menu Header */
.menu-header {
background: linear-gradient(135deg, var(--menu-primary-color), var(--menu-secondary-color));
color: white;
padding: 1rem;
border-radius: 10px 10px 0 0;
}
.menu-title {
font-size: 1.5rem;
font-weight: bold;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
}
/* Menu Items */
.menu-item {
padding: 0.75rem 1rem;
color: var(--menu-text-color);
transition: all 0.2s ease;
border-left: 3px solid transparent;
}
.menu-item:hover {
background: var(--menu-hover-bg);
border-left-color: var(--menu-primary-color);
}
.menu-item.selected {
background: var(--menu-selected-bg);
border-left-color: var(--menu-primary-color);
}
/* Menu Icons */
.menu-icon {
width: 20px;
height: 20px;
margin-right: 0.75rem;
color: var(--menu-primary-color);
}
/* Submenu Indicator */
.submenu-arrow {
color: var(--menu-primary-color);
font-size: 0.875rem;
}Apply Custom Theme
Update config/menu.json:
{
"theme": "custom",
"customThemeFile": "custom-theme.css"
}Icon Customization
Default Icon Library
FiveM Menu V1 uses a built-in icon library. Available icons include:
useruserscarheartshieldsettingswrenchmap-pindollar-signstarhomebriefcaseAdding Custom Icons
Step 1: Add Icon File
Place your icon files in html/icons/ folder. Supported formats:
- SVG (recommended)
- PNG (with transparency)
- WebP
fivem-menu/
├── html/
│ ├── icons/
│ │ ├── custom-police.svg
│ │ ├── custom-medic.svg
│ │ └── custom-mechanic.pngStep 2: Reference in Menu Items
Update config/menu-items.json:
{
"label": "Police Actions",
"icon": "custom-police",
"description": "Law enforcement menu"
}Step 3: Configure Icon Path (Optional)
In config/menu.json, specify custom icon directory:
{
"icons": {
"customPath": "icons/",
"format": "svg",
"fallback": "default"
}
}Using SVG Icons
Custom SVG icon example:
<!-- html/icons/custom-badge.svg -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/>
</svg>Using in menu:
{
"label": "VIP Menu",
"icon": "custom-badge"
}Layout Customization
Position Options
Configure menu position in config/menu.json:
{
"position": "top-left",
"offset": {
"x": 20,
"y": 20
}
}Available Positions:
top-lefttop-rightcenterbottom-leftbottom-rightcustom(use x/y coordinates)
Size Configuration
{
"styling": {
"width": 400, // Menu width in pixels
"maxHeight": 600, // Maximum height before scrolling
"minHeight": 200, // Minimum height
"itemHeight": 45, // Individual item height
"fontSize": 14, // Base font size
"iconSize": 20 // Icon size in pixels
}
}Spacing and Padding
{
"spacing": {
"itemPadding": "12px 16px",
"itemGap": 4,
"sectionGap": 12,
"headerPadding": "16px",
"footerPadding": "12px"
}
}Animation Customization
Animation Settings
Configure animations in config/menu.json:
{
"animation": {
"enabled": true,
"type": "slide", // Options: "slide", "fade", "scale", "none"
"duration": 300, // Animation duration in ms
"easing": "ease-in-out", // CSS easing function
"slideDirection": "left" // For slide animation: "left", "right", "top", "bottom"
}
}Animation Types
Slide Animation:
{
"type": "slide",
"slideDirection": "left",
"duration": 250
}Fade Animation:
{
"type": "fade",
"duration": 200
}Scale Animation:
{
"type": "scale",
"duration": 300,
"scaleFrom": 0.9
}Custom CSS Animation:
Create in html/css/animations.css:
@keyframes customMenuOpen {
from {
opacity: 0;
transform: translateY(-20px) scale(0.95);
}
to {
opacity: 1;
transform: translateY(0) scale(1);
}
}
.menu-container.opening {
animation: customMenuOpen 0.3s ease-out;
}Sound Customization
Audio Configuration
Configure menu sounds in config/menu.json:
{
"audio": {
"enabled": true,
"volume": 0.5,
"sounds": {
"open": "menu_open.ogg",
"close": "menu_close.ogg",
"navigate": "menu_navigate.ogg",
"select": "menu_select.ogg",
"back": "menu_back.ogg",
"error": "menu_error.ogg"
}
}
}Adding Custom Sounds
Step 1: Add sound files to html/sounds/:
html/
├── sounds/
│ ├── menu_open.ogg
│ ├── menu_close.ogg
│ ├── menu_select.ogg
│ └── custom_sound.oggStep 2: Reference in configuration:
{
"sounds": {
"select": "custom_sound.ogg"
}
}Supported formats:
- OGG (recommended)
- MP3
- WAV
Color Schemes
Predefined Color Schemes
Modern Blue:
:root {
--menu-primary: #3b82f6;
--menu-secondary: #2563eb;
--menu-accent: #60a5fa;
}Professional Purple:
:root {
--menu-primary: #8b5cf6;
--menu-secondary: #7c3aed;
--menu-accent: #a78bfa;
}Elegant Green:
:root {
--menu-primary: #10b981;
--menu-secondary: #059669;
--menu-accent: #34d399;
}Classic Red:
:root {
--menu-primary: #ef4444;
--menu-secondary: #dc2626;
--menu-accent: #f87171;
}Creating Color Scheme
Step 1: Define colors in CSS:
/* html/css/color-scheme.css */
:root {
/* Primary Colors */
--color-primary-50: #faf5ff;
--color-primary-100: #f3e8ff;
--color-primary-500: #a855f7;
--color-primary-600: #9333ea;
--color-primary-700: #7e22ce;
/* Background Colors */
--bg-primary: rgba(17, 24, 39, 0.95);
--bg-secondary: rgba(31, 41, 55, 0.9);
--bg-hover: rgba(55, 65, 81, 0.8);
/* Text Colors */
--text-primary: #f9fafb;
--text-secondary: #d1d5db;
--text-muted: #9ca3af;
}Step 2: Apply to menu elements:
.menu-container {
background: var(--bg-primary);
color: var(--text-primary);
}
.menu-item:hover {
background: var(--bg-hover);
}
.menu-item.selected {
background: var(--color-primary-600);
}Advanced Customization
Custom Fonts
Step 1: Add font files:
html/
├── fonts/
│ ├── CustomFont-Regular.woff2
│ └── CustomFont-Bold.woff2Step 2: Define font-face:
@font-face {
font-family: 'CustomFont';
src: url('../fonts/CustomFont-Regular.woff2') format('woff2');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'CustomFont';
src: url('../fonts/CustomFont-Bold.woff2') format('woff2');
font-weight: bold;
font-style: normal;
}Step 3: Apply font:
.menu-container {
font-family: 'CustomFont', sans-serif;
}Background Effects
Blur Background:
.menu-container {
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
}Glassmorphism Effect:
.menu-container {
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2);
box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.37);
}Gradient Border:
.menu-container {
border: 2px solid transparent;
background:
linear-gradient(var(--bg-primary), var(--bg-primary)) padding-box,
linear-gradient(135deg, #667eea 0%, #764ba2 100%) border-box;
}Responsive Design
Tablet/Mobile optimizations:
@media (max-width: 768px) {
.menu-container {
width: 90vw;
max-width: 400px;
}
.menu-item {
padding: 1rem 0.75rem;
font-size: 0.875rem;
}
}Customization Examples
Example 1: Police Menu Theme
:root {
--police-blue: #1e40af;
--police-light: #3b82f6;
}
.menu-container.police-theme {
background: rgba(30, 64, 175, 0.95);
border: 2px solid var(--police-light);
}
.police-theme .menu-header {
background: linear-gradient(135deg, #1e3a8a, #1e40af);
}
.police-theme .menu-item:hover {
background: rgba(59, 130, 246, 0.3);
border-left: 3px solid var(--police-light);
}Example 2: Minimalist Theme
.menu-container.minimal-theme {
background: rgba(0, 0, 0, 0.85);
border: none;
border-radius: 0;
box-shadow: none;
}
.minimal-theme .menu-item {
padding: 0.5rem 1rem;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.minimal-theme .menu-icon {
display: none;
}Example 3: Neon Theme
:root {
--neon-pink: #ff10f0;
--neon-blue: #00d9ff;
}
.menu-container.neon-theme {
background: rgba(0, 0, 0, 0.9);
border: 2px solid var(--neon-pink);
box-shadow:
0 0 10px var(--neon-pink),
0 0 20px var(--neon-pink),
0 0 30px var(--neon-pink);
}
.neon-theme .menu-item.selected {
color: var(--neon-blue);
text-shadow: 0 0 10px var(--neon-blue);
}Best Practices
- Test on different resolutions: Ensure menu looks good on various screen sizes
- Use web-safe fonts: Include fallback fonts for compatibility
- Optimize images: Compress icons and images for better performance
- Maintain contrast: Ensure text is readable against backgrounds
- Keep it simple: Don't over-complicate the design
- Consider accessibility: Use sufficient color contrast and font sizes
- Test animations: Ensure animations don't impact game performance
Troubleshooting Customization
Icons not displaying
- Check file paths in configuration
- Verify icon files exist in
html/icons/ - Ensure correct file format (SVG, PNG)
Custom CSS not applied
- Verify CSS file is referenced in config
- Check for syntax errors in CSS
- Clear browser cache (Ctrl+F5 in-game)
Colors not changing
- Ensure CSS variables are properly defined
- Check that custom theme is selected in config
- Verify CSS specificity
Next Steps
- Review Configuration for more settings
- Check Usage & Integration for implementation examples
- Visit Installation if you need setup help