Explain types of joints for 10 marks
| Class | Structural Basis | Mobility | Also Called |
|---|---|---|---|
| Fibrous | Dense connective tissue | Minimally mobile | Synarthroses |
| Cartilaginous | Hyaline cartilage or fibrocartilage | Slightly mobile | Amphiarthroses |
| Synovial | Synovial cavity + fluid | Freely mobile | Diarthroses |

| Type | Movement | Example |
|---|---|---|
| Plane (gliding) | Gliding/sliding in multiple planes | Acromioclavicular, intercarpal, facet joints |
| Hinge | Flexion & extension only (uniaxial) | Elbow (humero-ulnar), ankle, interphalangeal |
| Pivot | Rotation only (uniaxial) | Atlanto-axial joint, proximal radioulnar joint |
| Bicondylar | Mainly one axis + limited rotation | Knee joint |
| Condyloid (Ellipsoid) | Flexion, extension, abduction, adduction (biaxial) | Wrist (radiocarpal), metacarpophalangeal joints |
| Saddle | Flexion, extension, abduction, adduction (biaxial) | Carpometacarpal joint of thumb, sternoclavicular |
| Ball-and-socket | All movements including rotation (multiaxial) | Hip joint, glenohumeral (shoulder) joint |
JOINTS
├── Fibrous (Synarthroses) → Sutures | Gomphoses | Syndesmoses
├── Cartilaginous (Amphiarthroses) → Synchondroses | Symphyses
└── Synovial (Diarthroses) → Plane | Hinge | Pivot | Bicondylar
Condyloid | Saddle | Ball-and-socket
In one page
| Type | Movement | Example |
|---|---|---|
| Plane | Gliding | Acromioclavicular, facet joints |
| Hinge | Flexion/extension only | Elbow, ankle |
| Pivot | Rotation only | Atlanto-axial, proximal radioulnar |
| Condyloid | Flexion, extension, abduction, adduction | Wrist, metacarpophalangeal |
| Saddle | Same as condyloid + wider range | Carpometacarpal of thumb |
| Ball-and-socket | All movements (greatest ROM) | Hip, shoulder |
| Joint Type | Structure | Mobility | Example |
|---|---|---|---|
| Fibrous | Connective tissue | None/minimal | Skull sutures |
| Cartilaginous | Cartilage | Slight | Intervertebral disc |
| Synovial | Cavity + fluid | Free | Hip, knee, elbow |
/one oage
mkdir -p /tmp/workspace/joints && ls /tmp/workspace/joints
~/joints/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import mm, cm
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable
from reportlab.lib.enums import TA_CENTER, TA_LEFT
output_path = "/tmp/workspace/joints/Types_of_Joints.pdf"
doc = SimpleDocTemplate(
output_path,
pagesize=A4,
leftMargin=18*mm,
rightMargin=18*mm,
topMargin=14*mm,
bottomMargin=12*mm,
)
styles = getSampleStyleSheet()
# Custom styles
title_style = ParagraphStyle(
"Title", parent=styles["Title"],
fontSize=18, textColor=colors.HexColor("#1a3a5c"),
spaceAfter=2*mm, alignment=TA_CENTER, fontName="Helvetica-Bold"
)
subtitle_style = ParagraphStyle(
"Subtitle", parent=styles["Normal"],
fontSize=9, textColor=colors.HexColor("#555555"),
spaceAfter=4*mm, alignment=TA_CENTER, fontName="Helvetica-Oblique"
)
h1_style = ParagraphStyle(
"H1", parent=styles["Normal"],
fontSize=11, textColor=colors.white,
fontName="Helvetica-Bold", alignment=TA_LEFT,
leftIndent=4, spaceBefore=3*mm, spaceAfter=1*mm,
)
h2_style = ParagraphStyle(
"H2", parent=styles["Normal"],
fontSize=9.5, textColor=colors.HexColor("#1a3a5c"),
fontName="Helvetica-Bold", spaceBefore=2*mm, spaceAfter=1*mm,
)
body_style = ParagraphStyle(
"Body", parent=styles["Normal"],
fontSize=8.5, leading=12,
fontName="Helvetica", spaceAfter=1.5*mm,
)
bullet_style = ParagraphStyle(
"Bullet", parent=styles["Normal"],
fontSize=8.5, leading=11.5, leftIndent=12,
bulletIndent=3, fontName="Helvetica",
)
note_style = ParagraphStyle(
"Note", parent=styles["Normal"],
fontSize=7.5, textColor=colors.HexColor("#444444"),
fontName="Helvetica-Oblique", alignment=TA_CENTER, spaceBefore=2*mm,
)
def section_header(text, color="#1a3a5c"):
"""A colored banner for section headings."""
bg = colors.HexColor(color)
data = [[Paragraph(text, h1_style)]]
t = Table(data, colWidths=[174*mm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("ROUNDEDCORNERS", [3, 3, 3, 3]),
]))
return t
story = []
# Title
story.append(Paragraph("Types of Joints", title_style))
story.append(Paragraph("Structural & Functional Classification", subtitle_style))
story.append(HRFlowable(width="100%", thickness=1.2, color=colors.HexColor("#1a3a5c"), spaceAfter=3*mm))
# --- SECTION 1: Fibrous ---
story.append(section_header("1. Fibrous Joints (Synarthroses) — Immovable", "#c0392b"))
story.append(Spacer(1, 1.5*mm))
story.append(Paragraph(
"Bones united by <b>dense connective tissue</b>; no joint cavity; minimal or no movement.",
body_style
))
fibrous_data = [
[Paragraph("<b>Subtype</b>", body_style), Paragraph("<b>Description</b>", body_style), Paragraph("<b>Example</b>", body_style)],
[Paragraph("Sutures", body_style), Paragraph("Skull bones linked by sutural ligament; ossify with age", body_style), Paragraph("Coronal, sagittal sutures", body_style)],
[Paragraph("Gomphoses", body_style), Paragraph("Tooth root held in socket by periodontal ligament", body_style), Paragraph("Teeth in alveolar socket", body_style)],
[Paragraph("Syndesmoses", body_style), Paragraph("Bones joined by ligament or interosseous membrane; slight movement", body_style), Paragraph("Radius–ulna (interosseous membrane)", body_style)],
]
ft = Table(fibrous_data, colWidths=[32*mm, 88*mm, 54*mm])
ft.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#f0d0cc")),
("BACKGROUND", (0,1), (-1,-1), colors.HexColor("#fdf5f4")),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#cccccc")),
("TOPPADDING", (0,0), (-1,-1), 3), ("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 5), ("RIGHTPADDING", (0,0), (-1,-1), 5),
]))
story.append(ft)
story.append(Spacer(1, 2*mm))
# --- SECTION 2: Cartilaginous ---
story.append(section_header("2. Cartilaginous Joints (Amphiarthroses) — Slightly Moveable", "#1a6b3c"))
story.append(Spacer(1, 1.5*mm))
story.append(Paragraph(
"Bones joined by <b>hyaline cartilage or fibrocartilage</b>; no joint cavity; limited movement.",
body_style
))
cart_data = [
[Paragraph("<b>Subtype</b>", body_style), Paragraph("<b>Description</b>", body_style), Paragraph("<b>Example</b>", body_style)],
[Paragraph("Synchondroses\n(Primary)", body_style), Paragraph("Hyaline cartilage; temporary — eventually ossifies", body_style), Paragraph("Epiphyseal growth plate; 1st rib–sternum", body_style)],
[Paragraph("Symphyses\n(Secondary)", body_style), Paragraph("Fibrocartilage; strong, slightly flexible, permanent", body_style), Paragraph("Pubic symphysis, intervertebral discs", body_style)],
]
ct = Table(cart_data, colWidths=[32*mm, 88*mm, 54*mm])
ct.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#c8e6c9")),
("BACKGROUND", (0,1), (-1,-1), colors.HexColor("#f4fbf5")),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#cccccc")),
("TOPPADDING", (0,0), (-1,-1), 3), ("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 5), ("RIGHTPADDING", (0,0), (-1,-1), 5),
]))
story.append(ct)
story.append(Spacer(1, 2*mm))
# --- SECTION 3: Synovial ---
story.append(section_header("3. Synovial Joints (Diarthroses) — Freely Moveable", "#1a3a5c"))
story.append(Spacer(1, 1.5*mm))
story.append(Paragraph(
"Have a <b>synovial cavity</b> filled with synovial fluid (hyaluronic acid, lubricin). "
"Enclosed by a <b>fibrous capsule</b>; bone ends covered by <b>articular cartilage</b>. "
"Most numerous and functionally important joints in the body.",
body_style
))
syn_data = [
[Paragraph("<b>Type</b>", body_style), Paragraph("<b>Axes</b>", body_style), Paragraph("<b>Movements</b>", body_style), Paragraph("<b>Example</b>", body_style)],
[Paragraph("Plane (Gliding)", body_style), Paragraph("Multi", body_style), Paragraph("Gliding/sliding", body_style), Paragraph("Acromioclavicular, facet joints", body_style)],
[Paragraph("Hinge", body_style), Paragraph("Uni", body_style), Paragraph("Flexion, extension", body_style), Paragraph("Elbow, ankle, interphalangeal", body_style)],
[Paragraph("Pivot", body_style), Paragraph("Uni", body_style), Paragraph("Rotation only", body_style), Paragraph("Atlanto-axial, proximal radioulnar", body_style)],
[Paragraph("Bicondylar", body_style), Paragraph("Bi*", body_style), Paragraph("Flexion/extension + limited rotation", body_style), Paragraph("Knee joint", body_style)],
[Paragraph("Condyloid\n(Ellipsoid)", body_style), Paragraph("Bi", body_style), Paragraph("Flexion, extension, abd, add, circumduction", body_style), Paragraph("Wrist, metacarpophalangeal", body_style)],
[Paragraph("Saddle", body_style), Paragraph("Bi", body_style), Paragraph("Flexion, extension, abd, add, circumduction", body_style), Paragraph("Carpometacarpal of thumb", body_style)],
[Paragraph("Ball-and-Socket", body_style), Paragraph("Multi", body_style), Paragraph("All movements — greatest ROM", body_style), Paragraph("Hip, shoulder (glenohumeral)", body_style)],
]
st = Table(syn_data, colWidths=[30*mm, 12*mm, 66*mm, 66*mm])
st.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#c5d8f0")),
("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#eef4fb"), colors.white]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#cccccc")),
("TOPPADDING", (0,0), (-1,-1), 3), ("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 5), ("RIGHTPADDING", (0,0), (-1,-1), 5),
]))
story.append(st)
story.append(Spacer(1, 2*mm))
# Summary box
summary_data = [[
Paragraph(
"<b>Quick Summary:</b> Fibrous = no cavity, immovable (skull sutures) | "
"Cartilaginous = no cavity, slight movement (discs, symphysis) | "
"Synovial = cavity + fluid, freely moveable (hip, knee, shoulder)",
ParagraphStyle("sum", parent=styles["Normal"], fontSize=8, fontName="Helvetica",
textColor=colors.HexColor("#1a3a5c"))
)
]]
sum_t = Table(summary_data, colWidths=[174*mm])
sum_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#eaf0fa")),
("BOX", (0,0), (-1,-1), 0.8, colors.HexColor("#1a3a5c")),
("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 8), ("RIGHTPADDING", (0,0), (-1,-1), 8),
]))
story.append(sum_t)
# Footer
story.append(Spacer(1, 2*mm))
story.append(Paragraph(
"Sources: Firestein & Kelley's Textbook of Rheumatology · Gray's Anatomy for Students · Imaging Anatomy Atlas Vol. 3 · THIEME General Anatomy",
note_style
))
doc.build(story)
print(f"PDF saved to: {output_path}")
python /tmp/workspace/joints/generate_pdf.py
Types of Joints
PDF Document · PDF